[jboss-cvs] jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/util ...
Norman Richards
norman.richards at jboss.com
Wed Nov 1 13:14:22 EST 2006
User: nrichards
Date: 06/11/01 13:14:22
Added: jbossas/j2ee/examples/src/main/org/jboss/util
ChapterExRepository.java Debug.java
Log:
modified for j2ee guide
Revision Changes Path
1.1 date: 2006/11/01 18:14:22; author: nrichards; state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/util/ChapterExRepository.java
Index: ChapterExRepository.java
===================================================================
package org.jboss.util;
import java.io.InputStream;
import java.io.IOException;
import java.net.URL;
import org.apache.log4j.Hierarchy;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.spi.RepositorySelector;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.RootCategory;
import org.apache.log4j.xml.DOMConfigurator;
/** An implementation of the Log4j RepositorySelector that looks for chapter
* example local log4j.xml files
* @author Scott.Stark at jboss.org
* @version $Revision: 1.1 $
*/
public class ChapterExRepository implements RepositorySelector
{
private static RepositorySelector theSelector;
private static Object guard = new Object();
private Hierarchy heirarchy;
public static synchronized void init(Class mainClass)
{
if( theSelector == null )
{
String name = mainClass.getName();
Hierarchy heirarchy = new Hierarchy(new RootCategory(Level.DEBUG));
// Locate the log4j.xml or log4j.properties config
InputStream is = findConfig(name, heirarchy);
if( is == null )
throw new IllegalStateException("Failed to find any log4j.xml config");
DOMConfigurator config = new DOMConfigurator();
config.doConfigure(is, heirarchy);
theSelector = new ChapterExRepository(heirarchy);
// Establish the RepositorySelector
LogManager.setRepositorySelector(theSelector, guard);
}
}
private ChapterExRepository(Hierarchy heirarchy)
{
this.heirarchy = heirarchy;
}
public LoggerRepository getLoggerRepository()
{
return heirarchy;
}
private static InputStream findConfig(String name, Hierarchy heirarchy)
{
ClassLoader tcl = Thread.currentThread().getContextClassLoader();
InputStream is = null;
// First look for a resource: "name / log4j-suffix(name).xml"
String prefix = "";
String suffix = name;
int dot = name.lastIndexOf('.');
if( dot >= 0 )
{
prefix = name.substring(0, dot);
suffix = name.substring(dot+1);
}
prefix = prefix.replace('.', '/');
String log4jxml = prefix + "/log4j-" + suffix + ".xml";
URL resURL = tcl.getResource(log4jxml);
if( resURL != null )
{
try
{
is = resURL.openStream();
System.out.println("Found resURL: "+resURL);
return is;
}
catch(IOException e)
{
}
}
// Next look for resource name / + log4j.xml
log4jxml = prefix + "/log4j.xml";
resURL = tcl.getResource(log4jxml);
if( resURL != null )
{
try
{
is = resURL.openStream();
}
catch(IOException e)
{
}
//System.out.println("Found resURL: "+resURL);
return is;
}
// Next look for just the log4j.xml res
log4jxml = "log4j.xml";
resURL = tcl.getResource(log4jxml);
if( resURL != null )
{
try
{
is = resURL.openStream();
//System.out.println("Found resURL: "+resURL);
}
catch(IOException e)
{
}
}
return is;
}
}
1.1 date: 2006/11/01 18:14:22; author: nrichards; state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/util/Debug.java
Index: Debug.java
===================================================================
package org.jboss.util;
import java.lang.reflect.Method;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
/** Various debugging utility methods available for use in unit tests
* @author Scott.Stark at jboss.org
*/
public class Debug
{
/** Format a string buffer containing the Class, Interfaces, CodeSource,
and ClassLoader information for the given object clazz.
@param clazz the Class
@param results, the buffer to write the info to
*/
public static void displayClassInfo(Class clazz, StringBuffer results)
{
displayClassInfo(clazz, results, true);
}
public static void displayClassInfo(Class clazz, StringBuffer results,
boolean showParentClassLoaders)
{
ClassLoader cl = clazz.getClassLoader();
results.append("\n"+clazz.getName()+"("+Integer.toHexString(clazz.hashCode())+").ClassLoader="+cl);
ClassLoader parent = cl;
while( parent != null )
{
results.append("\n.."+parent);
URL[] urls = getClassLoaderURLs(parent);
int length = urls != null ? urls.length : 0;
for(int u = 0; u < length; u ++)
{
results.append("\n...."+urls[u]);
}
if( showParentClassLoaders == false )
break;
if( parent != null )
parent = parent.getParent();
}
CodeSource clazzCS = clazz.getProtectionDomain().getCodeSource();
if( clazzCS != null )
results.append("\n++++CodeSource: "+clazzCS);
else
results.append("\n++++Null CodeSource");
results.append("\nImplemented Interfaces:");
Class[] ifaces = clazz.getInterfaces();
for(int i = 0; i < ifaces.length; i ++)
{
Class iface = ifaces[i];
results.append("\n++"+iface+"("+Integer.toHexString(iface.hashCode())+")");
ClassLoader loader = ifaces[i].getClassLoader();
results.append("\n++++ClassLoader: "+loader);
ProtectionDomain pd = ifaces[i].getProtectionDomain();
CodeSource cs = pd.getCodeSource();
if( cs != null )
results.append("\n++++CodeSource: "+cs);
else
results.append("\n++++Null CodeSource");
}
}
/** Use reflection to access a URL[] getURLs or ULR[] getAllURLs method so
that non-URLClassLoader class loaders, or class loaders that override
getURLs to return null or empty, can provide the true classpath info.
*/
public static URL[] getClassLoaderURLs(ClassLoader cl)
{
URL[] urls = {};
try
{
Class returnType = urls.getClass();
Class[] parameterTypes = {};
Method getURLs = cl.getClass().getMethod("getURLs", parameterTypes);
if( returnType.isAssignableFrom(getURLs.getReturnType()) )
{
Object[] args = {};
urls = (URL[]) getURLs.invoke(cl, args);
}
}
catch(Exception ignore)
{
}
return urls;
}
}
More information about the jboss-cvs-commits
mailing list