From 93350f1c4e7940c400b145403e58070a7d873026 Mon Sep 17 00:00:00 2001 From: Ivo Hinkelmann Date: Thu, 2 Apr 2009 16:25:40 +0000 Subject: CWS-TOOLING: integrate CWS jl119_DEV300 2009-03-13 08:14:58 +0100 jl r269453 : CWS-TOOLING: rebase CWS jl119 to branches/OOO310@269350 (milestone: OOO310:m5) 2009-03-10 16:01:33 +0100 jl r269280 : #i98990# apply patch by jbu: fixing the python script provider 2009-03-10 13:25:02 +0100 jl r269268 : #i93939# 2009-03-10 11:44:07 +0100 jl r269261 : #i93939# 2009-03-09 17:14:58 +0100 jl r269205 : #i93939# choose a different JRE when the selected one was uninstalled 2009-03-09 16:34:34 +0100 jl r269201 : #i93939# choose a different JRE when the selected one was uninstalled 2009-03-05 16:40:16 +0100 jl r268924 : #99618# Do not migrate java settings 2009-02-25 14:29:53 +0100 jl r268439 : #i99618# do not invalidate existing javasettings by using a new date in the update element --- .../OpenOfficeorg/javavendors_linux.xml | 2 +- .../OpenOfficeorg/javavendors_macosx.xml | 2 +- .../OpenOfficeorg/javavendors_os2.xml | 2 +- .../OpenOfficeorg/javavendors_unx.xml | 4 +-- .../OpenOfficeorg/javavendors_wnt.xml | 2 +- jvmfwk/inc/jvmfwk/framework.h | 21 +++++++++++++ jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx | 36 +++++++++++++++++----- jvmfwk/source/framework.cxx | 30 ++++++++++++++++++ jvmfwk/source/framework.map | 5 +++ stoc/source/javavm/javavm.cxx | 33 +++++++++++++++++--- 10 files changed, 119 insertions(+), 18 deletions(-) diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml index f3bf44addc25..ed329e5788d3 100644 --- a/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml +++ b/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml @@ -3,7 +3,7 @@ - 2008-01-16 + 2004-01-30 diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml index 1d7894a11025..215d26c0ea2a 100644 --- a/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml +++ b/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml @@ -3,7 +3,7 @@ - 2008-01-16 + 2006-05-02 diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_os2.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_os2.xml index 5ba2eaf76251..372254d4ee71 100644 --- a/jvmfwk/distributions/OpenOfficeorg/javavendors_os2.xml +++ b/jvmfwk/distributions/OpenOfficeorg/javavendors_os2.xml @@ -3,7 +3,7 @@ - 2008-01-16 + 2004-01-30 diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_unx.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_unx.xml index b9b8296edf8f..3b1f53fc4fce 100755 --- a/jvmfwk/distributions/OpenOfficeorg/javavendors_unx.xml +++ b/jvmfwk/distributions/OpenOfficeorg/javavendors_unx.xml @@ -3,7 +3,7 @@ - 2008-01-16 + 2004-01-30 @@ -14,4 +14,4 @@ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so - \ No newline at end of file + diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml index 47a5800659ca..a72216d66646 100644 --- a/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml +++ b/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml @@ -3,7 +3,7 @@ - 2008-01-16 + 2004-01-30 diff --git a/jvmfwk/inc/jvmfwk/framework.h b/jvmfwk/inc/jvmfwk/framework.h index 49516f554e21..4082adba0a5f 100644 --- a/jvmfwk/inc/jvmfwk/framework.h +++ b/jvmfwk/inc/jvmfwk/framework.h @@ -815,6 +815,27 @@ javaFrameworkError SAL_CALL jfw_setJRELocations( javaFrameworkError SAL_CALL jfw_getJRELocations( rtl_uString *** parLocations, sal_Int32 * pSize); + +/** 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_E_NONE the function ran successfully.
+ JFW_E_ERROR an error occurred during execution.
+ JFW_E_INVALID_ARG pInfo contains invalid data
+ */ +javaFrameworkError SAL_CALL jfw_existJRE(const JavaInfo *pInfo, sal_Bool *exist); + + /** locks this API so that it cannot be used by other threads.

If a different thread called this function before then the diff --git a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx index 762497b8d8bc..1a6f99f65ba4 100755 --- a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx +++ b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx @@ -46,6 +46,7 @@ using namespace rtl; static sal_Bool hasOption(char const * szOption, int argc, char** argv); static rtl::OString getLD_LIBRARY_PATH(const rtl::ByteSequence & vendorData); +static bool findAndSelect(JavaInfo**); //static sal_Bool printPaths(const OUString& sPathFile); #define HELP_TEXT \ @@ -95,15 +96,22 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) if (pInfo == NULL) { - errcode = jfw_findAndSelectJRE( & pInfo); - if (errcode == JFW_E_NO_JAVA_FOUND) + if (false == findAndSelect(&pInfo)) + return -1; + } + else + { + //check if the JRE was not uninstalled + sal_Bool bExist = sal_False; + errcode = jfw_existJRE(pInfo, &bExist); + if (errcode == JFW_E_NONE) { - fprintf(stderr,"javaldx: Could not find a Java Runtime Environment! \n"); - return 0; + if (false == findAndSelect(&pInfo)) + return -1; } - else if (errcode != JFW_E_NONE && errcode != JFW_E_DIRECT_MODE) + else { - fprintf(stderr,"javaldx failed!\n"); + fprintf(stderr, "javaldx: Could not determine if JRE still exist\n"); return -1; } } @@ -162,7 +170,21 @@ static sal_Bool hasOption(char const * szOption, int argc, char** argv) return retVal; } - +static bool findAndSelect(JavaInfo ** ppInfo) +{ + javaFrameworkError errcode = jfw_findAndSelectJRE(ppInfo); + if (errcode == JFW_E_NO_JAVA_FOUND) + { + fprintf(stderr,"javaldx: Could not find a Java Runtime Environment! \n"); + return false; + } + else if (errcode != JFW_E_NONE && errcode != JFW_E_DIRECT_MODE) + { + fprintf(stderr,"javaldx failed!\n"); + return false; + } + return true; +} diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx index 75a20ac98ff3..933e5e10ea09 100644 --- a/jvmfwk/source/framework.cxx +++ b/jvmfwk/source/framework.cxx @@ -34,6 +34,7 @@ #include "rtl/ustring.hxx" #include "rtl/bootstrap.hxx" #include "osl/thread.hxx" +#include "osl/file.hxx" #include "osl/module.hxx" #include "jvmfwk/framework.h" #include "jvmfwk/vendorplugin.h" @@ -1113,6 +1114,35 @@ javaFrameworkError SAL_CALL jfw_getJRELocations( return errcode; } + +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; + + ::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_E_ERROR; + } + + return ret; +} + void SAL_CALL jfw_lock() { jfw::FwkMutex::get().acquire(); diff --git a/jvmfwk/source/framework.map b/jvmfwk/source/framework.map index 2ce5d22b61dc..c95cc83aa826 100644 --- a/jvmfwk/source/framework.map +++ b/jvmfwk/source/framework.map @@ -24,3 +24,8 @@ UDK_3_0_0 { local: *; }; + +UDK_3.1 { # OOo 3.1.0 + global: + jfw_existJRE; +} UDK_3_0_0; diff --git a/stoc/source/javavm/javavm.cxx b/stoc/source/javavm/javavm.cxx index e7c9ff1a5851..8042b70c9dd1 100644 --- a/stoc/source/javavm/javavm.cxx +++ b/stoc/source/javavm/javavm.cxx @@ -881,11 +881,34 @@ JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId) } case JFW_E_VM_CREATION_FAILED: { - //Error: - //%PRODUCTNAME requires a Java runtime environment (JRE) to perform - //this task. The selected JRE is defective. Please select another - //version or install a new JRE and select it under Tools - Options - - //%PRODUCTNAME - Java. + //If the creation failed because the JRE has been uninstalled then + //we search another one. As long as there is a javaldx, we should + //never come into this situation. javaldx checks alway if the JRE + //still exist. + JavaInfo * pJavaInfo = NULL; + if (JFW_E_NONE == jfw_getSelectedJRE(&pJavaInfo)) + { + sal_Bool bExist = sal_False; + if (JFW_E_NONE == jfw_existJRE(pJavaInfo, &bExist)) + { + if (bExist == sal_False + && ! (pJavaInfo->nRequirements & JFW_REQUIRE_NEEDRESTART)) + { + javaFrameworkError errFind = jfw_findAndSelectJRE( NULL ); + if (errFind == JFW_E_NONE) + { + continue; + } + } + } + } + + jfw_freeJavaInfo(pJavaInfo); + // + //Error: %PRODUCTNAME requires a Java + //runtime environment (JRE) to perform this task. The selected JRE + //is defective. Please select another version or install a new JRE + //and select it under Tools - Options - %PRODUCTNAME - Java. css::java::JavaVMCreationFailureException exc( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( -- cgit v1.2.3