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>
>
>
>

Reply via email to