Author: fhanik Date: Fri Aug 17 14:49:50 2007 New Revision: 567156 URL: http://svn.apache.org/viewvc?view=rev&rev=567156 Log: Added in the ability to name classloaders in Tomcat
Added: tomcat/trunk/java/org/apache/catalina/loader/NamedClassLoader.java Modified: tomcat/trunk/build.xml tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java Modified: tomcat/trunk/build.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/build.xml?view=diff&rev=567156&r1=567155&r2=567156 ============================================================================== --- tomcat/trunk/build.xml (original) +++ tomcat/trunk/build.xml Fri Aug 17 14:49:50 2007 @@ -182,6 +182,7 @@ <include name="org/apache/catalina/security/SecurityClassLoad.class" /> <include name="org/apache/naming/JndiPermission.class" /> <include name="org/apache/tomcat/util/compat/*" /> + <include name="org/apache/catalina/loader/NamedClassLoader.class" /> <!-- Javadoc and i18n exclusions --> <exclude name="**/package.html" /> <exclude name="**/LocalStrings_*" /> @@ -215,6 +216,7 @@ <exclude name="org/apache/catalina/launcher/**" /> <exclude name="org/apache/catalina/storeconfig/**" /> <exclude name="org/apache/naming/factory/webservices/**" /> + <exclude name="org/apache/catalina/loader/NamedClassLoader.class" /> </fileset> </jar> Added: tomcat/trunk/java/org/apache/catalina/loader/NamedClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/NamedClassLoader.java?view=auto&rev=567156 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/NamedClassLoader.java (added) +++ tomcat/trunk/java/org/apache/catalina/loader/NamedClassLoader.java Fri Aug 17 14:49:50 2007 @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.loader; +/** + * + * An interface to be able to able to have named classloader. + * Useful when distributing data through AOP or byte code injection + * To be able to map loaders between two instances to make sure the data + * gets loaded through the correct loader on the other node. + * @author Filip Hanik + * + */ +public interface NamedClassLoader { + + /** + * returns the name of this class loader + * @return String + */ + public String getName(); + + /** + * Sets the name of this class loader + * @param name String + */ + public void setName(String name); + +} \ No newline at end of file Modified: tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java?view=diff&rev=567156&r1=567155&r2=567156 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java Fri Aug 17 14:49:50 2007 @@ -21,6 +21,7 @@ import java.net.URL; import java.net.URLClassLoader; + /** * Subclass implementation of <b>java.net.URLClassLoader</b>. There are no * functional differences between this class and <b>java.net.URLClassLoader</b>. @@ -32,7 +33,9 @@ public class StandardClassLoader extends URLClassLoader - implements StandardClassLoaderMBean { + implements StandardClassLoaderMBean, NamedClassLoader { + + protected String name; public StandardClassLoader(URL repositories[]) { super(repositories); @@ -41,6 +44,16 @@ public StandardClassLoader(URL repositories[], ClassLoader parent) { super(repositories, parent); } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + } Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?view=diff&rev=567156&r1=567155&r2=567156 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Aug 17 14:49:50 2007 @@ -64,6 +64,7 @@ import org.apache.naming.resources.ResourceAttributes; import org.apache.tomcat.util.IntrospectionUtils; + /** * Specialized web application class loader. * <p> @@ -103,7 +104,7 @@ */ public class WebappClassLoader extends URLClassLoader - implements Reloader, Lifecycle + implements Reloader, Lifecycle, NamedClassLoader { protected static org.apache.juli.logging.Log log= @@ -370,6 +371,11 @@ */ protected Permission allPermission = new java.security.AllPermission(); + /** + * The name of this classloader + * typically a concatenated string of Engine/Host/Context names + */ + protected String name = null; // ------------------------------------------------------------- Properties @@ -522,6 +528,14 @@ */ protected void setParentClassLoader(ClassLoader pcl) { parent = pcl; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; } // ------------------------------------------------------- Reloader Methods Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?view=diff&rev=567156&r1=567155&r2=567156 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Fri Aug 17 14:49:50 2007 @@ -62,6 +62,7 @@ import org.apache.naming.resources.DirContextURLStreamHandlerFactory; import org.apache.naming.resources.Resource; import org.apache.tomcat.util.modeler.Registry; +import org.apache.catalina.Host; /** @@ -660,7 +661,8 @@ ((ClassLoader) classLoader, this.container.getResources()); StandardContext ctx=(StandardContext)container; - Engine eng=(Engine)ctx.getParent().getParent(); + Host host = (Host)ctx.getParent(); + Engine eng=(Engine)host.getParent(); String path = ctx.getPath(); if (path.equals("")) { path = "/"; @@ -670,13 +672,16 @@ + path + ",host=" + ctx.getParent().getName()); Registry.getRegistry(null, null) .registerComponent(classLoader, cloname, null); - + + //set the name of the webapp classloader + String clName = eng.getName()+"#"+host.getName()+"#"+ctx.getName(); + classLoader.setName(clName); } catch (Throwable t) { log.error( "LifecycleException ", t ); throw new LifecycleException("start: ", t); } - } + /** Modified: tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java?view=diff&rev=567156&r1=567155&r2=567156 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java Fri Aug 17 14:49:50 2007 @@ -33,6 +33,7 @@ import org.apache.catalina.security.SecurityClassLoad; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.catalina.loader.NamedClassLoader; /** @@ -172,6 +173,10 @@ ClassLoader classLoader = ClassLoaderFactory.createClassLoader (locations, types, parent); + + if ( classLoader instanceof NamedClassLoader ) { + ((NamedClassLoader)classLoader).setName(name); + } // Retrieving MBean server MBeanServer mBeanServer = null; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]