001 /** 002 * 003 * Copyright 2005 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.system.properties; 018 019 import java.security.Provider; 020 import java.security.Security; 021 022 import org.apache.commons.logging.Log; 023 import org.apache.commons.logging.LogFactory; 024 025 /** 026 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 027 */ 028 public class JvmVendor { 029 030 private static final Log log = LogFactory.getLog(JvmVendor.class); 031 032 private static final String JVM_VENDOR_PROPERTY_NAME = "java.vm.vendor"; 033 034 private static final boolean sun; 035 036 private static final boolean ibm; 037 038 private static final boolean apache; 039 040 private static final boolean ibmHybrid; 041 042 private JvmVendor () { 043 } 044 045 static { 046 String fullVendorName = getFullName(); 047 boolean bApache = fullVendorName.substring(0, 6).equalsIgnoreCase("Apache"); // aka. Apache Harmony 048 boolean bIBM = fullVendorName.substring(0, 3).equalsIgnoreCase("IBM"); // aka. IBM, but not IBM Hybrid 049 boolean bSun = !bIBM && !bApache; // default all others to Sun 050 boolean bHP = fullVendorName.substring(0, 6).equalsIgnoreCase("Hewlet"); // aka. Hewlett-Packard Company 051 boolean bIBMHybrid = false; 052 053 // Special code for IBM Hybrid SDK (Sun JVM with IBM extensions on Solaris and HP-UX) 054 if ( ((bSun == true) && (System.getProperty("os.name").equalsIgnoreCase("SunOS") == true)) || 055 ((bHP == true) && (System.getProperty("os.name").equalsIgnoreCase("HP-UX") == true)) ) 056 { 057 log.debug("Looking for the IBM Hybrid SDK Extensions"); 058 // Check if provider IBMJSSE Provider is installed. 059 try { 060 if (Security.getProvider("com.ibm.jsse2.IBMJSSEProvider2") == null) { 061 // IBMJSSE Provider is not installed, install it 062 log.debug("Trying to load IBM JSSE2 Provider."); 063 Class c = Class.forName("com.ibm.jsse2.IBMJSSEProvider2"); 064 Provider p = (Provider) c.newInstance(); 065 Security.addProvider(p); 066 // Security.addProvider(new com.ibm.jsse2.IBMJSSEProvider2()); 067 log.debug("Loaded the IBM JSSE2 Provider"); 068 } else { 069 log.debug("Found the IBM JSSE2 Provider = " + Security.getProvider("com.ibm.jsse2.IBMJSSEProvider2")); 070 } 071 if (Security.getProvider("IBMCertPath") == null) { 072 // If we found IBMJSSE but not this one, then the JAVA_OPTS are probably messed up 073 log.debug("No IBMCertPath provider found."); 074 throw new RuntimeException("Could not find the IBMCertPath provider."); 075 } else { 076 log.debug("Found the IBMCertPath Provider = " + Security.getProvider("IBMCertPath")); 077 } 078 if (Security.getProvider("IBMJCE") == null) { 079 // If we found IBMJSSE but not this one, then the JAVA_OPTS are probably messed up 080 log.debug("No IBMJCE provider found."); 081 throw new RuntimeException("Could not find the IBMJCE provider."); 082 } else { 083 log.debug("Found the IBMJCE Provider" + Security.getProvider("IBMJCE")); 084 } 085 System.setProperty("java.protocol.handler.pkgs", "com.ibm.net.ssl.www2.protocol"); 086 // All of the expected IBM Extensions were found, so we must be using the IBM Hybrid JDK 087 bSun = false; 088 bApache = false; 089 bIBM = true; 090 bIBMHybrid = true; 091 } catch (ClassNotFoundException e) { 092 // Couldn't load the IBMJSSE Provider, so we must not be using the IBM Hybrid SDK 093 log.debug("Caught Exception="+e.toString()); 094 log.debug("Could not load the IBM JSSE Provider. Must be using the OS provider's Java."); 095 } catch (Throwable t) { 096 // Couldn't load the IBMJSSE Provider, so we must not be using the IBM Hybrid SDK 097 log.debug("Caught Throwable="+t.toString()); 098 log.debug("Assume we could not load the IBM JSSE Provider and that we are using the OS provider's Java."); 099 } 100 } 101 // now, set our statics 102 apache = bApache; 103 ibm = bIBM; 104 ibmHybrid = bIBMHybrid; 105 sun = bSun; 106 // log what we found 107 log.info(getJvmInfo()); 108 } 109 110 public static String getFullName() { 111 return System.getProperty(JVM_VENDOR_PROPERTY_NAME); 112 } 113 114 public static boolean isSun() { 115 return sun; 116 } 117 118 public static boolean isIBM() { 119 return ibm; 120 } 121 122 public static boolean isIBMHybrid() { 123 return ibmHybrid; 124 } 125 126 public static boolean isApache() { 127 return apache; 128 } 129 130 public static String getJvmInfo() { 131 if (sun == true) { 132 return new String("Sun JVM " + System.getProperty("java.version")); 133 } else if (apache == true) { 134 return new String("Apache Harmony JVM " + System.getProperty("java.version")); 135 } else if (ibm == true) { 136 return new String("IBM JVM " + System.getProperty("java.version")); 137 } else if (ibmHybrid == true) { 138 return new String("IBM Hybrid JVM " + System.getProperty("java.version") + " on " + System.getProperty("os.name")); 139 } else { 140 // should never happen 141 return new String("Unknown JVM detected - " + getFullName()); 142 } 143 } 144 145 }