diff options
Diffstat (limited to 'jvmfwk')
-rw-r--r-- | jvmfwk/inc/jvmfwk/framework.h | 1 | ||||
-rw-r--r-- | jvmfwk/inc/jvmfwk/vendorplugin.h | 19 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx | 5 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx | 62 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map | 5 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx | 4 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/util.cxx | 8 | ||||
-rw-r--r-- | jvmfwk/source/elements.cxx | 10 | ||||
-rw-r--r-- | jvmfwk/source/framework.cxx | 48 | ||||
-rw-r--r-- | jvmfwk/source/framework.hxx | 4 |
10 files changed, 136 insertions, 30 deletions
diff --git a/jvmfwk/inc/jvmfwk/framework.h b/jvmfwk/inc/jvmfwk/framework.h index f4b59986b5bf..11cca539cb05 100644 --- a/jvmfwk/inc/jvmfwk/framework.h +++ b/jvmfwk/inc/jvmfwk/framework.h @@ -831,6 +831,7 @@ javaFrameworkError SAL_CALL jfw_getJRELocations( JFW_E_NONE the function ran successfully.</br> JFW_E_ERROR an error occurred during execution.</br> JFW_E_INVALID_ARG pInfo contains invalid data</br> + JFW_E_NO_PLUGIN a plug-in library could not be found.<br/> */ javaFrameworkError SAL_CALL jfw_existJRE(const JavaInfo *pInfo, sal_Bool *exist); diff --git a/jvmfwk/inc/jvmfwk/vendorplugin.h b/jvmfwk/inc/jvmfwk/vendorplugin.h index 5b2b4f7ab84e..3ccbb0e487f4 100644 --- a/jvmfwk/inc/jvmfwk/vendorplugin.h +++ b/jvmfwk/inc/jvmfwk/vendorplugin.h @@ -239,6 +239,25 @@ javaPluginError jfw_plugin_startJavaVirtualMachine( +/** checks if the installation of the jre still exists. + + This function checks if the JRE described by pInfo still + exists. The check must be very quick because it is called by javaldx + (Linux, Solaris) at start up. + + @param pInfo + [in] the JavaInfo object with information about the JRE. + @param pp_exist + [out] the parameter is set to either sal_True or sal_False. The value is + only valid if the function returns JFW_E_NONE. + + @return + JFW_PLUGIN_E_NONE the function ran successfully.</br> + JFW_PLUGIN_E_ERROR an error occurred during execution.</br> + JFW_PLUGIN_E_INVALID_ARG pInfo contains invalid data</br> + */ +javaPluginError jfw_plugin_existJRE(const JavaInfo *pInfo, sal_Bool *exist); + #ifdef __cplusplus } #endif diff --git a/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx b/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx index 3f920a88ce2d..9da3df2a2fdc 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx @@ -74,7 +74,7 @@ char const* const* OtherInfo::getRuntimePaths(int * size) "/bin/hotspot/jvm.dll" #elif UNX #ifdef MACOSX - "/../../../JavaVM" + "/../../../../../Frameworks/JavaVM.framework/JavaVM" //as of 1.6.0_22 #else "/lib/" JFW_PLUGIN_ARCH "/client/libjvm.so", // for Blackdown PPC "/lib/" JFW_PLUGIN_ARCH "/server/libjvm.so", // for Blackdown AMD64 @@ -96,8 +96,7 @@ char const* const* OtherInfo::getLibraryPaths(int* size) #ifdef UNX static char const * ar[] = { #ifdef MACOSX - "/../Libraries", - "/lib" + //mac version does not have a ld library path anymore #else "/bin", "/jre/bin", diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx index 2a511b73d8ab..cff9cdfa05af 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx @@ -471,10 +471,10 @@ javaPluginError jfw_plugin_startJavaVirtualMachine( { JFW_ENSURE(0, OUSTR("[Java framework]sunjavaplugin" SAL_DLLEXTENSION " could not load Java runtime library: \n") - + sRuntimeLib + OUSTR(".")); + + sRuntimeLib + OUSTR("\n")); JFW_TRACE0(OUSTR("[Java framework]sunjavaplugin" SAL_DLLEXTENSION " could not load Java runtime library: \n") - + sRuntimeLib + OUSTR(".")); + + sRuntimeLib + OUSTR("\n")); return JFW_PLUGIN_E_VM_CREATION_FAILED; } @@ -615,6 +615,64 @@ javaPluginError jfw_plugin_startJavaVirtualMachine( return errcode; } +extern "C" +javaPluginError jfw_plugin_existJRE(const JavaInfo *pInfo, sal_Bool *exist) +{ + javaPluginError ret = JFW_PLUGIN_E_NONE; + if (!pInfo || !exist) + return JFW_PLUGIN_E_INVALID_ARG; + ::rtl::OUString sLocation(pInfo->sLocation); + + if (sLocation.getLength() == 0) + return JFW_PLUGIN_E_INVALID_ARG; + ::osl::DirectoryItem item; + ::osl::File::RC rc_item = ::osl::DirectoryItem::get(sLocation, item); + if (::osl::File::E_None == rc_item) + { + *exist = sal_True; + } + else if (::osl::File::E_NOENT == rc_item) + { + *exist = sal_False; + } + else + { + ret = JFW_PLUGIN_E_ERROR; + } +#ifdef MACOSX + //We can have the situation that the JavaVM runtime library is not + //contained within JAVA_HOME. Then the check for JAVA_HOME would return + //true although the runtime library may not be loadable. + if (ret == JFW_PLUGIN_E_NONE && *exist == sal_True) + { + rtl::OUString sRuntimeLib = getRuntimeLib(pInfo->arVendorData); + JFW_TRACE2(OUSTR("[Java framework] Checking existence of Java runtime library.\n")); + + ::osl::DirectoryItem itemRt; + ::osl::File::RC rc_itemRt = ::osl::DirectoryItem::get(sRuntimeLib, itemRt); + if (::osl::File::E_None == rc_itemRt) + { + *exist = sal_True; + JFW_TRACE2(OUSTR("[Java framework] Java runtime library exist: ") + + sRuntimeLib + OUSTR("\n")); + + } + else if (::osl::File::E_NOENT == rc_itemRt) + { + *exist = sal_False; + JFW_TRACE2(OUSTR("[Java framework] Java runtime library does not exist: ") + + sRuntimeLib + OUSTR("\n")); + } + else + { + ret = JFW_PLUGIN_E_ERROR; + JFW_TRACE2(OUSTR("[Java framework] Error while looking for Java runtime library: ") + + sRuntimeLib + OUSTR(" \n")); + } + } +#endif + return ret; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map index db75c9611076..901867f0a43d 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map +++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map @@ -6,3 +6,8 @@ UDK_3_0_0 { local: *; }; + +UDK_3.1 { # OOo 3.3 + global: + jfw_plugin_existJRE; +} UDK_3_0_0; diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx index 5f27da26c646..53051c905d41 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx @@ -419,9 +419,9 @@ SelfTest::SelfTest() break; } if (bRet) - JFW_TRACE2("[Java framework] sunjavaplugin: Testing class SunVersion succeeded."); + JFW_TRACE2("[Java framework] sunjavaplugin: Testing class SunVersion succeeded.\n"); else - OSL_ENSURE(bRet, "[Java framework] sunjavaplugin: SunVersion self test failed"); + OSL_ENSURE(bRet, "[Java framework] sunjavaplugin: SunVersion self test failed.\n"); } #endif diff --git a/jvmfwk/plugins/sunmajor/pluginlib/util.cxx b/jvmfwk/plugins/sunmajor/pluginlib/util.cxx index 1604e280fee6..75c1a96de7bf 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/util.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/util.cxx @@ -451,12 +451,12 @@ bool getJavaProps(const OUString & exePath, rs = stdoutReader.readLine( & aLine); if (rs != FileHandleReader::RESULT_OK) break; - JFW_TRACE2(OString("[Java framework] line:\" ") - + aLine + OString(" \".\n")); +// JFW_TRACE2(OString("[Java framework] line:\" ") +// + aLine + OString(" \".\n")); OUString sLine; if (!decodeOutput(aLine, &sLine)) continue; - JFW_TRACE2(OString("[Java framework] line:\" ") + JFW_TRACE2(OString("[Java framework]:\" ") + OString( CHAR_POINTER(sLine)) + OString(" \".\n")); sLine = sLine.trim(); if (sLine.getLength() == 0) @@ -510,7 +510,7 @@ bool decodeOutput(const rtl::OString& s, rtl::OUString* out) } while (nIndex >= 0); *out = buff.makeStringAndClear(); - JFW_TRACE2(*out); +// JFW_TRACE2(*out); return true; } diff --git a/jvmfwk/source/elements.cxx b/jvmfwk/source/elements.cxx index dfbb286b15f4..bd8c9678cf5f 100644 --- a/jvmfwk/source/elements.cxx +++ b/jvmfwk/source/elements.cxx @@ -931,6 +931,16 @@ void CNodeJavaInfo::loadFromNode(xmlDoc * pDoc, xmlNode * pJavaInfo) pDoc, cur->children, 1); rtl::OUString sRequire = xmlRequire; nRequirements = sRequire.toInt64(16); +#ifdef MACOSX + //javaldx is not used anymore in the mac build. In case the Java + //corresponding to the saved settings does not exist anymore the + //javavm services will look for an existing Java after creation of + //the JVM failed. See stoc/source/javavm/javavm.cxx. Only if + //nRequirements does not have the flag JFW_REQUIRE_NEEDRESTART the + //jvm of the new selected JRE will be started. Old settings (before + //OOo 3.3) still contain the flag which can be safely ignored. + nRequirements &= ~JFW_REQUIRE_NEEDRESTART; +#endif } else if (xmlStrcmp(cur->name, (xmlChar*) "vendorData") == 0) { diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx index 5d93cca6038f..3c353e44491e 100644 --- a/jvmfwk/source/framework.cxx +++ b/jvmfwk/source/framework.cxx @@ -1115,29 +1115,39 @@ javaFrameworkError SAL_CALL jfw_getJRELocations( javaFrameworkError jfw_existJRE(const JavaInfo *pInfo, sal_Bool *exist) { - javaFrameworkError ret = JFW_E_NONE; - if (!pInfo || !exist) - return JFW_E_INVALID_ARG; - ::rtl::OUString sLocation(pInfo->sLocation); - - if (sLocation.getLength() == 0) - return JFW_E_INVALID_ARG; + //get the function jfw_plugin_existJRE + jfw::VendorSettings aVendorSettings; + jfw::CJavaInfo aInfo; + aInfo = (const ::JavaInfo*) pInfo; //makes a copy of pInfo + rtl::OUString sLibPath = aVendorSettings.getPluginLibrary(aInfo.getVendor()); + osl::Module modulePlugin(sLibPath); + if ( ! modulePlugin) + return JFW_E_NO_PLUGIN; + rtl::OUString sFunctionName( + RTL_CONSTASCII_USTRINGPARAM("jfw_plugin_existJRE")); + jfw_plugin_existJRE_ptr pFunc = + (jfw_plugin_existJRE_ptr) + osl_getFunctionSymbol(modulePlugin, sFunctionName.pData); + if (pFunc == NULL) + return JFW_E_ERROR; + + javaPluginError plerr = (*pFunc)(pInfo, exist); - ::osl::DirectoryItem item; - ::osl::File::RC rc_item = ::osl::DirectoryItem::get(sLocation, item); - if (::osl::File::E_None == rc_item) - { - *exist = sal_True; - } - else if (::osl::File::E_NOENT == rc_item) - { - *exist = sal_False; - } - else + javaFrameworkError ret = JFW_E_NONE; + switch (plerr) { + case JFW_PLUGIN_E_NONE: + ret = JFW_E_NONE; + break; + case JFW_PLUGIN_E_INVALID_ARG: + ret = JFW_E_INVALID_ARG; + break; + case JFW_PLUGIN_E_ERROR: + ret = JFW_E_ERROR; + break; + default: ret = JFW_E_ERROR; } - return ret; } diff --git a/jvmfwk/source/framework.hxx b/jvmfwk/source/framework.hxx index 0689c7a7923d..89859d4806ed 100644 --- a/jvmfwk/source/framework.hxx +++ b/jvmfwk/source/framework.hxx @@ -65,6 +65,10 @@ typedef javaPluginError (*jfw_plugin_startJavaVirtualMachine_ptr)( JavaVM ** ppVM, JNIEnv ** ppEnv); +typedef javaPluginError (*jfw_plugin_existJRE_ptr)( + const JavaInfo *info, + sal_Bool *exist); + namespace jfw { |