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]