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

Reply via email to