All Projects → pmem → pmemkv-java

pmem / pmemkv-java

Licence: BSD-3-Clause license
Java bindings for pmemkv

Programming Languages

java
68154 projects - #9 most used programming language
shell
77523 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to pmemkv-java

pmemkv-bench
Benchmarking tools for pmemkv
Stars: ✭ 19 (-32.14%)
Mutual labels:  pmem, pmdk, pmemkv
valgrind
Enhanced Valgrind for Persistent Memory
Stars: ✭ 85 (+203.57%)
Mutual labels:  pmem
llpl
Low Level Persistence Library
Stars: ✭ 95 (+239.29%)
Mutual labels:  pmdk
aeon
AEON is an In-place file system designed for non-volatile memories.
Stars: ✭ 13 (-53.57%)
Mutual labels:  pmem

GHA build status PMEMKV-JAVA version pmemkv-root maven central

pmemkv-java

Java bindings for pmemkv, using Java Native Interface. It's mostly functionally equal to pmemkv in version 1.0, but some of the new functionalities (e.g. from pmemkv 1.4) are already available.

All known issues and limitations are logged as GitHub issues or are described in pmemkv's man pages.

Java API is documented with javadocs and can be found as html on https://pmem.io/pmemkv-java for every branch/release. For most recent always see master docs.

Latest releases can be found on the "releases" tab. Up-to-date support/maintenance status of branches/releases is available on pmem.io.

Dependencies

  • pmemkv 1.4 - Key-Value Datastore for Persistent Memory
    • pmemkv source package (pmemkv-devel or libpmemkv-dev)
  • Java Development Kit 8
  • gcc-c++ compiler
  • Apache Maven 3 - build system

Usage

Maven repository

This pmemkv binding is accessible from maven repository:

io.pmem namespace @ maven.org

You can add our project as a dependency and use it freely. Make sure to use it e.g. like this:

<dependency>
  <groupId>io.pmem</groupId>
  <artifactId>pmemkv-root</artifactId>
  <version>[1.2.0,)</version>
</dependency>

Installation

Start by installing pmemkv (currently at least in version 1.4) in your system. Make sure our helper library pmemkv_json_config is enabled by specifying extra cmake parameter - cmake .. -DBUILD_JSON_CONFIG=ON ....

It may be necessary to configure a proxy and set JAVA_HOME environment variable. Set JAVA_HOME variable with directory containing JDK 8 installed typically in /usr/lib/jvm/, command below will set first directory matching to 1.8.0, but path can differ in some exotic distros:

export JAVA_HOME=`ls -d1 /usr/lib/jvm/* | grep "1.8.0" | head -n 1`
echo $JAVA_HOME

Clone the pmemkv-java tree:

git clone https://github.com/pmem/pmemkv-java.git
cd pmemkv-java

Build and install Java Native Interface (JNI) and java bindings:

mvn install

If dependencies (pmemkv, libpmemobj-cpp, pmdk, etc.) are installed in non-standard location(s) it may be also necessary to set up: CPLUS_INCLUDE_PATH and LIBRARY_PATH for compiling and linking JNI code (gcc env. variables), LD_LIBRARY_PATH for examples and tests build/execution.

CPLUS_INCLUDE_PATH=<path_to_includes> \
LIBRARY_PATH=<path_to_libs> \
LD_LIBRARY_PATH=<path_to_libs> mvn install

Testing

This library includes a set of automated tests that exercise all functionality.

LD_LIBRARY_PATH=<path_to_libs> mvn test

to execute tests on non-default path (/dev/shm), setup desired directory, e.g.:

LD_LIBRARY_PATH=<path_to_libs> mvn test -Dtest.db.dir=/my/test/dir

Examples

We use /dev/shm with emulated persistent memory in examples.

Examples can be found within this repository in examples directory. To execute them, run e.g.:

cd examples
mvn package
PMEM_IS_PMEM_FORCE=1 java -ea -Xms1G -jar StringExample/target/StringExample-*-jar-with-dependencies.jar

If you want to use our examples with pmemkv from maven repository, you can take a look at our testing script executed in our dedicated CI workflow. It boils down to changing build command (mvn package) to e.g.:

mvn package -Dpmemkv.packageName=pmemkv-root -Dpmemkv.packageVersion=1.2.0

Contributing

Any contributions are welcome. Process, hints and good practices are described in CONTRIBUTING.md.

Debugging

Debugging process is described in DEBUGGING.md.

Documentation

Docs can be generated using mvn by executing commands:

mvn javadoc:javadoc

Contact us

For more information about pmemkv and java bindings, contact Igor Chorążewicz ([email protected]), Piotr Balcer ([email protected]) or post on our #pmem Slack channel using this invite link or Google group.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].