[jboss-cvs] jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0 ...

Norman Richards norman.richards at jboss.com
Wed Nov 1 13:14:14 EST 2006


  User: nrichards
  Date: 06/11/01 13:14:14

  Added:       jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0          
                        Ex0URLClassLoader.java ExCCEa.java ExCCEb.java
                        ExCCEc.java ExCtx.java ExIAEd.java ExLE.java
                        ExObj.java ExObj2.java log4j.xml
  Log:
  modified for j2ee guide
  
  Revision  Changes    Path
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/Ex0URLClassLoader.java
  
  Index: Ex0URLClassLoader.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.net.URLClassLoader;
  import java.net.URL;
  
  import org.apache.log4j.Logger;
  
  /** A custom class loader that overrides the standard parent delegation model
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class Ex0URLClassLoader extends URLClassLoader
  {
  
     private static Logger log = Logger.getLogger(Ex0URLClassLoader.class);
     private Ex0URLClassLoader delegate;
  
     public Ex0URLClassLoader(URL[] urls)
     {
        super(urls);
     }
  
     void setDelegate(Ex0URLClassLoader delegate)
     {
        this.delegate = delegate;
     }
  
     protected synchronized Class loadClass(String name, boolean resolve)
  	   throws ClassNotFoundException
     {
        Class clazz = null;
        if( delegate != null )
        {
           log.debug(Integer.toHexString(hashCode())+"; Asking delegate to loadClass: "+name);
           clazz = delegate.loadClass(name, resolve);
           log.debug(Integer.toHexString(hashCode())+"; Delegate returned: "+clazz);
        }
        else
        {
           log.debug(Integer.toHexString(hashCode())+"; Asking super to loadClass: "+name);
           clazz = super.loadClass(name, resolve);
           log.debug(Integer.toHexString(hashCode())+"; Super returned: "+clazz);
        }
        return clazz;
     }
  
     protected Class findClass(String name)
           throws ClassNotFoundException
     {
        Class clazz = null;
        log.debug(Integer.toHexString(hashCode())+"; Asking super to findClass: "+name);
        clazz = super.findClass(name);
        log.debug(Integer.toHexString(hashCode())+"; Super returned: "+clazz);
        return clazz;
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExCCEa.java
  
  Index: ExCCEa.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.net.URL;
  import java.util.ArrayList;
  
  /**
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExCCEa
  {
     public static void main(String[] args) throws Exception
     {
        ArrayList array = new ArrayList();
        array.add(new URL("file:/tmp"));
        String url = (String) array.get(0);
        System.out.println("URL: "+url);
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExCCEb.java
  
  Index: ExCCEb.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.File;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.lang.reflect.Method;
  
  import org.apache.log4j.Logger;
  import org.jboss.util.ChapterExRepository;
  import org.jboss.util.Debug;
  
  /**
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExCCEb
  {
     public static void main(String[] args) throws Exception
     {
        ChapterExRepository.init(ExCCEb.class);
  
        String chapDir = System.getProperty("chapter.dir");
        Logger ucl0Log = Logger.getLogger("UCL0");
        File jar0 = new File(chapDir+"/j0.jar");
        ucl0Log.info("jar0 path: "+jar0.toString());
        URL[] cp0 = {jar0.toURL()};
        URLClassLoader ucl0 = new URLClassLoader(cp0);
        Thread.currentThread().setContextClassLoader(ucl0);
        Class ctxClass1 = ucl0.loadClass("org.jboss.book.jmx.ex0.ExCtx");
        StringBuffer buffer = new StringBuffer("ExCtx Info");
        Debug.displayClassInfo(ctxClass1, buffer, false);
        ucl0Log.info(buffer.toString());
        Object ctx0 = ctxClass1.newInstance();
        Object value = null;
        try
        {
           Class[] types = {};
           Method getValue = ctxClass1.getMethod("getValue", types);
           Object[] margs = {};
           value = getValue.invoke(ctx0, margs);
           buffer.setLength(0);
           buffer.append("main.obj.CodeSource: ");
           Debug.displayClassInfo(value.getClass(), buffer, false);
           ucl0Log.info(buffer.toString());
        }
        catch(Exception e)
        {
           ucl0Log.error("Failed to invoke ExCtx.getValue", e);
        }
  
        File jar1 = new File(chapDir+"/j1.jar");
        Logger ucl1Log = Logger.getLogger("UCL1");
        ucl1Log.info("jar1 path: "+jar1.toString());
        URL[] cp1 = {jar1.toURL()};
        URLClassLoader ucl1 = new URLClassLoader(cp1);
        Class ctxClass2 = ucl1.loadClass("org.jboss.book.jmx.ex0.ExCtx");
        buffer.setLength(0);
        buffer.append("ExCtx Info");
        Debug.displayClassInfo(ctxClass2, buffer, false);
        ucl1Log.info(buffer.toString());
        Object ctx2 = ctxClass2.newInstance();
        Thread.currentThread().setContextClassLoader(ucl1);
        try
        {
           Class[] types = {Object.class};
           Method useValue = ctxClass2.getMethod("useValue", types);
           Object[] margs = {value};
           useValue.invoke(ctx2, margs);
        }
        catch(Exception e)
        {
           ucl1Log.error("Failed to invoke ExCtx.useValue", e);
           throw e;
        }
  
        try
        {
           Class[] types = {Object.class};
           Method useValue = ctxClass2.getMethod("useValue", types);
           Object[] margs = {value};
           useValue.invoke(ctx2, margs);
        }
        catch(Exception e)
        {
           ucl1Log.error("Failed to invoke ExCtx.useValue", e);
           throw e;
        }
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExCCEc.java
  
  Index: ExCCEc.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.File;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.lang.reflect.Method;
  
  import org.apache.log4j.Logger;
  
  import org.jboss.util.ChapterExRepository;
  import org.jboss.util.Debug;
  
  /** An example of a ClassCastException that results from classes loaded through
   * different class loaders.
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExCCEc
  {
     public static void main(String[] args) throws Exception
     {
        ChapterExRepository.init(ExCCEc.class);
  
        String chapDir = System.getProperty("chapter.dir");
        Logger ucl0Log = Logger.getLogger("UCL0");
        // Load ExObj from j0.jar using URLClassLoader instance 0
        File jar0 = new File(chapDir+"/j0.jar");
        ucl0Log.info("jar0 path: "+jar0.toString());
        URL[] cp0 = {jar0.toURL()};
        URLClassLoader ucl0 = new URLClassLoader(cp0);
        Thread.currentThread().setContextClassLoader(ucl0);
        Class objClass = ucl0.loadClass("org.jboss.book.jmx.ex0.ExObj");
        StringBuffer buffer = new StringBuffer("ExObj Info");
        Debug.displayClassInfo(objClass, buffer, false);
        ucl0Log.info(buffer.toString());
        Object value = objClass.newInstance();
  
        // Load ExCtx from j0.jar using URLClassLoader instance 1
        File jar1 = new File(chapDir+"/j0.jar");
        Logger ucl1Log = Logger.getLogger("UCL1");
        ucl1Log.info("jar1 path: "+jar1.toString());
        URL[] cp1 = {jar1.toURL()};
        URLClassLoader ucl1 = new URLClassLoader(cp1);
        Thread.currentThread().setContextClassLoader(ucl1);
        Class ctxClass2 = ucl1.loadClass("org.jboss.book.jmx.ex0.ExCtx");
        buffer.setLength(0);
        buffer.append("ExCtx Info");
        Debug.displayClassInfo(ctxClass2, buffer, false);
        ucl1Log.info(buffer.toString());
        Object ctx2 = ctxClass2.newInstance();
  
        try
        {
           // Invoke ExCtx[UCL1].useValue(value=ExObj[UCL0]) via reflection
           Class[] types = {Object.class};
           Method useValue = ctxClass2.getMethod("useValue", types);
           Object[] margs = {value};
           useValue.invoke(ctx2, margs);
        }
        catch(Exception e)
        {
           ucl1Log.error("Failed to invoke ExCtx.useValue", e);
           throw e;
        }
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExCtx.java
  
  Index: ExCtx.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.IOException;
  
  import org.apache.log4j.Logger;
  
  import org.jboss.util.Debug;
  
  /** A classes used to demonstrate various class loading issues
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExCtx
  {
     ExObj value;
  
     public ExCtx() throws IOException
     {
        value = new ExObj();
        Logger log = Logger.getLogger(ExCtx.class);
        StringBuffer buffer = new StringBuffer("ctor.ExObj");
        Debug.displayClassInfo(value.getClass(), buffer, false);
        log.info(buffer.toString());
        ExObj2 obj2 = value.ivar;
        buffer.setLength(0);
        buffer = new StringBuffer("ctor.ExObj.ivar");
        Debug.displayClassInfo(obj2.getClass(), buffer, false);
        log.info(buffer.toString());
     }
     public Object getValue()
     {
        return value;
     }
     public void useValue(Object obj) throws Exception
     {
        Logger log = Logger.getLogger(ExCtx.class);
        StringBuffer buffer = new StringBuffer("useValue2.arg class");
        Debug.displayClassInfo(obj.getClass(), buffer, false);
        log.info(buffer.toString());
        buffer.setLength(0);
        buffer.append("useValue2.ExObj class");
        Debug.displayClassInfo(ExObj.class, buffer, false);
        log.info(buffer.toString());
        ExObj ex = (ExObj) obj;
     }
     void pkgUseValue(Object obj) throws Exception
     {
        Logger log = Logger.getLogger(ExCtx.class);
        log.info("In pkgUseValue");
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExIAEd.java
  
  Index: ExIAEd.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.File;
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.lang.reflect.Method;
  
  import org.apache.log4j.Logger;
  
  import org.jboss.util.ChapterExRepository;
  import org.jboss.util.Debug;
  
  /** An example of IllegalAccessExceptions due to classes loaded by two class
   * loaders.
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExIAEd
  {
     public static void main(String[] args) throws Exception
     {
        ChapterExRepository.init(ExIAEd.class);
  
        String chapDir = System.getProperty("chapter.dir");
        Logger ucl0Log = Logger.getLogger("UCL0");
        File jar0 = new File(chapDir+"/j0.jar");
        ucl0Log.info("jar0 path: "+jar0.toString());
        URL[] cp0 = {jar0.toURL()};
        URLClassLoader ucl0 = new URLClassLoader(cp0);
        Thread.currentThread().setContextClassLoader(ucl0);
  
        StringBuffer buffer = new StringBuffer("ExIAEd Info");
        Debug.displayClassInfo(ExIAEd.class, buffer, false);
        ucl0Log.info(buffer.toString());
  
        Class ctxClass1 = ucl0.loadClass("org.jboss.book.jmx.ex0.ExCtx");
        buffer.setLength(0);
        buffer.append("ExCtx Info");
        Debug.displayClassInfo(ctxClass1, buffer, false);
        ucl0Log.info(buffer.toString());
        Object ctx0 = ctxClass1.newInstance();
  
        try
        {
           Class[] types = {Object.class};
           Method useValue = ctxClass1.getDeclaredMethod("pkgUseValue", types);
           Object[] margs = {null};
           useValue.invoke(ctx0, margs);
        }
        catch(Exception e)
        {
           ucl0Log.error("Failed to invoke ExCtx.pkgUseValue", e);
        }
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExLE.java
  
  Index: ExLE.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.File;
  import java.net.URL;
  
  import org.apache.log4j.Logger;
  import org.jboss.util.ChapterExRepository;
  import org.jboss.util.Debug;
  
  /** An example of a LinkageError due to classes being defined by more than
   * one class loader in a non-standard class loading environment.
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExLE
  {
     public static void main(String[] args) throws Exception
     {
        ChapterExRepository.init(ExLE.class);
  
        String chapDir = System.getProperty("chapter.dir");
        Logger ucl0Log = Logger.getLogger("UCL0");
        File jar0 = new File(chapDir+"/j0.jar");
        ucl0Log.info("jar0 path: "+jar0.toString());
        URL[] cp0 = {jar0.toURL()};
        Ex0URLClassLoader ucl0 = new Ex0URLClassLoader(cp0);
        Thread.currentThread().setContextClassLoader(ucl0);
        Class ctxClass1 = ucl0.loadClass("org.jboss.book.jmx.ex0.ExCtx");
        Class obj2Class1 = ucl0.loadClass("org.jboss.book.jmx.ex0.ExObj2");
        StringBuffer buffer = new StringBuffer("ExCtx Info");
        Debug.displayClassInfo(ctxClass1, buffer, false);
        ucl0Log.info(buffer.toString());
        buffer.setLength(0);
        buffer.append("ExObj2 Info, UCL0");
        Debug.displayClassInfo(obj2Class1, buffer, false);
        ucl0Log.info(buffer.toString());
  
        File jar1 = new File(chapDir+"/j1.jar");
        Logger ucl1Log = Logger.getLogger("UCL1");
        ucl1Log.info("jar1 path: "+jar1.toString());
        URL[] cp1 = {jar1.toURL()};
        Ex0URLClassLoader ucl1 = new Ex0URLClassLoader(cp1);
        Class obj2Class2 = ucl1.loadClass("org.jboss.book.jmx.ex0.ExObj2");
        buffer.setLength(0);
        buffer.append("ExObj2 Info, UCL1");
        Debug.displayClassInfo(obj2Class2, buffer, false);
        ucl1Log.info(buffer.toString());
  
        ucl0.setDelegate(ucl1);
        try
        {
           ucl0Log.info("Try ExCtx.newInstance()");
           Object ctx0 = ctxClass1.newInstance();
           ucl0Log.info("ExCtx.ctor succeeded, ctx0: "+ctx0);
        }
        catch(Throwable e)
        {
           ucl0Log.error("ExCtx.ctor failed", e);
        }
     }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExObj.java
  
  Index: ExObj.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.Serializable;
  
  /**
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExObj implements Serializable
  {
     public ExObj2 ivar = new ExObj2();
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/ExObj2.java
  
  Index: ExObj2.java
  ===================================================================
  package org.jboss.book.jmx.ex0;
  
  import java.io.Serializable;
  
  /**
   * @author Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class ExObj2 implements Serializable
  {
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jmx/ex0/log4j.xml
  
  Index: log4j.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  
  <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
  
     <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <param name="Threshold" value="DEBUG"/>
  
        <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="[%p,%c{1}] %m%n"/>
        </layout>
     </appender>
  
     <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="File" value="logs/${chapter.ex}.log" />
        <param name="Append" value="false" />
  
        <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="[%p,%c{1}] %m%n"/>
        </layout>
     </appender>
  
     <root>
        <level value ="DEBUG"/>
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
     </root>
  </log4j:configuration>
  
  
  



More information about the jboss-cvs-commits mailing list