[jboss-cvs] JBossAS SVN: r67446 - trunk/tomcat/src/main/org/jboss/web/tomcat/service.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Nov 26 13:05:21 EST 2007
Author: sguilhen at redhat.com
Date: 2007-11-26 13:05:21 -0500 (Mon, 26 Nov 2007)
New Revision: 67446
Modified:
trunk/tomcat/src/main/org/jboss/web/tomcat/service/WebAppClassLoader.java
Log:
JBCTS-671: modified the findClass(String className) to only dynamicaly generate stubs if they can't be located using super.findClass().
Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/WebAppClassLoader.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/WebAppClassLoader.java 2007-11-26 17:13:51 UTC (rev 67445)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/WebAppClassLoader.java 2007-11-26 18:05:21 UTC (rev 67446)
@@ -39,7 +39,8 @@
{
static Logger log = Logger.getLogger(WebAppClassLoader.class);
- private String[] filteredPackages = { "org.apache.commons.logging" };
+ private String[] filteredPackages =
+ {"org.apache.commons.logging"};
public WebAppClassLoader()
{
@@ -60,92 +61,91 @@
this.filteredPackages = pkgs;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.catalina.loader.WebappClassLoader#addURL(java.net.URL)
+ */
@Override
public void addURL(URL url)
{
super.addURL(url);
}
-
- /**
- * Generate iiop stubs dynamically for any name ending in _Stub.
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.catalina.loader.WebappClassLoader#findClass(java.lang.String)
*/
@Override
public Class findClass(String name) throws ClassNotFoundException
{
boolean trace = log.isTraceEnabled();
if (trace)
+ log.trace("findClass(" + name + ") called");
+
+ try
{
- log.trace("findClass(" + name + ") called");
+ return super.findClass(name);
}
- if (name.endsWith("_Stub"))
+ catch (ClassNotFoundException cnfe)
{
+ // try to dynamically generate the class if it is a stub
int start = name.lastIndexOf('.') + 1;
- if (name.charAt(start) == '_')
- {
- String pkg = name.substring(0, start);
- String interfaceName = pkg
- + name.substring(start + 1, name.length() - 5);
+ if (name.charAt(start) == '_' && name.endsWith("_Stub"))
+ return generateStub(name);
+ throw cnfe;
+ }
+ }
- // This is a workaround for a problem in the RMI/IIOP
- // stub loading code in SUN JDK 1.4.x, which prepends
- // "org.omg.stub." to classes in certain name spaces,
- // such as "com.sun". This non-compliant behavior
- // results in failures when deploying SUN example code,
- // including ECPerf and PetStore, so we remove the prefix.
- if (interfaceName.startsWith("org.omg.stub.com.sun."))
- interfaceName = interfaceName.substring(13);
+ /**
+ * <p>
+ * Generate iiop stubs dynamically for any name ending in _Stub.
+ * </p>
+ *
+ * @param name a <code>String</code> representing the stub fully-qualified class name.
+ * @return the <code>Class</code> of the generated stub.
+ * @throws ClassNotFoundException if the stub class could not be created.
+ */
+ private Class generateStub(String name) throws ClassNotFoundException
+ {
+ boolean trace = log.isTraceEnabled();
+ int start = name.lastIndexOf('.') + 1;
+ String pkg = name.substring(0, start);
+ String interfaceName = pkg + name.substring(start + 1, name.length() - 5);
- Class intf = super.loadClass(interfaceName);
- if (trace)
- {
- log.trace("loaded class " + interfaceName);
- }
+ // This is a workaround for a problem in the RMI/IIOP
+ // stub loading code in SUN JDK 1.4.x, which prepends
+ // "org.omg.stub." to classes in certain name spaces,
+ // such as "com.sun". This non-compliant behavior
+ // results in failures when deploying SUN example code,
+ // including ECPerf and PetStore, so we remove the prefix.
+ if (interfaceName.startsWith("org.omg.stub.com.sun."))
+ interfaceName = interfaceName.substring(13);
- try
- {
- byte[] code = IIOPStubCompiler.compile(intf, name);
+ Class intf = super.loadClass(interfaceName);
+ if (trace)
+ log.trace("loaded class " + interfaceName);
- if (trace)
- {
- log.trace("compiled stub class for " + interfaceName);
- }
- Class clz = defineClass(name, code, 0, code.length);
- if (trace)
- {
- log.trace("defined stub class for " + interfaceName);
- }
- resolveClass(clz);
- try
- {
- clz.newInstance();
- }
- catch (Throwable t)
- {
- ClassNotFoundException cnfe = new ClassNotFoundException(
- interfaceName, t);
- throw cnfe;
- }
- if (trace)
- {
- log.trace("resolved stub class for " + interfaceName);
- }
- return clz;
- }
- catch (RuntimeException e)
- {
- log.debug("failed finding class " + name, e);
- return super.findClass(name);
- }
- }
- else
- {
- return super.findClass(name);
- }
+ byte[] code = IIOPStubCompiler.compile(intf, name);
+ if (trace)
+ log.trace("compiled stub class for " + interfaceName);
+
+ Class clz = super.defineClass(name, code, 0, code.length);
+ if (trace)
+ log.trace("defined stub class for " + interfaceName);
+
+ super.resolveClass(clz);
+ try
+ {
+ clz.newInstance();
}
- else
+ catch (Throwable t)
{
- return super.findClass(name);
+ ClassNotFoundException cnfe = new ClassNotFoundException(interfaceName, t);
+ throw cnfe;
}
+ if (trace)
+ log.trace("resolved stub class for " + interfaceName);
+ return clz;
}
/**
More information about the jboss-cvs-commits
mailing list