Author: markt Date: Sun Jan 19 19:22:24 2014 New Revision: 1559561 URL: http://svn.apache.org/r1559561 Log: Move JVM vendor detection to a global constant. Fix detection of Sun/Oracle JVM that only worked for older Sun branded JVMs.
Modified: tomcat/trunk/java/org/apache/catalina/Globals.java tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Modified: tomcat/trunk/java/org/apache/catalina/Globals.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Globals.java?rev=1559561&r1=1559560&r2=1559561&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Globals.java (original) +++ tomcat/trunk/java/org/apache/catalina/Globals.java Sun Jan 19 19:22:24 2014 @@ -16,6 +16,8 @@ */ package org.apache.catalina; +import java.util.Locale; + /** * Global constants that are applicable to multiple packages within Catalina. * @@ -290,4 +292,31 @@ public final class Globals { */ public static final String JASPER_XML_BLOCK_EXTERNAL_INIT_PARAM = "org.apache.jasper.XML_BLOCK_EXTERNAL"; + + static { + /** + * There are a few places where Tomcat either accesses JVM internals + * (e.g. the memory leak protection) or where feature support varies + * between JVMs (e.g. SPNEGO). These flags exist to enable Tomcat to + * adjust its behaviour based on the vendor of the JVM. In an ideal + * world this code would not exist. + */ + String vendor = System.getProperty("java.vendor", ""); + vendor = vendor.toLowerCase(Locale.ENGLISH); + + if (vendor.startsWith("oracle") || vendor.startsWith("sun")) { + IS_ORACLE_JVM = true; + IS_IBM_JVM = false; + } else if (vendor.contains("ibm")) { + IS_ORACLE_JVM = false; + IS_IBM_JVM = true; + } else { + IS_ORACLE_JVM = false; + IS_IBM_JVM = false; + } + } + + public static final boolean IS_ORACLE_JVM; + + public static final boolean IS_IBM_JVM; } Modified: tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?rev=1559561&r1=1559560&r2=1559561&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java Sun Jan 19 19:22:24 2014 @@ -30,6 +30,7 @@ import javax.imageio.ImageIO; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.apache.catalina.Globals; import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleListener; @@ -309,8 +310,7 @@ public class JreMemoryLeakPreventionList new Class[] {long.class}); method.invoke(null, Long.valueOf(Long.MAX_VALUE - 1)); } catch (ClassNotFoundException e) { - if (System.getProperty("java.vendor").startsWith( - "Sun")) { + if (Globals.IS_ORACLE_JVM) { log.error(sm.getString( "jreLeakListener.gcDaemonFail"), e); } else { @@ -442,8 +442,7 @@ public class JreMemoryLeakPreventionList try { Class.forName("com.sun.jndi.ldap.LdapPoolManager"); } catch (ClassNotFoundException e) { - if (System.getProperty("java.vendor").startsWith( - "Sun")) { + if (Globals.IS_ORACLE_JVM) { log.error(sm.getString( "jreLeakListener.ldapPoolManagerFail"), e); } else { Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1559561&r1=1559560&r2=1559561&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Sun Jan 19 19:22:24 2014 @@ -2291,14 +2291,14 @@ public class WebappClassLoader extends U "webappClassLoader.clearReferencesResourceBundlesFail", getContextName()), e); } catch (NoSuchFieldException e) { - if (System.getProperty("java.vendor").startsWith("Sun")) { + if (Globals.IS_ORACLE_JVM) { log.error(sm.getString( - "webappClassLoader.clearReferencesResourceBundlesFail", - getContextName()), e); + "webappClassLoader.clearReferencesResourceBundlesFail", + getContextName()), e); } else { log.debug(sm.getString( - "webappClassLoader.clearReferencesResourceBundlesFail", - getContextName()), e); + "webappClassLoader.clearReferencesResourceBundlesFail", + getContextName()), e); } } catch (IllegalArgumentException e) { log.error(sm.getString( --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org