first commit
This commit is contained in:
207
hrmsEjb/org/apache/commons/logging/LogFactory.java
Normal file
207
hrmsEjb/org/apache/commons/logging/LogFactory.java
Normal file
@@ -0,0 +1,207 @@
|
||||
package org.apache.commons.logging;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Properties;
|
||||
|
||||
public abstract class LogFactory {
|
||||
public static final String FACTORY_PROPERTY = "org.apache.commons.logging.LogFactory";
|
||||
|
||||
public static final String FACTORY_DEFAULT = "org.apache.commons.logging.impl.LogFactoryImpl";
|
||||
|
||||
public static final String FACTORY_PROPERTIES = "commons-logging.properties";
|
||||
|
||||
protected static final String SERVICE_ID = "META-INF/services/org.apache.commons.logging.LogFactory";
|
||||
|
||||
protected static Hashtable factories = new Hashtable();
|
||||
|
||||
public static LogFactory getFactory() throws LogConfigurationException {
|
||||
ClassLoader contextClassLoader = AccessController.<ClassLoader>doPrivileged(new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return LogFactory.getContextClassLoader();
|
||||
}
|
||||
});
|
||||
LogFactory factory = getCachedFactory(contextClassLoader);
|
||||
if (factory != null)
|
||||
return factory;
|
||||
Properties props = null;
|
||||
try {
|
||||
InputStream stream = getResourceAsStream(contextClassLoader, "commons-logging.properties");
|
||||
if (stream != null) {
|
||||
props = new Properties();
|
||||
props.load(stream);
|
||||
stream.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
||||
} catch (SecurityException e) {}
|
||||
try {
|
||||
String factoryClass = System.getProperty("org.apache.commons.logging.LogFactory");
|
||||
if (factoryClass != null)
|
||||
factory = newFactory(factoryClass, contextClassLoader);
|
||||
} catch (SecurityException e) {}
|
||||
if (factory == null)
|
||||
try {
|
||||
InputStream is = getResourceAsStream(contextClassLoader, "META-INF/services/org.apache.commons.logging.LogFactory");
|
||||
if (is != null) {
|
||||
BufferedReader bufferedReader;
|
||||
try {
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(is));
|
||||
}
|
||||
String factoryClassName = bufferedReader.readLine();
|
||||
bufferedReader.close();
|
||||
if (factoryClassName != null && !"".equals(factoryClassName))
|
||||
factory = newFactory(factoryClassName, contextClassLoader);
|
||||
}
|
||||
} catch (Exception ex) {}
|
||||
if (factory == null && props != null) {
|
||||
String factoryClass = props.getProperty("org.apache.commons.logging.LogFactory");
|
||||
if (factoryClass != null)
|
||||
factory = newFactory(factoryClass, contextClassLoader);
|
||||
}
|
||||
if (factory == null)
|
||||
factory = newFactory("org.apache.commons.logging.impl.LogFactoryImpl", LogFactory.class.getClassLoader());
|
||||
if (factory != null) {
|
||||
cacheFactory(contextClassLoader, factory);
|
||||
if (props != null) {
|
||||
Enumeration names = props.propertyNames();
|
||||
while (names.hasMoreElements()) {
|
||||
String name = (String)names.nextElement();
|
||||
String value = props.getProperty(name);
|
||||
factory.setAttribute(name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return factory;
|
||||
}
|
||||
|
||||
public static Log getLog(Class clazz) throws LogConfigurationException {
|
||||
return getFactory().getInstance(clazz);
|
||||
}
|
||||
|
||||
public static Log getLog(String name) throws LogConfigurationException {
|
||||
return getFactory().getInstance(name);
|
||||
}
|
||||
|
||||
public static void release(ClassLoader classLoader) {
|
||||
synchronized (factories) {
|
||||
LogFactory factory = (LogFactory)factories.get(classLoader);
|
||||
if (factory != null) {
|
||||
factory.release();
|
||||
factories.remove(classLoader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void releaseAll() {
|
||||
synchronized (factories) {
|
||||
Enumeration elements = factories.elements();
|
||||
while (elements.hasMoreElements()) {
|
||||
LogFactory element = elements.nextElement();
|
||||
element.release();
|
||||
}
|
||||
factories.clear();
|
||||
}
|
||||
}
|
||||
|
||||
protected static ClassLoader getContextClassLoader() throws LogConfigurationException {
|
||||
ClassLoader classLoader = null;
|
||||
try {
|
||||
Method method = Thread.class.getMethod("getContextClassLoader", null);
|
||||
try {
|
||||
classLoader = (ClassLoader)method.invoke(Thread.currentThread(), null);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new LogConfigurationException("Unexpected IllegalAccessException", e);
|
||||
} catch (InvocationTargetException e) {
|
||||
if (!(e.getTargetException() instanceof SecurityException))
|
||||
throw new LogConfigurationException("Unexpected InvocationTargetException", e.getTargetException());
|
||||
}
|
||||
} catch (NoSuchMethodException e) {
|
||||
classLoader = LogFactory.class.getClassLoader();
|
||||
}
|
||||
return classLoader;
|
||||
}
|
||||
|
||||
private static LogFactory getCachedFactory(ClassLoader contextClassLoader) {
|
||||
LogFactory factory = null;
|
||||
if (contextClassLoader != null)
|
||||
factory = (LogFactory)factories.get(contextClassLoader);
|
||||
return factory;
|
||||
}
|
||||
|
||||
private static void cacheFactory(ClassLoader classLoader, LogFactory factory) {
|
||||
if (classLoader != null && factory != null)
|
||||
factories.put(classLoader, factory);
|
||||
}
|
||||
|
||||
protected static LogFactory newFactory(String factoryClass, ClassLoader classLoader) throws LogConfigurationException {
|
||||
Object result = AccessController.doPrivileged(new PrivilegedAction(classLoader, factoryClass) {
|
||||
private final ClassLoader val$classLoader;
|
||||
|
||||
private final String val$factoryClass;
|
||||
|
||||
public Object run() {
|
||||
try {
|
||||
if (this.val$classLoader != null)
|
||||
try {
|
||||
return this.val$classLoader.loadClass(this.val$factoryClass).newInstance();
|
||||
} catch (ClassNotFoundException ex) {
|
||||
if (this.val$classLoader == ((LogFactory.class$org$apache$commons$logging$LogFactory == null) ? (LogFactory.class$org$apache$commons$logging$LogFactory = LogFactory.class$("org.apache.commons.logging.LogFactory")) : LogFactory.class$org$apache$commons$logging$LogFactory).getClassLoader())
|
||||
throw ex;
|
||||
} catch (NoClassDefFoundError e) {
|
||||
if (this.val$classLoader == ((LogFactory.class$org$apache$commons$logging$LogFactory == null) ? (LogFactory.class$org$apache$commons$logging$LogFactory = LogFactory.class$("org.apache.commons.logging.LogFactory")) : LogFactory.class$org$apache$commons$logging$LogFactory).getClassLoader())
|
||||
throw e;
|
||||
} catch (ClassCastException e) {
|
||||
if (this.val$classLoader == ((LogFactory.class$org$apache$commons$logging$LogFactory == null) ? (LogFactory.class$org$apache$commons$logging$LogFactory = LogFactory.class$("org.apache.commons.logging.LogFactory")) : LogFactory.class$org$apache$commons$logging$LogFactory).getClassLoader())
|
||||
throw e;
|
||||
}
|
||||
return Class.forName(this.val$factoryClass).newInstance();
|
||||
} catch (Exception e) {
|
||||
return new LogConfigurationException(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (result instanceof LogConfigurationException)
|
||||
throw (LogConfigurationException)result;
|
||||
return (LogFactory)result;
|
||||
}
|
||||
|
||||
private static InputStream getResourceAsStream(ClassLoader loader, String name) {
|
||||
return AccessController.<InputStream>doPrivileged(new PrivilegedAction(loader, name) {
|
||||
private final ClassLoader val$loader;
|
||||
|
||||
private final String val$name;
|
||||
|
||||
public Object run() {
|
||||
if (this.val$loader != null)
|
||||
return this.val$loader.getResourceAsStream(this.val$name);
|
||||
return ClassLoader.getSystemResourceAsStream(this.val$name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public abstract Object getAttribute(String paramString);
|
||||
|
||||
public abstract String[] getAttributeNames();
|
||||
|
||||
public abstract Log getInstance(Class paramClass) throws LogConfigurationException;
|
||||
|
||||
public abstract Log getInstance(String paramString) throws LogConfigurationException;
|
||||
|
||||
public abstract void release();
|
||||
|
||||
public abstract void removeAttribute(String paramString);
|
||||
|
||||
public abstract void setAttribute(String paramString, Object paramObject);
|
||||
}
|
Reference in New Issue
Block a user