1) Fixed in Rev639504. Sorry, I got a interrupt before my local build hit it.
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>




Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to