commit | 2ce5e2f48b5b389aeccb7475ab1d9ee1fdf9219a | [log] [tgz] |
---|---|---|
author | Wang, Gang(Gary) <gang1.wang@intel.com> | Wed Feb 24 21:07:13 2016 -0800 |
committer | Wang, Gang(Gary) <gang1.wang@intel.com> | Wed Feb 24 21:07:13 2016 -0800 |
tree | 3be1fc459a86af372ff9a651cc9fd4b21412a29a | |
parent | d919d529a2ce144ae49c02d1e7754cb815d7f671 [diff] |
fixed all warnings for javadoc generate
(This project has been manually tranferred from https://github.com/bigdata-memory/bdmem)
A structured data in-memory persistence & hybrid memory resources management library. It is featured with in-place non-volatile Java object programming model.
/** * a durable class should be abstract and implemented from Durable interface with @NonVolatileEntity annotation */ @NonVolatileEntity public abstract class Person<E> implements Durable, Comparable<Person<E>> { E element; // Generic Type /** * callback for brand new durable object creation */ @Override public void initializeAfterCreate() { System.out.println("Initializing After Created"); } /** * callback for durable object recovery */ @Override public void initializeAfterRestore() { System.out.println("Initializing After Restored"); } /** * setup generic info manually to avoid performance penalty */ @Override public void setupGenericInfo(EntityFactoryProxy[] efproxies, GenericField.GType[] gftypes) { } @Test public void testOutput() throws RetrieveNonVolatileEntityError { System.out.printf("Person %s, Age: %d ( %s ) \n", getName(), getAge(), null == getMother()? "No Recorded Mother" : "Has Recorded Mother"); } public int compareTo(Person<E> anotherPerson) { int ret = 0; if (0 == ret) ret = getAge().compareTo(anotherPerson.getAge()); if (0 == ret) ret = getName().compareTo(anotherPerson.getName()); return ret; } /** * Getters and Setters for persistent fields with @NonVolatileGetter and @NonVolatileSetter */ @NonVolatileGetter abstract public Short getAge(); @NonVolatileSetter abstract public void setAge(Short age); @NonVolatileGetter abstract public String getName() throws RetrieveNonVolatileEntityError; @NonVolatileSetter abstract public void setName(String name, boolean destroy) throws OutOfPersistentMemory, RetrieveNonVolatileEntityError; @NonVolatileGetter abstract public Person<E> getMother() throws RetrieveNonVolatileEntityError; @NonVolatileSetter abstract public void setMother(Person<E> mother, boolean destroy) throws RetrieveNonVolatileEntityError; @NonVolatileGetter abstract public Person<E> getFather() throws RetrieveNonVolatileEntityError; @NonVolatileSetter abstract public void setFather(Person<E> mother, boolean destroy) throws RetrieveNonVolatileEntityError; }
// create an allocator object with parameters ie. capacity and uri BigDataPMemAllocator act = new BigDataPMemAllocator(1024 * 1024 * 8, "./pobj_person.dat", true); // fetch underlying capacity of key-value pair store for Non Volatile handler storage KEYCAPACITY = act.persistKeyCapacity(); .... // close it after use act.close();
// create a new durable person object from specific allocator person = PersonFactory.create(act); // set attributes person.setAge((short)rand.nextInt(50)); person.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true); // keep this person on persistent key-value pair store act.setPersistKey(keyidx, person.getNonVolatileHandler()); for (int deep = 0; deep < rand.nextInt(100); ++deep) { // create another person as mother mother = PersonFactory.create(act); mother.setAge((short)(50 + rand.nextInt(50))); mother.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true); // set the person's mother person.setMother(mother, true); person = mother; }
for (long i = 0; i < KEYCAPACITY; ++i) { System.out.printf("----------Key %d--------------\n", i); // iterate persistent handlers from key-value store of specific allocator val = act.getPersistKey(i); if (0L == val) { break; } // restore person objects from specific allocator Person<Integer> person = PersonFactory.restore(act, val, true); while (null != person) { person.testOutput(); // iterate all mother's ancestors person = person.getMother(); } }
Please see the file LICENSE for information on how this library is licensed.
To build this library, you may need to install some required packages on the build system:
Once the build system is setup, this Library is built using this command at the top level:
$ mvn clean package
To exclude a customized allocator service for your platform e.g. OSX, note that if you excluded one or both allocator services, some or all testcases/examples will fail since their allocator is unavailable.
$ mvn -pl '!allocator-services/nvml-vmem-service' clean package
To build and run the unit tests:
$ mvn clean package -DskipTests=false
To install this package to local repository (required to run examples and testcases):
$ mvn clean install
To run an example:
$ mvn exec:exec -Pexample -pl examples
To run several test cases:
$ mvn -Dtest=NonVolatilePersonNGTest test -pl core -DskipTests=false # a testcase for module "core" $ mvn -Dtest=BigDataMemAllocatorNGTest test -pl core -DskipTests=false # the second testcase for module "core" $ mvn -Dtest=MemClusteringNGTest test -pl core -DskipTests=false # the third testcase for module "core" $ mvn -Dtest=NonVolatileNodeValueNGTest test -pl collections -DskipTests=false # a testcase for module "collection" $ mvn -Dtest=NonVolatilePersonNGTest test -pl collections -DskipTests=false # another testcase for module "collection"