Files
HRMS/hrmsEjb/org/apache/commons/logging/LogFactory.java
2025-07-28 13:56:49 +05:30

208 lines
8.4 KiB
Java

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);
}