[jboss-cvs] JBossAS SVN: r58290 - in trunk/tomcat/src/main/org/jboss/web/tomcat/tc6: . deployers

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 13 03:40:44 EST 2006


Author: scott.stark at jboss.org
Date: 2006-11-13 03:40:39 -0500 (Mon, 13 Nov 2006)
New Revision: 58290

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppClassLoader.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppLoader.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebCtxLoader.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/deployers/TomcatDeployment.java
Log:
Map the classpath to the expanded war

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppClassLoader.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppClassLoader.java	2006-11-13 04:20:54 UTC (rev 58289)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppClassLoader.java	2006-11-13 08:40:39 UTC (rev 58290)
@@ -21,6 +21,8 @@
 */
 package org.jboss.web.tomcat.tc6;
 
+import java.net.URL;
+
 import org.apache.catalina.loader.WebappClassLoader;
 import org.jboss.logging.Logger;
 
@@ -57,6 +59,12 @@
       this.filteredPackages = pkgs;
    }
 
+   @Override
+   public void addURL(URL url)
+   {
+      super.addURL(url);
+   }
+
    /**
     * Overriden to filter out classes in the packages listed in the
     * filteredPackages settings.

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppLoader.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppLoader.java	2006-11-13 04:20:54 UTC (rev 58289)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebAppLoader.java	2006-11-13 08:40:39 UTC (rev 58290)
@@ -21,6 +21,9 @@
 */
 package org.jboss.web.tomcat.tc6;
 
+import java.net.URL;
+import java.util.List;
+
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.loader.WebappLoader;
 import org.jboss.logging.Logger;
@@ -39,6 +42,7 @@
    private String[] filteredPackages = {
            "org.apache.commons.logging"
    };
+   private List<URL> classpath;
 
    private TomcatInjectionContainer injectionContainer;
 
@@ -61,6 +65,16 @@
    }
 
    /**
+    * Use an explicit classpath
+    * 
+    * @param classpath
+    */
+   public void setClasspath(List<URL> classpath)
+   {
+      this.classpath = classpath;
+   }
+
+   /**
     * Override to apply the filteredPackages to the jboss WebAppClassLoader
     *
     * @throws LifecycleException
@@ -73,6 +87,13 @@
       {
          WebAppClassLoader webLoader = (WebAppClassLoader) loader;
          webLoader.setFilteredPackages(filteredPackages);
+         if( classpath != null )
+         {
+            for(URL url : classpath)
+            {
+               webLoader.addURL(url);
+            }
+         }
       }
       if (injectionContainer != null)
       {

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebCtxLoader.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebCtxLoader.java	2006-11-13 04:20:54 UTC (rev 58289)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/WebCtxLoader.java	2006-11-13 08:40:39 UTC (rev 58290)
@@ -28,6 +28,7 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.List;
 
 import javax.servlet.ServletContext;
 
@@ -93,6 +94,26 @@
       injectionContainer = container;
    }
 
+   /**
+    * Use an explicit classpath
+    * 
+    * @param classpath
+    */
+   public void setClasspath(List<URL> classpath)
+   {
+      for(URL path : classpath)
+      {
+         delegate.addURL(path);
+         ctxLoader.addURLInternal(path);
+      }
+   }
+
+   /**
+    * Build the classpath from the war url WEB-INF/{classes,lib}. 
+    * 
+    * @param warURL
+    * @throws MalformedURLException
+    */
    public void setWarURL(URL warURL) throws MalformedURLException
    {
       this.warURL = warURL;

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/deployers/TomcatDeployment.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/deployers/TomcatDeployment.java	2006-11-13 04:20:54 UTC (rev 58289)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/tc6/deployers/TomcatDeployment.java	2006-11-13 08:40:39 UTC (rev 58290)
@@ -29,9 +29,11 @@
 import java.net.URL;
 import java.security.CodeSource;
 import java.security.cert.Certificate;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -42,11 +44,13 @@
 
 import org.apache.catalina.Loader;
 import org.apache.tomcat.util.modeler.Registry;
+import org.jboss.deployers.spi.deployer.DeploymentUnit;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.WebMetaData;
 import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.security.AuthorizationManager;
 import org.jboss.security.authorization.PolicyRegistration;
+import org.jboss.virtual.VirtualFile;
 import org.jboss.web.WebApplication;
 import org.jboss.web.deployers.AbstractWarDeployment;
 import org.jboss.web.tomcat.security.JaccContextValve;
@@ -146,7 +150,10 @@
       metaData.setContextLoader(loader);
       
       // injectionContainer = new TomcatInjectionContainer(webAppParser, appInfo);
-      Loader webLoader = getWebLoader(loader, url);
+      Loader webLoader = webApp.getDeploymentUnit().getAttachment(Loader.class);
+      if( webLoader == null )
+         webLoader = getWebLoader(webApp.getDeploymentUnit(), loader, url);
+
       webApp.setName(url.getPath());
       webApp.setClassLoader(loader);
       webApp.setURL(url);
@@ -286,7 +293,8 @@
       {
          // Init the container; this will also start it
          server.invoke(objectName, "init", new Object[] {}, new String[] {});
-      } finally
+      }
+      finally
       {
          RunAsListener.metaDataLocal.set(null);
       }
@@ -407,26 +415,29 @@
       log.debug("Initialized: " + webApp + " " + objectName);
    }
 
-   public Loader getWebLoader(ClassLoader loader, URL url)
+   public Loader getWebLoader(DeploymentUnit unit, ClassLoader loader, URL url)
          throws MalformedURLException
    {
       Loader webLoader = null;
+      
       /*
        * If we are using the jboss class loader we need to augment its path to
        * include the WEB-INF/{lib,classes} dirs or else scoped class loading
        * does not see the war level overrides. The call to setWarURL adds these
        * paths to the deployment UCL.
        */
-
+      ArrayList<URL> classpath = (ArrayList<URL>) unit.getAttachment("org.jboss.web.expandedWarClasspath");
       if (config.isUseJBossWebLoader())
       {
          WebCtxLoader jbossLoader = new WebCtxLoader(loader/*
                                                              * ,
                                                              * injectionContainer
                                                              */);
-         jbossLoader.setWarURL(url);
+         if( classpath != null )
+            jbossLoader.setClasspath(classpath);
          webLoader = jbossLoader;
-      } else
+      }
+      else
       {
          String[] pkgs = config.getFilteredPackages();
          WebAppLoader jbossLoader = new WebAppLoader(loader, pkgs/*
@@ -434,6 +445,8 @@
                                                                    * injectionContainer
                                                                    */);
          jbossLoader.setDelegate(getJava2ClassLoadingCompliance());
+         if( classpath != null )
+            jbossLoader.setClasspath(classpath);
          webLoader = jbossLoader;
       }
       return webLoader;




More information about the jboss-cvs-commits mailing list