[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