I followed the instruction in the ClusterJ tutorial here to connect to MySQL NDB cluster using the NDB api. Below is a sample code of what I am doing right now:
Main.java
import com.mysql.clusterj.ClusterJHelper;
import com.mysql.clusterj.SessionFactory;
import com.mysql.clusterj.Session;
import com.mysql.clusterj.Query;
import com.mysql.clusterj.query.QueryBuilder;
import com.mysql.clusterj.query.QueryDomainType;
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.*;
import java.util.Properties;
import java.util.List;
public class Main {
public static void main (String[] args) throws
java.io.FileNotFoundException,java.io.IOException {
// Load the properties from the clusterj.properties file
File propsFile = new File("clusterj.properties");
InputStream inStream = new FileInputStream(propsFile);
Properties props = new Properties();
props.load(inStream);
//Used later to get user input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Create a session (connection to the database)
SessionFactory factory = ClusterJHelper.getSessionFactory(props);
Session session = factory.getSession();
// Create and initialize an Employee
Employee newEmployee = session.newInstance(Employee.class);
newEmployee.setId(988);
newEmployee.setFirst("John");
newEmployee.setLast("Jones");
newEmployee.setStarted("1 February 2009");
newEmployee.setDepartment(666);
// Write the Employee to the database
session.persist(newEmployee);
}
}
I encounter the below error when I am trying to run this:
java.lang.UnsatisfiedLinkError: no ndbclient in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.mysql.clusterj.tie.ClusterConnectionServiceImpl.loadSystemLibrary(ClusterConnectionServiceImpl.java:68)
at com.mysql.clusterj.tie.ClusterConnectionServiceImpl.create(ClusterConnectionServiceImpl.java:87)
at com.mysql.clusterj.core.SessionFactoryImpl.createClusterConnection(SessionFactoryImpl.java:335)
at com.mysql.clusterj.core.SessionFactoryImpl.createClusterConnectionPool(SessionFactoryImpl.java:288)
at com.mysql.clusterj.core.SessionFactoryImpl.<init>(SessionFactoryImpl.java:211)
at com.mysql.clusterj.core.SessionFactoryImpl.getSessionFactory(SessionFactoryImpl.java:146)
at com.mysql.clusterj.core.SessionFactoryServiceImpl.getSessionFactory(SessionFactoryServiceImpl.java:36)
at com.mysql.clusterj.core.SessionFactoryServiceImpl.getSessionFactory(SessionFactoryServiceImpl.java:27)
at com.mysql.clusterj.ClusterJHelper.getSessionFactory(ClusterJHelper.java:72)
at com.mysql.clusterj.ClusterJHelper.getSessionFactory(ClusterJHelper.java:57)
at com.pkg.mysql.Main.main(Main.java:27)
The error occurs since ClusterJ requires the ndb_engine.so
file in the java classpath.
Refer Link: http://ftp.nchu.edu.tw/MySQL/doc/ndbapi/en/mccj-getting.html
I could run the program once I specify the path.
# steps to compile and run the ndb java program on linux
javac -classpath /home/user1/clusterj-7.6.8.jar:. Main.java Employee.java
java -classpath /home/user1/clusterj-7.6.8.jar:. -Djava.library.path=/usr/lib64/mysql Main
I still could not find a way to resolve it on Windows environment.