[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