You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bu...@apache.org on 2002/11/11 11:26:33 UTC
DO NOT REPLY [Bug 14439] New: -
Can't locate classloader when creating a new LogFactory
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14439>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14439
Can't locate classloader when creating a new LogFactory
Summary: Can't locate classloader when creating a new LogFactory
Product: Commons
Version: unspecified
Platform: PC
OS/Version: All
Status: NEW
Severity: Normal
Priority: Other
Component: Logging
AssignedTo: commons-dev@jakarta.apache.org
ReportedBy: bargezi@csi.com
When running WebSphere 5.0 Early Adopters using the Sysdeo Tomcat plugin in
debug mode I discovered that the LogFactory can't locate a classloader to
create new Factories. A call to LogFactory.class.getClassLoader()
returns 'null'. As of the SDK documentation this may be tha case if the
bootstrap has loaded the class. I thus suggest the following code for the
newFactory method taken from v1.0.2 of the common logging API:
/**
* Return a new instance of the specified <code>LogFactory</code>
* implementation class, loaded by the specified class loader.
* If that fails, try the class loader used to load this
* (abstract) LogFactory.
*
* @param factoryClass Fully qualified name of the <code>LogFactory</code>
* implementation class
* @param classLoader ClassLoader from which to load this class
*
* @exception LogConfigurationException if a suitable instance
* cannot be created
*/
protected static LogFactory newFactory(String factoryClass,
ClassLoader classLoader)
throws LogConfigurationException
{
try {
if (classLoader == null)
classLoader = LogFactory.class.getClassLoader();
Class clazz = null;
try {
// #FIX: RBA
// may be null in case the classloader is the bootstrap
loader
if(classLoader == null) {
// try general load
clazz = Class.forName(factoryClass);
} else {
// first the thread class loader
clazz = classLoader.loadClass(factoryClass);
}
} catch (ClassNotFoundException ex) {
// if this failed (i.e. no implementation is
// found in the webapp), try the caller's loader
// if we haven't already...
if (classLoader != LogFactory.class.getClassLoader()) {
classLoader = LogFactory.class.getClassLoader();
if(classLoader == null) {
// try general load
clazz = Class.forName(factoryClass);
} else {
clazz = classLoader.loadClass(factoryClass);
}
}
}
LogFactory factory = (LogFactory)clazz.newInstance();
return factory;
} catch (Exception e) {
throw new LogConfigurationException(e);
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>