Calling JVM code from Rust via JNI.
JNI calls are about 10-20 times slower than regular JVM instructions. It is adviced to call as few functions as possible that do as much work as possible.
Creating a flat Java wrapper class and producing a fat JAR with all the dependencies also reduces the amount of Rust interface code.
A more complete example is kud1ing/tinkerpop-rs which uses Rucaja to call Apache TinkerPop.
The code is tested on Linux and macOS.
Your platform might need adjustments in build.rs
.
Trying to run may give:
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: ./target/debug/rucaja
Reason: image not found
Abort trap: 6
this might require something like:
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.