diff --git a/core/pom.xml b/core/pom.xml index 6f2bac7..527a9db 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -36,6 +36,10 @@ org.jetbrains annotations + + com.sleepycat + je + jar diff --git a/core/src/main/java/ru/trader/store/berkeley/BDBStore.java b/core/src/main/java/ru/trader/store/berkeley/BDBStore.java new file mode 100644 index 0000000..4febc4d --- /dev/null +++ b/core/src/main/java/ru/trader/store/berkeley/BDBStore.java @@ -0,0 +1,55 @@ +package ru.trader.store.berkeley; + +import com.sleepycat.je.Database; +import com.sleepycat.je.DatabaseConfig; +import com.sleepycat.je.DatabaseException; +import com.sleepycat.je.Environment; +import com.sleepycat.je.EnvironmentConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; + +public class BDBStore { + private static final Logger LOG = LoggerFactory.getLogger(BDBStore.class); + + private final Environment dbEnvironment; + private final Database db; + + public BDBStore(String path){ + EnvironmentConfig envConfig = new EnvironmentConfig(); + envConfig.setAllowCreate(true); + envConfig.setSharedCache(true); + envConfig.setTransactional(true); + dbEnvironment = new Environment(new File(path), envConfig); + + try { + DatabaseConfig dbConfig = new DatabaseConfig(); + dbConfig.setAllowCreate(true); + db = dbEnvironment.openDatabase(null, "Trader", dbConfig); + } catch (DatabaseException e){ + LOG.error("Error on open DB, path {}", path); + LOG.error("",e); + throw e; + } + } + + + public void close(){ + if (db != null) { + try { + db.close(); + } catch (DatabaseException e){ + LOG.error("Error on close DB", e); + } + } + if (dbEnvironment != null) { + try { + dbEnvironment.cleanLog(); + dbEnvironment.close(); + } catch (DatabaseException e){ + LOG.error("Error on close DB environment", e); + } + } + } +} diff --git a/core/src/main/java/ru/trader/store/berkeley/entities/Group.java b/core/src/main/java/ru/trader/store/berkeley/entities/Group.java new file mode 100644 index 0000000..87e6354 --- /dev/null +++ b/core/src/main/java/ru/trader/store/berkeley/entities/Group.java @@ -0,0 +1,22 @@ +package ru.trader.store.berkeley.entities; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; +import ru.trader.core.GROUP_TYPE; + + +@Entity +public class Group { + @PrimaryKey + private String name; + + private GROUP_TYPE type; + + private Group() { + } + + public Group(String name, GROUP_TYPE type) { + this.name = name; + this.type = type; + } +} diff --git a/core/src/main/java/ru/trader/store/berkeley/entities/Item.java b/core/src/main/java/ru/trader/store/berkeley/entities/Item.java new file mode 100644 index 0000000..30d62e6 --- /dev/null +++ b/core/src/main/java/ru/trader/store/berkeley/entities/Item.java @@ -0,0 +1,27 @@ +package ru.trader.store.berkeley.entities; + +import com.sleepycat.persist.model.*; + +@Entity +public class Item { + @PrimaryKey(sequence="I_ID") + private long id; + + private String name; + + @SecondaryKey(relate = Relationship.MANY_TO_ONE, + relatedEntity = Group.class, + onRelatedEntityDelete = DeleteAction.CASCADE) + private String groupId; + + private Item() { + } + + public Item(String name) { + this.name = name; + } + + public long getId() { + return id; + } +} diff --git a/core/src/main/java/ru/trader/store/berkeley/entities/Offer.java b/core/src/main/java/ru/trader/store/berkeley/entities/Offer.java new file mode 100644 index 0000000..22cbab6 --- /dev/null +++ b/core/src/main/java/ru/trader/store/berkeley/entities/Offer.java @@ -0,0 +1,32 @@ +package ru.trader.store.berkeley.entities; + +import com.sleepycat.persist.model.*; +import ru.trader.core.OFFER_TYPE; + +@Entity +public class Offer { + + @PrimaryKey(sequence = "O_ID") + private long id; + + @SecondaryKey(relate = Relationship.MANY_TO_ONE, + relatedEntity = Item.class, + onRelatedEntityDelete = DeleteAction.NULLIFY) + private long itemId; + + @SecondaryKey(relate = Relationship.MANY_TO_ONE, + relatedEntity = Vendor.class, + onRelatedEntityDelete = DeleteAction.NULLIFY) + private long vendorId; + + @SecondaryKey(relate = Relationship.ONE_TO_ONE) + private OFFER_TYPE type; + + private double price; + + public Offer(Item item, OFFER_TYPE type, double price) { + this.itemId = item.getId(); + this.type = type; + this.price = price; + } +} diff --git a/core/src/main/java/ru/trader/store/berkeley/entities/Vendor.java b/core/src/main/java/ru/trader/store/berkeley/entities/Vendor.java new file mode 100644 index 0000000..012193b --- /dev/null +++ b/core/src/main/java/ru/trader/store/berkeley/entities/Vendor.java @@ -0,0 +1,33 @@ +package ru.trader.store.berkeley.entities; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; +import com.sleepycat.persist.model.Relationship; +import com.sleepycat.persist.model.SecondaryKey; + +@Entity +public class Vendor { + + @PrimaryKey(sequence = "V_ID") + private long id; + + private String name; + + @SecondaryKey(relate = Relationship.ONE_TO_ONE) + private double x; + @SecondaryKey(relate = Relationship.ONE_TO_ONE) + private double y; + @SecondaryKey(relate = Relationship.ONE_TO_ONE) + private double z; + + private Vendor() { + } + + public Vendor(String name) { + this.name = name; + } + + public long getId() { + return id; + } +} diff --git a/pom.xml b/pom.xml index 78f9b77..73b21c8 100644 --- a/pom.xml +++ b/pom.xml @@ -74,9 +74,23 @@ controlsfx 8.0.6 + + com.sleepycat + je + 6.1.5 + + + + oracleReleases + Oracle Released Java Packages + http://download.oracle.com/maven + default + + +