2) Done. Thanks for the review and feedback.3) Unfortunately, I'm not sure if this would be possible, given the unique checks we have to perform for some of the IBM JVMs, which are hybrid packages of the Sun JVM + IBM extensions on Sun and HP-UX. There could be some other checks that are required, if someone has a iSeries or zSeries to test upon.....
Also, the Apache Harmony support is not complete, but the apacheSystemProperties will be detected and applied correctly if supplied, based on the Harmony 5.0M5 build.
-Donald Jarek Gawor wrote:
Donald, I'm not sure about this. 1) There is a compile problem in JvmVendor.java, 2) I don't think Log4jService.java should hard-code some JDK name. It should get the proper name from JvmVendor class, e.g. JvmVendor.getJavaVendor() or something. 3) I'm not sure about SystemProperties being extended to support three JVM-specific properties (btw, the sun properties handling is confusing since it assumes that bSun = !bIBM && !bApache but that's just means 'other'). I think we should leave the SystemProperties as it was and provide some other way to support arbitrary number and type of the JVMs. For example, we could have a JVM-specific implementation of the SystemProperties gbean that would only set the properties when the given JVM is detected. Jarek On Thu, Mar 20, 2008 at 4:09 PM, <[EMAIL PROTECTED]> wrote:Author: dwoods Date: Thu Mar 20 13:09:03 2008 New Revision: 639435 URL: http://svn.apache.org/viewvc?rev=639435&view=rev Log: GERONIMO-3900 Add runtime support for non-Sun JVMs Added: geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java (with props) Modified: geronimo/server/branches/2.1/framework/configs/offline-deployer/src/main/plan/plan.xml geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/logging/log4j/Log4jService.java geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/SystemProperties.java geronimo/server/branches/2.1/plugins/client/client/src/main/plan/plan.xml geronimo/server/branches/2.1/plugins/j2ee/j2ee-server/src/main/plan/plan.xml Modified: geronimo/server/branches/2.1/framework/configs/offline-deployer/src/main/plan/plan.xml URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/configs/offline-deployer/src/main/plan/plan.xml?rev=639435&r1=639434&r2=639435&view=diff ============================================================================== --- geronimo/server/branches/2.1/framework/configs/offline-deployer/src/main/plan/plan.xml (original) +++ geronimo/server/branches/2.1/framework/configs/offline-deployer/src/main/plan/plan.xml Thu Mar 20 13:09:03 2008 @@ -31,7 +31,16 @@ <!-- System Properties --> <gbean name="OfflineDeployerProperties" class="org.apache.geronimo.system.properties.SystemProperties"> <attribute name="systemProperties"> - org.apache.geronimo.deployment.util.DeploymentUtil.jarUrlRewrite=true + org.apache.geronimo.deployment.util.DeploymentUtil.jarUrlRewrite=true </attribute> + <attribute name="sunSystemProperties"> + java.security.Provider=SUN + </attribute> + <attribute name="ibmSystemProperties"> + java.security.Provider=IBMCertPath + </attribute> + <attribute name="apacheSystemProperties"> + java.naming.factory.url.pkgs=org.apache.harmony.jndi.provider + </attribute> </gbean> </module> Modified: geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/logging/log4j/Log4jService.java URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/logging/log4j/Log4jService.java?rev=639435&r1=639434&r2=639435&view=diff ============================================================================== --- geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/logging/log4j/Log4jService.java (original) +++ geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/logging/log4j/Log4jService.java Thu Mar 20 13:09:03 2008 @@ -51,6 +51,7 @@ import org.apache.geronimo.kernel.log.GeronimoLogFactory; import org.apache.geronimo.kernel.log.GeronimoLogging; import org.apache.geronimo.system.logging.SystemLog; +import org.apache.geronimo.system.properties.JvmVendor; import org.apache.geronimo.system.serverinfo.DirectoryUtils; import org.apache.geronimo.system.serverinfo.ServerConstants; import org.apache.geronimo.system.serverinfo.ServerInfo; @@ -632,7 +633,11 @@ ", refreshPeriodSeconds=" + this.refreshPeriod); log.info("Runtime Information:"); log.info(" Install Directory = " + DirectoryUtils.getGeronimoInstallDirectory().toString()); - log.info(" JVM in use = " + System.getProperty("java.vendor") + " Java " + System.getProperty("java.version")); + if (JvmVendor.isIBMHybrid()) { + log.info(" JVM in use = IBM Hybrid Java " + System.getProperty("java.version")); + } else { + log.info(" JVM in use = " + System.getProperty("java.vendor") + " Java " + System.getProperty("java.version")); + } log.info("Java Information:"); log.info(" System property [java.runtime.name] = " + System.getProperty("java.runtime.name")); log.info(" System property [java.runtime.version] = " + System.getProperty("java.runtime.version")); Added: geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java?rev=639435&view=auto ============================================================================== --- geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java (added) +++ geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java Thu Mar 20 13:09:03 2008 @@ -0,0 +1,147 @@ +/** + * + * Copyright 2005 The Apache Software 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geronimo.system.properties; + +import java.security.Provider; +import java.security.Security; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @version $Rev: 5066 $ $Date: 2007-04-27 12:07:23 -0400 (Fri, 27 Apr 2007) $ + */ +public class JvmVendor { + + private static final Log log = LogFactory.getLog(JvmVendor.class); + + private static final String JVM_VENDOR_PROPERTY_NAME = "java.vm.vendor"; + + private static final boolean sun; + + private static final boolean ibm; + + private static final boolean apache; + + private static final boolean ibmHybrid; + + private JvmVendor () { + } + + static { + String fullVendorName = getFullName(); + boolean bApache = fullVendorName.substring(0, 6).equalsIgnoreCase("Apache"); // aka. Apache Harmony + boolean bIBM = fullVendorName.substring(0, 3)equalsIgnoreCase("IBM"); // aka. IBM, but not IBM Hybrid + boolean bSun = !bIBM && !bApache; // default all others to Sun + boolean bHP = fullVendorName.substring(0, 7).equalsIgnoreCase("Hewlett"); // aka. Hewlett-Packard Company + boolean bIBMHybrid = false; + + // Special code for IBM Hybrid SDK (Sun JVM with IBM extensions on Solaris and HP-UX) + if ( ((bSun == true) && (System.getProperty("os.name").equalsIgnoreCase("SunOS") == true)) || + ((bHP == true) && (System.getProperty("os.name").equalsIgnoreCase("HP-UX") == true)) ) + { + log.debug("Looking for the IBM Hybrid SDK Extensions"); + // Check if provider IBMJSSE Provider is installed. + try { + if (Security.getProvider("com.ibm.jsse2.IBMJSSEProvider2") == null) { + // IBMJSSE Provider is not installed, install it + log.debug("Trying to load IBM JSSE2 Provider."); + Class c = Class.forName("com.ibm.jsse2.IBMJSSEProvider2"); + Provider p = (Provider) c.newInstance(); + Security.addProvider(p); + // Security.addProvider(new com.ibm.jsse2.IBMJSSEProvider2()); + log.debug("Loaded the IBM JSSE2 Provider"); + } else { + log.debug("Found the IBM JSSE2 Provider = " + Security.getProvider("com.ibm.jsse2.IBMJSSEProvider2")); + } + if (Security.getProvider("IBMCertPath") == null) { + // If we found IBMJSSE but not this one, then the JAVA_OPTS are probably messed up + log.debug("No IBMCertPath provider found."); + throw new RuntimeException("Could not find the IBMCertPath provider."); + } else { + log.debug("Found the IBMCertPath Provider = " + Security.getProvider("IBMCertPath")); + } + if (Security.getProvider("IBMJCE") == null) { + // If we found IBMJSSE but not this one, then the JAVA_OPTS are probably messed up + log.debug("No IBMJCE provider found."); + throw new RuntimeException("Could not find the IBMJCE provider."); + } else { + log.debug("Found the IBMJCE Provider" + Security.getProvider("IBMJCE")); + } + System.setProperty("java.protocol.handler.pkgs", "com.ibm.net.ssl.www2.protocol"); + // All of the expected IBM Extensions were found, so we must be using the IBM Hybrid JDK + bSun = false; + bApache = false; + bIBM = true; + bIBMHybrid = true; + } catch (ClassNotFoundException e) { + // Couldn't load the IBMJSSE Provider, so we must not be using the IBM Hybrid SDK + log.debug("Caught Exception="+e.toString()); + log.debug("Could not load the IBM JSSE Provider. Must be using the OS provider's Java."); + } catch (Throwable t) { + // Couldn't load the IBMJSSE Provider, so we must not be using the IBM Hybrid SDK + log.debug("Caught Throwable="+t.toString()); + log.debug("Assume we could not load the IBM JSSE Provider and that we are using the OS provider's Java."); + } + } + // now, set our statics + apache = bApache; + ibm = bIBM; + ibmHybrid = bIBMHybrid; + sun = bSun; + // log what we found + if (ibmHybrid == true) { + if (System.getProperty("os.name").equalsIgnoreCase("SunOS") == true) { + log.info("IBM Hybrid SDK on SunOS detected"); + } else if (System.getProperty("os.name").equalsIgnoreCase("HP-UX") == true) { + log.info("IBM Hybrid SDK on HP-UX detected"); + } else { + log.error("Unknown IBM Hybrid SDK detected on " + System.getProperty("os.name")); + } + } else if (apache == true) { + log.info("Apache JVM detected - " + fullVendorName); + } else if (ibm == true) { + log.info("IBM JVM detected - " + fullVendorName); + } else if (sun == true) { + log.info("Sun JVM detected - " + fullVendorName); + } else { + // should never happen + log.warn("Unhandled JVM detected - " + getFullName()); + } + } + + public static String getFullName() { + return System.getProperty(JVM_VENDOR_PROPERTY_NAME); + } + + public static boolean isSun() { + return sun; + } + + public static boolean isIBM() { + return ibm; + } + + public static boolean isIBMHybrid() { + return ibmHybrid; + } + + public static boolean isApache() { + return apache; + } + +} Propchange: geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/JvmVendor.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/SystemProperties.java URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/SystemProperties.java?rev=639435&r1=639434&r2=639435&view=diff ============================================================================== --- geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/SystemProperties.java (original) +++ geronimo/server/branches/2.1/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/properties/SystemProperties.java Thu Mar 20 13:09:03 2008 @@ -20,6 +20,8 @@ import java.util.Properties; import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.system.serverinfo.ServerInfo; @@ -29,26 +31,48 @@ */ public class SystemProperties { + private final Log log = LogFactory.getLog(SystemProperties.class); - public SystemProperties(Properties properties, Properties pathProperties, ServerInfo serverInfo) { + public SystemProperties(Properties systemProperties, Properties systemPathProperties, ServerInfo serverInfo, Properties sunSystemProperties, Properties ibmSystemProperties, Properties apacheSystemProperties) { + if (log.isDebugEnabled()) log.debug("Setting systemProperties"); + setProperties(systemProperties, null); + + if (JvmVendor.isIBM()) { + if (log.isDebugEnabled()) log.debug("Setting ibmSystemProperties for the IBM JVM"); + setProperties(ibmSystemProperties, null); + } else if (JvmVendor.isApache()) { + if (log.isDebugEnabled()) log.debug("Setting apacheSystemProperties for the Apache Harmony JVM"); + setProperties(apacheSystemProperties, null); + } else { + if (log.isDebugEnabled()) log.debug("Setting sunSystemProperties for the Sun JVM"); + setProperties(sunSystemProperties, null); + } + + if (serverInfo != null) { + if (log.isDebugEnabled()) log.debug("Setting systemPathProperties"); + setProperties(systemPathProperties, serverInfo); + } + } + + private void setProperties(Properties properties, ServerInfo serverInfo) { if (properties != null) { for (Iterator iterator = properties.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); String propertyName = (String) entry.getKey(); String propertyValue = (String) entry.getValue(); - if (System.getProperty(propertyName) == null) { - System.setProperty(propertyName, propertyValue); + if (serverInfo != null) { + propertyValue = serverInfo.resolvePath(propertyValue); } - } - } - if (pathProperties != null && serverInfo != null) { - for (Iterator iterator = pathProperties.entrySet().iterator(); iterator.hasNext();) { - Map.Entry entry = (Map.Entry) iterator.next(); - String propertyName = (String) entry.getKey(); - String propertyValue = (String) entry.getValue(); - propertyValue = serverInfo.resolveServerPath(propertyValue); - if (System.getProperty(propertyName) == null) { + String currentPropertyValue = System.getProperty(propertyName); + if (currentPropertyValue == null) { System.setProperty(propertyName, propertyValue); + log.info("Setting Property=" + propertyName + " to Value=" + propertyValue); + } else { + if (currentPropertyValue.equals(propertyValue)) { + log.warn("Existing Property=" + propertyName + " is already set to Value=" + currentPropertyValue); + } else { + log.error("Not updating existing Property=" + propertyName + " to Value=" + propertyValue + ". Property is already set to " + currentPropertyValue); + } } } } @@ -61,7 +85,10 @@ infoBuilder.addAttribute("systemProperties", Properties.class, true, true); infoBuilder.addAttribute("systemPathProperties", Properties.class, true, true); infoBuilder.addReference("ServerInfo", ServerInfo.class, "GBean"); - infoBuilder.setConstructor(new String[] {"systemProperties", "systemPathProperties", "ServerInfo"}); + infoBuilder.addAttribute("sunSystemProperties", Properties.class, true, true); + infoBuilder.addAttribute("ibmSystemProperties", Properties.class, true, true); + infoBuilder.addAttribute("apacheSystemProperties", Properties.class, true, true); + infoBuilder.setConstructor(new String[] { "systemProperties", "systemPathProperties", "ServerInfo", "sunSystemProperties", "ibmSystemProperties", "apacheSystemProperties" }); GBEAN_INFO = infoBuilder.getBeanInfo(); } Modified: geronimo/server/branches/2.1/plugins/client/client/src/main/plan/plan.xml URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/plugins/client/client/src/main/plan/plan.xml?rev=639435&r1=639434&r2=639435&view=diff ============================================================================== --- geronimo/server/branches/2.1/plugins/client/client/src/main/plan/plan.xml (original) +++ geronimo/server/branches/2.1/plugins/client/client/src/main/plan/plan.xml Thu Mar 20 13:09:03 2008 @@ -103,8 +103,17 @@ javax.xml.soap.SOAPFactory=org.apache.geronimo.webservices.saaj.GeronimoSOAPFactory javax.xml.soap.SOAPConnectionFactory=org.apache.geronimo.webservices.saaj.GeronimoSOAPConnectionFactory javax.xml.soap.MetaFactory=org.apache.geronimo.webservices.saaj.GeronimoMetaFactory - org.apache.cxf.jaxws.checkPublishEndpointPermission=true + java.net.preferIPv4Stack=true + </attribute> + <attribute name="sunSystemProperties"> + java.security.Provider=SUN + </attribute> + <attribute name="ibmSystemProperties"> + java.security.Provider=IBMCertPath + </attribute> + <attribute name="apacheSystemProperties"> + java.naming.factory.url.pkgs=org.apache.harmony.jndi.provider </attribute> </gbean> Modified: geronimo/server/branches/2.1/plugins/j2ee/j2ee-server/src/main/plan/plan.xml URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/plugins/j2ee/j2ee-server/src/main/plan/plan.xml?rev=639435&r1=639434&r2=639435&view=diff ============================================================================== --- geronimo/server/branches/2.1/plugins/j2ee/j2ee-server/src/main/plan/plan.xml (original) +++ geronimo/server/branches/2.1/plugins/j2ee/j2ee-server/src/main/plan/plan.xml Thu Mar 20 13:09:03 2008 @@ -90,6 +90,15 @@ org.apache.cxf.jaxws.checkPublishEndpointPermission=true java.net.preferIPv4Stack=true </attribute> + <attribute name="sunSystemProperties"> + java.security.Provider=SUN + </attribute> + <attribute name="ibmSystemProperties"> + java.security.Provider=IBMCertPath + </attribute> + <attribute name="apacheSystemProperties"> + java.naming.factory.url.pkgs=org.apache.harmony.jndi.provider + </attribute> </gbean> </module>
smime.p7s
Description: S/MIME Cryptographic Signature
