1
0

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.


git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/logging/trunk@423654 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Simon Kitching
2006-07-19 23:31:00 +00:00
parent 7d08044587
commit beeeaba151

View File

@@ -316,8 +316,15 @@ public abstract class LogFactory {
*/ */
private static final Hashtable createFactoryStore() { private static final Hashtable createFactoryStore() {
Hashtable result = null; Hashtable result = null;
String storeImplementationClass String storeImplementationClass;
= System.getProperty(HASHTABLE_IMPLEMENTATION_PROPERTY); 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) { if (storeImplementationClass == null) {
storeImplementationClass = WEAK_HASHTABLE_CLASSNAME; storeImplementationClass = WEAK_HASHTABLE_CLASSNAME;
} }
@@ -1698,6 +1705,19 @@ public abstract class LogFactory {
} }
} }
// 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. // Static initialiser block to perform initialisation at class load time.
// //
@@ -1718,13 +1738,12 @@ public abstract class LogFactory {
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
static { static {
// note: it's safe to call methods before initDiagnostics. AccessController.doPrivileged(
thisClassLoader = getClassLoader(LogFactory.class); new PrivilegedAction() {
initDiagnostics(); public Object run() {
logClassLoaderEnvironment(LogFactory.class); initClass();
factories = createFactoryStore(); return null;
if (isDiagnosticsEnabled()) { }
logDiagnostic("BOOTSTRAP COMPLETED"); });
}
} }
} }