[jboss-cvs] JBossAS SVN: r76488 - in projects/jboss-deployers/trunk/deployers-vfs/src: resources/tests/bootstrap and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jul 30 13:33:24 EDT 2008


Author: adrian at jboss.org
Date: 2008-07-30 13:33:24 -0400 (Wed, 30 Jul 2008)
New Revision: 76488

Added:
   projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderClassPathDeployer.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderVisitorUnitTestCase.java
Modified:
   projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSDeploymentClassLoaderPolicyModule.java
   projects/jboss-deployers/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/InMemoryClasesUnitTestCase.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/ManifestClassLoaderUnitTestCase.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesTest.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/BeanScanningUnitTestCase.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/facelets/test/FaceletsUnitTestCase.java
   projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java
Log:
[JBDEPLOY-63] [JBDEPLOY-64] - Split out classpath logic into a seperate deployer and add new logic for excluded roots

Added: projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderClassPathDeployer.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderClassPathDeployer.java	                        (rev 0)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderClassPathDeployer.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -0,0 +1,136 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.deployers.vfs.plugins.classloader;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.deployers.vfs.spi.structure.helpers.ClassPathVisitor;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * VFSClassLoaderClassPathDeployer.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderClassPathDeployer extends AbstractOptionalVFSRealDeployer<ClassLoadingMetaData>
+{
+   /** The vfs classpath */
+   public static String VFS_CLASS_PATH = "org.jboss.deployers.vfs.plugins.classloader.VFS_CLASS_PATH";  
+
+   /** The vfs excluded */
+   public static String VFS_EXCLUDES = "org.jboss.deployers.vfs.plugins.classloader.VFS_EXCLUDES";  
+   
+   /**
+    * Create a new VFSClassLoaderClassPathDeployer.
+    */
+   public VFSClassLoaderClassPathDeployer()
+   {
+      super(ClassLoadingMetaData.class);
+      setOutput(ClassLoadingMetaData.class);
+      setStage(DeploymentStages.DESCRIBE);
+   }
+
+   @Override
+   @SuppressWarnings("unchecked")
+   public void deploy(VFSDeploymentUnit unit, ClassLoadingMetaData deployment) throws DeploymentException
+   {
+      // We aren't creating a classloader
+      if (unit.isTopLevel() == false && deployment == null)
+         return;
+      
+      // Locate the parent class path
+      List<VirtualFile> parentClassPath = null;
+      Set<VirtualFile> parentExcludes = null;
+
+      VFSDeploymentUnit parent = unit.getParent();
+      while (parent != null)
+      {
+         parentClassPath = parent.getAttachment(VFS_CLASS_PATH, List.class);
+         if (parentClassPath != null)
+         {
+            parentExcludes = parent.getAttachment(VFS_EXCLUDES, Set.class);
+            break;
+         }
+         else
+            parent = parent.getParent();
+      }
+      
+      // Get our classpath
+      ClassPathVisitor visitor = new ClassPathVisitor(unit);
+      unit.visit(visitor);
+      Set<VirtualFile> rawClassPath = visitor.getClassPath();
+
+      // We're creating the classpath
+      List<VirtualFile> vfsClassPath = new ArrayList<VirtualFile>();
+      unit.addAttachment(VFS_CLASS_PATH, vfsClassPath, List.class);
+      Set<VirtualFile> vfsExcludes = new HashSet<VirtualFile>();
+      unit.addAttachment(VFS_EXCLUDES, vfsExcludes, Set.class);
+      
+      // Whether our classloader can see the parent
+      boolean canSeeParent = parentClassPath != null && deployment.getParentDomain() == null;
+      
+      // Add all the classpath elements unless we can see the parent and its already in the parent
+      if (rawClassPath != null)
+      {
+         for (VirtualFile file : rawClassPath)
+         {
+            if (vfsClassPath.contains(file) == false)
+            {
+               if (canSeeParent == false || (canSeeParent && parentClassPath.contains(file) == false))
+                  vfsClassPath.add(file);
+            }
+         }
+      }
+      
+      // Exclude those elements from the parent that it doesn't explicitly have
+      if (parentClassPath != null)
+      {
+         VirtualFile root = unit.getRoot();
+         if (root != null && parentClassPath.contains(root) == false)
+            parentExcludes.add(root);
+
+         for (VirtualFile file : vfsClassPath)
+         {
+            if (parentClassPath.contains(file) == false)
+            {
+               parentExcludes.add(file);
+            }
+         }
+      }
+   }
+
+   @Override
+   public void undeploy(VFSDeploymentUnit unit, ClassLoadingMetaData deployment)
+   {
+      unit.removeAttachment(VFS_CLASS_PATH);
+      unit.removeAttachment(VFS_EXCLUDES);
+   }
+}

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSDeploymentClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSDeploymentClassLoaderPolicyModule.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSDeploymentClassLoaderPolicyModule.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -29,7 +29,6 @@
 import org.jboss.classloader.spi.filter.ClassFilter;
 import org.jboss.classloading.plugins.vfs.PackageVisitor;
 import org.jboss.classloading.plugins.vfs.VFSResourceVisitor;
-import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.classloading.spi.metadata.Capability;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
 import org.jboss.classloading.spi.metadata.ExportAll;
@@ -37,10 +36,7 @@
 import org.jboss.classloading.spi.visitor.ResourceFilter;
 import org.jboss.classloading.spi.visitor.ResourceVisitor;
 import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
-import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.deployers.vfs.spi.structure.helpers.ClassPathVisitor;
-import org.jboss.logging.Logger;
 import org.jboss.virtual.VirtualFile;
 
 /**
@@ -53,32 +49,41 @@
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 1L;
-
-   /** The log */
-   private static final Logger log  = Logger.getLogger(VFSDeploymentClassLoaderPolicyModule.class);
    
-   /** The attachment containing the final classpath */
-   public static final String VFS_CLASS_PATH = "VFSClassPath";
+   /** No roots */
+   private static final VirtualFile[] NO_ROOTS = new VirtualFile[0];
    
    /** The cached roots */
    private VirtualFile[] vfsRoots;
    
+   /** The excluded roots */
+   private VirtualFile[] excludedRoots;
+   
    /**
     * Create a new VFSDeploymentClassLoaderPolicyModule.
     * 
     * @param unit the deployment unit
     * @throws IllegalArgumentException for a null deployment unit
     */
+   @SuppressWarnings("unchecked")
    public VFSDeploymentClassLoaderPolicyModule(DeploymentUnit unit)
    {
       super(unit);
+      List<VirtualFile> vfsClassPath = unit.getAttachment(VFSClassLoaderClassPathDeployer.VFS_CLASS_PATH, List.class);
+      if (vfsClassPath == null)
+         vfsRoots = NO_ROOTS;
+      else
+         vfsRoots = vfsClassPath.toArray(new VirtualFile[vfsClassPath.size()]);
+      Set<VirtualFile> vfsExcludes = unit.getAttachment(VFSClassLoaderClassPathDeployer.VFS_EXCLUDES, Set.class);
+      if (vfsExcludes != null)
+         excludedRoots = vfsExcludes.toArray(new VirtualFile[vfsExcludes.size()]);
    }
 
    @Override
    protected List<Capability> determineCapabilities()
    {
       // While we are here, check the roots
-      VirtualFile[] roots = determineVFSRoots();
+      VirtualFile[] roots = vfsRoots;
 
       List<Capability> capabilities = super.determineCapabilities();
       if (capabilities != null)
@@ -100,7 +105,7 @@
       ExportAll exportAll = getExportAll();
       if (exportAll != null)
       {
-         Set<String> exportedPackages = PackageVisitor.determineAllPackages(roots, exportAll, included, excluded, excludedExport);
+         Set<String> exportedPackages = PackageVisitor.determineAllPackages(roots, excludedRoots, exportAll, included, excluded, excludedExport);
          for (String packageName : exportedPackages)
          {
             capability = factory.createPackage(packageName, version);
@@ -110,74 +115,7 @@
       
       return capabilities;
    }
-   
-   /**
-    * Get the virtual file roots
-    * 
-    * @return the roots
-    */
-   protected VirtualFile[] determineVFSRoots()
-   {
-      if (vfsRoots != null)
-         return vfsRoots;
 
-      DeploymentUnit unit = getDeploymentUnit();
-      Set<VirtualFile> classPath = determineClassPath(unit, this);
-      vfsRoots = classPath.toArray(new VirtualFile[classPath.size()]);
-      return vfsRoots;
-   }
-
-   /**
-    * Determine classpath.
-    *
-    * @param unit the deployment unit we check
-    * @param module the unit's module
-    * @return unit's classpath
-    */
-   protected static Set<VirtualFile> determineClassPath(DeploymentUnit unit, Module module)
-   {
-      @SuppressWarnings("unchecked")
-      Set<VirtualFile> classPath = unit.getAttachment(VFS_CLASS_PATH, Set.class);
-      if (classPath != null)
-         return classPath;
-
-      ClassPathVisitor visitor = new ClassPathVisitor(unit);
-      try
-      {
-         unit.visit(visitor);
-      }
-      catch (DeploymentException e)
-      {
-         throw new RuntimeException("Error visiting deployment: " + e);
-      }
-      classPath = visitor.getClassPath();
-
-      // Weed out parent classpaths
-      if (module != null && module.getParentDomainName() == null)
-      {
-         DeploymentUnit parent = unit.getParent();
-         while (parent != null)
-         {
-            Set<VirtualFile> parentClassPath = determineClassPath(parent, parent.getAttachment(Module.class));
-            if (parentClassPath != null && parentClassPath.isEmpty() == false)
-            {
-               if (log.isTraceEnabled())
-               {
-                  for (VirtualFile parentFile : parentClassPath)
-                  {
-                     if (classPath.contains(parentFile))
-                        log.trace(unit + " weeding duplicate entry " + parentFile + " from classpath already in parent " + parent);
-                  }
-               }
-               classPath.removeAll(parentClassPath);
-            }
-            parent = parent.getParent();
-         }
-      }
-      unit.addAttachment(VFS_CLASS_PATH, classPath);
-      return classPath;
-   }
-
    @Override
    public VFSClassLoaderPolicy getPolicy()
    {
@@ -187,8 +125,7 @@
    @Override
    protected VFSClassLoaderPolicy determinePolicy()
    {
-      VirtualFile[] roots = determineVFSRoots();
-      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(getContextName(), roots);
+      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(getContextName(), vfsRoots, excludedRoots);
       String[] packageNames = getPackageNames();
       policy.setExportedPackages(packageNames);
       policy.setIncluded(getIncluded());
@@ -209,25 +146,18 @@
    }
 
    @Override
-   public void reset()
-   {
-      super.reset();
-      vfsRoots = null;
-   }
-
-   @Override
    public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
    {
       ClassLoader classLoader = getClassLoader();
       if (classLoader == null)
          throw new IllegalStateException("ClassLoader has not been constructed for " + getContextName());
 
-      VirtualFile[] roots = determineVFSRoots();
+      VirtualFile[] roots = vfsRoots;
       if (roots != null)
       {
          ClassFilter included = getIncluded();
          ClassFilter excluded = getExcluded();
-         VFSResourceVisitor.visit(roots, included, excluded, classLoader, visitor, filter, recurseFilter);
+         VFSResourceVisitor.visit(roots, excludedRoots, included, excluded, classLoader, visitor, filter, recurseFilter);
       }
    }
 }

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml	2008-07-30 17:33:24 UTC (rev 76488)
@@ -99,6 +99,7 @@
          <classloading xmlns="urn:jboss:classloading:1.0" export-all="NON_EMPTY" import-all="true"/>
       </property>
    </bean>
+   <bean name="ClassLoaderClassPathDeployer" class="org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer"/>
    <bean name="ClassLoaderDescribeDeployer" class="org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer">
       <property name="classLoading"><inject bean="ClassLoading"/></property>
    </bean>

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -30,6 +30,7 @@
 import org.jboss.test.deployers.vfs.classloader.test.ManualDependsOnDeploymentClassLoaderUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.NotVFSClassLoaderUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.SubDeploymentClassLoaderUnitTestCase;
+import org.jboss.test.deployers.vfs.classloader.test.SubDeploymentClassLoaderVisitorUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.VFSClassLoaderDependenciesUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.VFSUndeployOrderClassLoaderUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.IntegrationDeployerUnitTestCase;
@@ -64,6 +65,7 @@
       suite.addTest(DeploymentDependsOnDeploymentClassLoaderUnitTestCase.suite());
       suite.addTest(ManagedObjectClassLoadingParserUnitTestCase.suite());
       suite.addTest(SubDeploymentClassLoaderUnitTestCase.suite());
+      suite.addTest(SubDeploymentClassLoaderVisitorUnitTestCase.suite());
       suite.addTest(NotVFSClassLoaderUnitTestCase.suite());
       suite.addTest(ManifestClassLoaderUnitTestCase.suite());
       suite.addTest(IntegrationDeployerUnitTestCase.suite());

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/InMemoryClasesUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/InMemoryClasesUnitTestCase.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/InMemoryClasesUnitTestCase.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -36,6 +36,7 @@
 import org.jboss.deployers.spi.deployer.Deployer;
 import org.jboss.deployers.structure.spi.main.MainDeployerStructure;
 import org.jboss.deployers.vfs.plugins.classloader.InMemoryClassesDeployer;
+import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer;
 import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
 import org.jboss.test.deployers.vfs.classloader.support.TestLevelClassLoaderSystemDeployer;
@@ -115,6 +116,8 @@
       
       Deployer deployer3 = new InMemoryClassesDeployer();
 
-      return createMainDeployer(deployer1, deployer2, deployer3);
+      Deployer deployer4 = new VFSClassLoaderClassPathDeployer();
+      
+      return createMainDeployer(deployer1, deployer2, deployer3, deployer4);
    }
 }

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/ManifestClassLoaderUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/ManifestClassLoaderUnitTestCase.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/ManifestClassLoaderUnitTestCase.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -76,6 +76,7 @@
       AssembledDirectory sub = topLevel.mkdir("sub.jar");
       addPackage(sub, UseA.class);
       addPath(sub, "/classloader/manifest/scoped", "META-INF");
+      enableTrace("org.jboss.deployers");
       VFSDeploymentUnit unit = assertDeploy(topLevel);
       try
       {

Added: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderVisitorUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderVisitorUnitTestCase.java	                        (rev 0)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderVisitorUnitTestCase.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -0,0 +1,130 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.deployers.vfs.classloader.test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.classloading.spi.visitor.ResourceVisitor;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.test.deployers.BootstrapDeployersTest;
+
+/**
+ * DeploymentDependsOnManualClassLoaderUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class SubDeploymentClassLoaderVisitorUnitTestCase extends BootstrapDeployersTest
+{
+   public static Test suite()
+   {
+      return suite(SubDeploymentClassLoaderVisitorUnitTestCase.class);
+   }
+
+   public SubDeploymentClassLoaderVisitorUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testNoSubDeploymentClassLoaderVisit() throws Exception
+   {
+      VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-no-classloader");
+      try
+      {
+         TestResourceVisitor test = visit(top);
+         test.assertContains("test-resource-top-no-classloader");
+         test.assertContains("test-resource-sub-no-classloader");
+      }
+      finally
+      {
+         undeploy(top);
+      }
+   }
+
+   public void testSubDeploymentClassLoaderVisit() throws Exception
+   {
+      VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-classloader");
+      try
+      {
+         TestResourceVisitor test = visit(top);
+         test.assertContains("test-resource-top-classloader");
+         test.assertNotContains("sub/test-resource-sub-classloader");
+
+         DeploymentUnit sub = assertChild(top, "sub/");
+         test = visit(sub);
+         test.assertNotContains("test-resource-top-classloader");
+         test.assertContains("test-resource-sub-classloader");
+      }
+      finally
+      {
+         undeploy(top);
+      }
+   }
+
+   protected TestResourceVisitor visit(DeploymentUnit unit) throws Exception
+   {
+      Module module = unit.getAttachment(Module.class);
+      if (module == null)
+         fail("Expected " + unit + " to have a module");
+      
+      TestResourceVisitor visitor = new TestResourceVisitor();
+      module.visit(visitor);
+      
+      getLog().debug(unit.getName() + " found: " + visitor.resources);
+      
+      return visitor;
+   }
+   
+   public class TestResourceVisitor implements ResourceVisitor
+   {
+      private Set<String> resources = new HashSet<String>();
+      
+      public void assertContains(String resourceName)
+      {
+         if (resources.contains(resourceName) == false)
+            fail(resourceName + " not found in " + resources);
+      }
+      
+      public void assertNotContains(String resourceName)
+      {
+         if (resources.contains(resourceName))
+            fail(resourceName + " unexpectedly found in " + resources);
+      }
+      
+      public ResourceFilter getFilter()
+      {
+         return null;
+      }
+
+      public void visit(ResourceContext resource)
+      {
+         resources.add(resource.getResourceName());
+      }
+   }
+}

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesTest.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesTest.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesTest.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -46,7 +46,9 @@
 import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer;
 import org.jboss.deployers.spi.attachments.MutableAttachments;
 import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments;
+import org.jboss.deployers.spi.deployer.Deployer;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer;
 import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
 import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
@@ -255,6 +257,8 @@
       deployer2.setClassLoading(classLoading);
       deployer2.setSystem(system);
 
-      return createMainDeployer(deployer1, deployer2);
+      Deployer deployer3 = new VFSClassLoaderClassPathDeployer();
+      
+      return createMainDeployer(deployer1, deployer2, deployer3);
    }
 }

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/BeanScanningUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/BeanScanningUnitTestCase.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/BeanScanningUnitTestCase.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -42,6 +42,7 @@
 import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.BeanScanningDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer;
+import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer;
 import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
 import org.jboss.kernel.Kernel;
@@ -73,6 +74,7 @@
       ClassLoadingMetaData clmd = new ClassLoadingMetaData();
       cldd.setDefaultMetaData(clmd);
 
+      VFSClassLoaderClassPathDeployer vfscp = new VFSClassLoaderClassPathDeployer();
       VFSClassLoaderDescribeDeployer vfsdd = new VFSClassLoaderDescribeDeployer();
       ClassLoading classLoading = new ClassLoading();
       KernelController controller = kernel.getController();
@@ -108,6 +110,7 @@
       addDeployer(main, beanDeployer);
       addDeployer(main, cldd);
       addDeployer(main, vfsdd);
+      addDeployer(main, vfscp);
       addDeployer(main, clsd);
       addDeployer(main, gad);
       addDeployer(main, kernelDeploymentDeployer);

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/facelets/test/FaceletsUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/facelets/test/FaceletsUnitTestCase.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/facelets/test/FaceletsUnitTestCase.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -33,6 +33,7 @@
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
 import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer;
 import org.jboss.deployers.plugins.classloading.ClassLoadingDefaultDeployer;
+import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer;
 import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer;
 import org.jboss.deployers.vfs.plugins.structure.war.WARStructure;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
@@ -74,6 +75,7 @@
       ClassLoadingMetaData clmd = new ClassLoadingMetaData();
       cldd.setDefaultMetaData(clmd);
 
+      VFSClassLoaderClassPathDeployer vfscp = new VFSClassLoaderClassPathDeployer();
       VFSClassLoaderDescribeDeployer vfsdd = new VFSClassLoaderDescribeDeployer();
       ClassLoading classLoading = new ClassLoading();
       KernelController controller = kernel.getController();
@@ -99,6 +101,7 @@
 
       addDeployer(main, cldd);
       addDeployer(main, vfsdd);
+      addDeployer(main, vfscp);
       addDeployer(main, clsd);
       addDeployer(main, deployer);
    }

Modified: projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java	2008-07-30 17:29:48 UTC (rev 76487)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java	2008-07-30 17:33:24 UTC (rev 76488)
@@ -319,7 +319,7 @@
       ClassFilter included = null;
       ClassFilter excluded = null;
       ResourceFilter filter = org.jboss.classloading.spi.visitor.ClassFilter.INSTANCE;
-      VFSResourceVisitor.visit(new VirtualFile[]{archive}, included, excluded, classLoader, visitor, filter, null);
+      VFSResourceVisitor.visit(new VirtualFile[]{archive}, null, included, excluded, classLoader, visitor, filter, null);
       AnnotationEnvironment env = visitor.getEnv();
 
       Integer ejbs = getType(env, Stateless.class, J2eeModuleMetaData.EJB);




More information about the jboss-cvs-commits mailing list