You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sk...@apache.org on 2006/07/20 01:31:01 UTC

svn commit: r423654 - /jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java

Author: skitching
Date: Wed Jul 19 16:31:00 2006
New Revision: 423654

URL: http://svn.apache.org/viewvc?rev=423654&view=rev
Log:
Fix LOGGING-106 where JCL wouldn't start when run under a SecurityManager that refuses access to system properties.
Also use an AccessController so that a signed JCL will work in an unsigned app; note that there appears to be other
places where we are missing AccessControllers too.

Modified:
    jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java

Modified: jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java?rev=423654&r1=423653&r2=423654&view=diff
==============================================================================
--- jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java (original)
+++ jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java Wed Jul 19 16:31:00 2006
@@ -316,8 +316,15 @@
      */
     private static final Hashtable createFactoryStore() {
         Hashtable result = null;
-        String storeImplementationClass 
-            = System.getProperty(HASHTABLE_IMPLEMENTATION_PROPERTY);
+        String storeImplementationClass;
+        try {
+            storeImplementationClass = System.getProperty(HASHTABLE_IMPLEMENTATION_PROPERTY);
+        } catch(SecurityException ex) {
+            // Permissions don't allow this to be accessed. Default to the "modern"
+            // weak hashtable implementation if it is available.
+            storeImplementationClass = null;
+        }
+
         if (storeImplementationClass == null) {
             storeImplementationClass = WEAK_HASHTABLE_CLASSNAME;
         }
@@ -1698,6 +1705,19 @@
         }
     }
 
+    // called from static class initialiser, ie when class is loaded
+    private static void initClass() {
+        // note: it's safe to call methods before initDiagnostics (though
+        // diagnostic output gets discarded).
+        thisClassLoader = getClassLoader(LogFactory.class);
+        initDiagnostics();
+        logClassLoaderEnvironment(LogFactory.class);
+        factories = createFactoryStore();
+        if (isDiagnosticsEnabled()) {
+            logDiagnostic("BOOTSTRAP COMPLETED");
+        }
+    }
+
     // ----------------------------------------------------------------------
     // Static initialiser block to perform initialisation at class load time.
     //
@@ -1718,13 +1738,12 @@
     // ----------------------------------------------------------------------
 
     static {
-        // note: it's safe to call methods before initDiagnostics.
-        thisClassLoader = getClassLoader(LogFactory.class);
-        initDiagnostics();
-        logClassLoaderEnvironment(LogFactory.class);
-        factories = createFactoryStore();
-        if (isDiagnosticsEnabled()) {
-            logDiagnostic("BOOTSTRAP COMPLETED");
-        }
+        AccessController.doPrivileged(
+            new PrivilegedAction() {
+                public Object run() {
+                    initClass();
+                    return null;
+                }
+            });
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org