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]

Reply via email to