Skip to content

DataFactory is a library for Jetbrains Xodus database that provides compute abstraction layer through Actions and Conditions with a fluent API. It allows a managed access to the underlying database through consistent Java API that works both in an embedded or in a remote context through Java RMI.

License

Notifications You must be signed in to change notification settings

divroll/datafactory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 

Repository files navigation

drawing

License

What is DataFactory?

DataFactory is a library for Jetbrains Xodus database that provides compute abstraction layer through Actions and Conditions with a fluent API. It allows a managed access to the underlying database through consistent Java API that works both in an embedded or in a remote context through Java RMI.

Requirements: JDK 8, Maven

Features

  • It's a drop-in library for any Java project
  • Does not require any server setup or administration
  • Extendable managed database access through interfaces

Installation

$mvn clean install

Maven

<dependency>
    <groupId>com.divroll</groupId>
    <artifactId>datafactory</artifactId>
    <version>0-SNAPSHOT</version>
</dependency>

Usage

EntityStore entityStore 
    = isClientMode ? DataFactoryClient.getInstance().getEntityStore() 
          : DataFactory.getInstance().getEntityStore();

Basic Operation

The basic operation for the EntityStore are:

  • Save which is used both for saving a single entity or multiple entities
  • Get which is used for getting a single entity or multiple entities
  • Delete which is used for deleting a single or multiple entities

All operation, single or multiple entities operates in a transaction. Thus, it follows the concept of all-or-nothing.

Save Operation
DataFactoryEntity entity = new DataFactoryEntityBuilder()
    .environment(PROD_ENVIRONMENT)
    .entityType("Room")
    .putPropertyMap("address", "Room 123, 456 Street, 789 Avenue")
    .build();

entity = entityStore.saveEntity(entity).get();

Actions

Actions execute as part of the save operation. There as built-in actions which are listed here, but custom actions can also be used. An example implementation can be found here

entityStore.saveEntity(new DataFactoryEntityBuilder()
    .environment(PROD_ENVIRONMENT)
    .entityId(entity.entityId())
    .addActions(new IncrementLikesAction(100))
    .build());

Conditions

Conditions provides the facility to save (or most usually, to update) an entity based on specific conditions. Throwing exception when condition is not satisfied. There are built-in conditions that can be used off-the-shelf which can be found here however it also possible to create custom conditions as such:

entity = entityStore.saveEntity(new DataFactoryEntityBuilder()
    .environment(PROD_ENVIRONMENT)
    .entityId(entity.entityId())
    .addConditions(new HasBeenLikedThisWeekCondition())
    .addActions(new IncrementLikesAction(100))
    .build()).get();

The above example shows that the save operation will only succeed if the condition HasBeenLikedThisWeekCondition, and will execute the action accordingly if satisfied. Both the condition and the action here are self-explanatory but you can check the details here.

What's the motivation behind this library?

Jetbrains Xodus is fast and low-footprint, an embedded database by design, accessing it remotely can only be achieved by creating custom endpoints through remote access methods.

DataFactory provides a generic and fluent API for accessing the Xodus database without hand-coding these custom endpoints and just using Java RMI.

Furthermore, the lack of ability to scale horizontally across multiple JVM's makes it hard to be used in a distributed manner.

With DataFactory, a Xodus database instance running on a vertically-scaled server can be used in along with horizontally scaling application servers.

About

DataFactory is a library for Jetbrains Xodus database that provides compute abstraction layer through Actions and Conditions with a fluent API. It allows a managed access to the underlying database through consistent Java API that works both in an embedded or in a remote context through Java RMI.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages