Methods Summary |
---|
public static java.net.URL | getResource(java.lang.String resource, java.lang.Class clazz)Get a resource by delegating to getResource(String).
String prop = OptionConverter.getSystemProperty("java.version", null);
if(prop != null) {
int i = prop.indexOf('.");
if(i != -1) {
if(prop.charAt(i+1) != '1")
java1 = false;
}
}
String ignoreTCLProp = OptionConverter.getSystemProperty("log4j.ignoreTCL", null);
if(ignoreTCLProp != null) {
ignoreTCL = OptionConverter.toBoolean(ignoreTCLProp, true);
}
return getResource(resource);
|
public static java.net.URL | getResource(java.lang.String resource)This method will search for resource in different
places. The search order is as follows:
- Search for
resource using the thread context
class loader under Java2. If that fails, search for
resource using the class loader that loaded this
class (Loader ). Under JDK 1.1, only the the class
loader that loaded this class (Loader ) is used.
- Try one last time with
ClassLoader.getSystemResource(resource) , that is is
using the system class loader in JDK 1.2 and virtual machine's
built-in class loader in JDK 1.1.
ClassLoader classLoader = null;
URL url = null;
try {
if(!java1) {
classLoader = getTCL();
if(classLoader != null) {
LogLog.debug("Trying to find ["+resource+"] using context classloader "
+classLoader+".");
url = classLoader.getResource(resource);
if(url != null) {
return url;
}
}
}
// We could not find resource. Ler us now try with the
// classloader that loaded this class.
classLoader = Loader.class.getClassLoader();
if(classLoader != null) {
LogLog.debug("Trying to find ["+resource+"] using "+classLoader
+" class loader.");
url = classLoader.getResource(resource);
if(url != null) {
return url;
}
}
} catch(Throwable t) {
LogLog.warn(TSTR, t);
}
// Last ditch attempt: get the resource from the class path. It
// may be the case that clazz was loaded by the Extentsion class
// loader which the parent of the system class loader. Hence the
// code below.
LogLog.debug("Trying to find ["+resource+
"] using ClassLoader.getSystemResource().");
return ClassLoader.getSystemResource(resource);
|
private static java.lang.ClassLoader | getTCL()Get the Thread Context Loader which is a JDK 1.2 feature. If we
are running under JDK 1.1 or anything else goes wrong the method
returns null.
// Are we running on a JDK 1.2 or later system?
Method method = null;
try {
method = Thread.class.getMethod("getContextClassLoader", null);
} catch (NoSuchMethodException e) {
// We are running on JDK 1.1
return null;
}
return (ClassLoader) method.invoke(Thread.currentThread(), null);
|
public static boolean | isJava1()Are we running under JDK 1.x?
return java1;
|
public static java.lang.Class | loadClass(java.lang.String clazz)If running under JDK 1.2 load the specified class using the
Thread contextClassLoader if that
fails try Class.forname. Under JDK 1.1 only Class.forName is
used.
// Just call Class.forName(clazz) if we are running under JDK 1.1
// or if we are instructed to ignore the TCL.
if(java1 || ignoreTCL) {
return Class.forName(clazz);
} else {
try {
return getTCL().loadClass(clazz);
} catch(Throwable e) {
// we reached here because tcl was null or because of a
// security exception, or because clazz could not be loaded...
// In any case we now try one more time
return Class.forName(clazz);
}
}
|