Changeset: d30a964aa94e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d30a964aa94e
Modified Files:
java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
java/embedded/org_monetdb_embedded_MonetDBEmbedded.h
java/embedded/pom.xml
java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
Branch: embedded-java
Log Message:
Use the preset library location
diffs (157 lines):
diff --git a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
--- a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
+++ b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
@@ -13,20 +13,26 @@
#include "res_table.h"
#include "mal_type.h"
+#include "dlfcn.h"
+
bool running = false;
char *runningDirectory;
JNIEXPORT jboolean JNICALL
Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper
-(JNIEnv *env, jobject object, jstring directory, jboolean silent) {
+(JNIEnv *env, jobject object, jstring libDirectoryJava, jstring
dbDirectoryJava, jboolean silent) {
(void)object;
- const char *directory_string_tmp = (*env)->GetStringUTFChars(env,
directory, 0);
- char *databaseDirectory = strdup(directory_string_tmp);
- char libsDirectory[1000];
+ const char *libdir_string_tmp = (*env)->GetStringUTFChars(env,
libDirectoryJava, 0);
+ const char *dbdir_string_tmp = (*env)->GetStringUTFChars(env,
dbDirectoryJava, 0);
+ char *libsDirectory = strdup(libdir_string_tmp);
+ char *databaseDirectory = strdup(dbdir_string_tmp);
unsigned char silent_char = 'n';
char *err;
jclass exClass = (*env)->FindClass(env, "java/io/IOException");
- // Release the directory string
- (*env)->ReleaseStringUTFChars(env, directory, directory_string_tmp);
+ void *dl;
+
+ // Release the directories strings
+ (*env)->ReleaseStringUTFChars(env, libDirectoryJava, libdir_string_tmp);
+ (*env)->ReleaseStringUTFChars(env, dbDirectoryJava, dbdir_string_tmp);
// Check if we already have a running db
if (running) {
@@ -48,8 +54,8 @@ JNIEXPORT jboolean JNICALL Java_org_mone
silent_char = 'y';
}
- // XXX: still relying on BINDIR
- snprintf(libsDirectory, 1000, "%s/../lib", BINDIR);
+ dl = dlopen("libmonetdb5", RTLD_NOW | RTLD_GLOBAL);
+ dlclose(dl);
err = monetdb_startup(libsDirectory, databaseDirectory, silent_char);
// Checking for errors
if (err != NULL) {
diff --git a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h
b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h
--- a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h
+++ b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h
@@ -13,7 +13,7 @@ extern "C" {
* Signature: (Ljava/lang/String;Z)I
*/
JNIEXPORT jboolean JNICALL
Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper
- (JNIEnv *, jobject, jstring, jboolean);
+ (JNIEnv *, jobject, jstring, jstring, jboolean);
/*
* Class: org_monetdb_embedded_MonetDBEmbedded
diff --git a/java/embedded/pom.xml b/java/embedded/pom.xml
--- a/java/embedded/pom.xml
+++ b/java/embedded/pom.xml
@@ -62,6 +62,7 @@ MonetDB is an analytical database design
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
+ <version>2.12.4</version>
<configuration>
<argLine>-Djava.library.path="/Users/dnedev/monetdb/installation/lib"</argLine>
</configuration>
diff --git
a/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
b/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
--- a/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
+++ b/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
@@ -17,13 +17,13 @@ import org.monetdb.embedded.result.Embed
/**
* Embedded version of MonetDB.
* Communication between Java and native C is done via JNI.
- *
- * <br/><strong>Note</strong>: You can have only one embedded MonetDB database
running per JVM process.
+ * <br/>
+ * <strong>Note</strong>: You can have only one embedded MonetDB database
running per JVM process.
*/
public class MonetDBEmbedded {
static {
// Load the embedded library
- System.loadLibrary("embedded_java");
+// System.loadLibrary("embedded_java");
}
/**
* Flag if the embedded database was already started.
@@ -50,6 +50,7 @@ public class MonetDBEmbedded {
* @param silentFlag Silent flag
*/
public MonetDBEmbedded(final File databaseDirectory, final boolean
silentFlag) {
+ System.loadLibrary("embedded_java");
if (!databaseDirectory.isDirectory()) {
throw new IllegalArgumentException(databaseDirectory +
" is not a directory");
}
@@ -75,7 +76,7 @@ public class MonetDBEmbedded {
*/
public boolean start() throws IOException {
if (!running) {
- if (startupWrapper(databaseDirectory.getAbsolutePath(),
silentFlag)){
+ if
(startupWrapper(System.getProperty("java.library.path"),
databaseDirectory.getAbsolutePath(), silentFlag)){
running = true;
}
}
@@ -102,13 +103,14 @@ public class MonetDBEmbedded {
}
/**
- * Start the embedded database up.
+ * Start the embedded database.
*
- * @param dir Database directory
+ * @param libsDirectory Libraries directory
+ * @param dbDirecory Database directory
* @param silent Silent flag
* @return Startup status code
*/
- private native boolean startupWrapper(String dir, boolean silent)
throws IOException;
+ private native boolean startupWrapper(String libsDirectory, String
dbDirecory, boolean silent) throws IOException;
/**
* Execute an SQL query in an embedded database.
diff --git
a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
--- a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
+++ b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
@@ -174,7 +174,7 @@ public class EmbeddedTest {
}
@Test
- public void twoQueriesTest() throws SQLException {
+ public void twoQueriesTest() throws SQLException, IOException {
EmbeddedQueryResult result1 = db.query("SELECT * FROM test
WHERE id > 1;");
assertEquals(2, result1.getColumn(1).columnSize());
assertEquals(testValues[1][2],
result1.getColumn(1).getValue(0));
@@ -187,6 +187,9 @@ public class EmbeddedTest {
assertEquals(2, result1.getColumn(1).columnSize());
assertEquals(testValues[1][2],
result1.getColumn(1).getValue(0));
assertEquals(testValues[1][3],
result1.getColumn(1).getValue(1));
+
+ result1.close();
+ result2.close();
}
@Test
@@ -203,6 +206,9 @@ public class EmbeddedTest {
assertEquals(2, result1.getColumn(1).columnSize());
assertEquals(testValues[1][2],
result1.getColumn(1).getValue(0));
assertEquals(testValues[1][3],
result1.getColumn(1).getValue(1));
+
+ result1.close();
+ result2.close();
}
@Test
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list