zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #14492
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
Cezar Andrei has proposed merging lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module.
Requested reviews:
Chris Hillery (ceejatec)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/fread-pdf-utiljvm-module/+merge/125332
Add java.library.path property when starting the jvm
--
https://code.launchpad.net/~zorba-coders/zorba/fread-pdf-utiljvm-module/+merge/125332
Your team Zorba Coders is subscribed to branch lp:zorba/util-jvm-module.
=== modified file 'include/JavaVMSingleton.h'
--- include/JavaVMSingleton.h 2012-05-22 09:56:29 +0000
+++ include/JavaVMSingleton.h 2012-09-19 20:32:20 +0000
@@ -1,12 +1,12 @@
/*
* Copyright 2006-2008 The FLWOR Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -44,12 +44,16 @@
namespace zorba { namespace jvm {
+#define NO_OF_JVM_OPTIONS 3
+
+
class VMOpenException {};
class UTIL_JVM_DLL_PUBLIC JavaVMSingleton
{
public:
- static JavaVMSingleton* getInstance(const char* classPath);
+ //static JavaVMSingleton* getInstance(const char* classPath);
+ static JavaVMSingleton* getInstance(const char* classPath, const char* javaLibPath);
static JavaVMSingleton* getInstance(const zorba::StaticContext* aStaticContext);
virtual ~JavaVMSingleton();
@@ -57,19 +61,27 @@
JNIEnv* getEnv();
protected:
- JavaVMSingleton(const char* classPath);
+ JavaVMSingleton(const char* classPath, const char* javaLibPath);
JavaVMSingleton(JavaVM *jvm, JNIEnv *env) : m_vm(jvm), m_env(env) {}
static String computeClassPath(const zorba::StaticContext* aStaticContext);
+ static String computeLibPath(const zorba::StaticContext* aStaticContext);
static JavaVMSingleton* instance;
JavaVM* m_vm;
JNIEnv* m_env;
JavaVMInitArgs args;
- JavaVMOption options[2];
+ JavaVMOption options[NO_OF_JVM_OPTIONS];
+
+ char* classPathOption;
char* awtOption;
- char* classPathOption;
+ char* jlpOption;
};
+
}} //namespace zorba, jvm
#endif // JAVA_VM_SINGLETON
+
+
+
+
=== modified file 'src/JavaVMSingleton.cpp'
--- src/JavaVMSingleton.cpp 2012-05-25 17:50:10 +0000
+++ src/JavaVMSingleton.cpp 2012-09-19 20:32:20 +0000
@@ -1,12 +1,12 @@
/*
* Copyright 2006-2008 The FLWOR Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -32,13 +32,13 @@
namespace zorba { namespace jvm {
JavaVMSingleton* JavaVMSingleton::instance = NULL;
-JavaVMSingleton::JavaVMSingleton(const char* classPath)
+JavaVMSingleton::JavaVMSingleton(const char* classPath, const char* javaLibPath)
{
//std::cout << "JavaVMSingleton::JavaVMSingleton classPath: " << classPath << "\n"; std::cout.flush();
memset(&args, 0, sizeof(args));
jint r;
- jint nOptions = 2;
+ jint nOptions = NO_OF_JVM_OPTIONS;
std::string classpathOption;
std::ostringstream os;
@@ -47,15 +47,28 @@
classPathOption = new char[classpathOption.size() + 1];
memset(classPathOption, 0, sizeof(char) * (classpathOption.size() + 1));
memcpy(classPathOption, classpathOption.c_str(), classpathOption.size() * sizeof(char));
+
std::string lAwtArgStr = "-Djava.awt.headless=true";
awtOption = new char[lAwtArgStr.size() + 1];
memset(awtOption, 0, sizeof(char) * (lAwtArgStr.size() + 1));
memcpy(awtOption, lAwtArgStr.c_str(), sizeof(char) * lAwtArgStr.size());
awtOption[lAwtArgStr.size()] = 0;
+
+ //// std::string jlpStr = "-Djava.library.path=/home/cezar/dev/repo/fpdf/fpdf/build/zorba_modules/zorba_util-jvm_module/src/:/home/cezar/dev/repo/fpdf/fpdf/build/LIB_PATH/com/zorba-xquery/www/modules/";
+ // javaLibPath are only base pathes, the full path will be computed at runtime in the Java class
+ std::string jlpStr = "-Djava.library.path=" + std::string(javaLibPath);
+ jlpOption = new char[jlpStr.size() + 1];
+ memset(jlpOption, 0, sizeof(char) * (jlpStr.size() + 1));
+ memcpy(jlpOption, jlpStr.c_str(), sizeof(char) * jlpStr.size());
+ jlpOption[jlpStr.size()] = 0;
+
options[0].optionString = classPathOption;
options[0].extraInfo = NULL;
options[1].optionString = awtOption;
options[1].extraInfo = NULL;
+ options[2].optionString = jlpOption;
+ options[2].extraInfo = NULL;
+
memset(&args, 0, sizeof(args));
args.version = JNI_VERSION_1_2;
args.nOptions = nOptions;
@@ -81,7 +94,12 @@
delete[] classPathOption;
}
-JavaVMSingleton* JavaVMSingleton::getInstance(const char* classPath)
+/*JavaVMSingleton* JavaVMSingleton::getInstance(const char* classPath)
+{
+ return getInstance(classPath, "");
+}*/
+
+JavaVMSingleton* JavaVMSingleton::getInstance(const char* classPath, const char* javaLibPath)
{
//#ifdef WIN32
// // If pointer to instance of JavaVMSingleton exists (true) then return instance pointer else look for
@@ -118,19 +136,22 @@
if (instance == NULL)
{
- instance = new JavaVMSingleton(classPath);
+ instance = new JavaVMSingleton(classPath, javaLibPath);
}
}
return instance;
}
+
+
JavaVMSingleton* JavaVMSingleton::getInstance(const zorba::StaticContext* aStaticContext)
{
if (instance == NULL)
{
String cp = computeClassPath(aStaticContext);
- return getInstance(cp.c_str());
+ String lp = computeLibPath(aStaticContext);
+ return getInstance(cp.c_str(), lp.c_str());
}
return instance;
@@ -211,8 +232,6 @@
if ( lineStr.size() == 0 )
continue;
- //std::cout << "line: '" << lineStr << "'" << std::endl; std::cout.flush();
-
const std::string normalizedPath =
filesystem_path::normalize_path( lineStr, jarsDirPath.get_path());
@@ -226,8 +245,26 @@
properties->setJVMClassPath(cp.str());
- //std::cout << "JavaVMSingleton::computeClassPath: '" << cp << "'" << std::endl; std::cout.flush();
return cp;
}
+
+String JavaVMSingleton::computeLibPath(const zorba::StaticContext* aStaticContext)
+{
+ String lp;
+ std::vector<String> lCPV;
+ String pathSeparator(filesystem_path::get_path_separator());
+
+ aStaticContext->getFullLibPath(lCPV);
+ for (std::vector<String>::iterator lIter = lCPV.begin();
+ lIter != lCPV.end(); ++lIter)
+ {
+ String p = *lIter;
+ lp += pathSeparator + p;
+ }
+
+ return lp;
+}
+
+
}} // namespace zorba, jvm
Follow ups
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: noreply, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Chris Hillery, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Cezar Andrei, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Chris Hillery, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Cezar Andrei, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/fread-pdf-utiljvm-module into lp:zorba/util-jvm-module
From: Cezar Andrei, 2012-09-19