[jboss-cvs] JBossAS SVN: r85738 - in projects/jboss-cl/trunk: classloading-vfs/src/test/java/org/jboss/test/classloading and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 11 11:30:59 EDT 2009


Author: kabir.khan at jboss.com
Date: 2009-03-11 11:30:59 -0400 (Wed, 11 Mar 2009)
New Revision: 85738

Added:
   projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/support2/
   projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/support2/MockGlobalCapabilitiesProvider.java
   projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/otherpackage/
   projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/otherpackage/GeneratedClass.class
   projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/GlobalCapabilitiesProvider.java
Modified:
   projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java
   projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java
   projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java
   projects/jboss-cl/trunk/classloading-vfs/src/test/resources/org/jboss/test/classloading/vfs/metadata/Common.xml
   projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
   projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java
   projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
Log:
[JBCL-92] Add GlobalCapabilitiesProvider. Currently it is not configurable with packages that should always be exported, I am waiting for some feedback on how to do that

Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -21,10 +21,14 @@
  */
 package org.jboss.classloading.spi.dependency;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.metadata.Capability;
+import org.jboss.util.collection.ConcurrentSet;
 
 /**
  * ClassLoading.
@@ -40,6 +44,8 @@
    /** The classloading domains by name */
    private Map<String, Domain> domains = new ConcurrentHashMap<String, Domain>();
    
+   private final Set<GlobalCapabilitiesProvider> globalCapabilitiesProviders = new ConcurrentSet<GlobalCapabilitiesProvider>();
+   
    /**
     * Add a module
     * 
@@ -70,8 +76,34 @@
          throw new IllegalArgumentException("Null module");
       module.release();
    }
-
+   
    /**
+    * Add a global capabilities provider
+    * @param provider the provider
+    * @throws IllegalArgumentException for a null provider
+    */
+   public void addGlobalCapabilitiesProvider(GlobalCapabilitiesProvider provider)
+   {
+      if (provider == null)
+         throw new IllegalArgumentException("Null global capabilities provider");
+      
+      globalCapabilitiesProviders.add(provider);
+   }
+   
+   /**
+    * Remove a global capabilities provider
+    * @param provider the provider
+    * @throws IllegalArgumentException for a null provider
+    */
+   public void removeGlobalCapabilitiesProvider(GlobalCapabilitiesProvider provider)
+   {
+      if (provider == null)
+         throw new IllegalArgumentException("Null global capabilities provider");
+      
+      globalCapabilitiesProviders.remove(provider);
+   }
+   
+   /**
     * Get or create the domain
     * 
     * @param domainName the domain name
@@ -159,4 +191,24 @@
          return null;
       return module.getClassLoader();
    }
+   
+   /**
+    * Merges the capabilities provided by our global capabilities provider with the passed in capabilities
+    * @param capabilities The capabilities list into which we want to add the global capabilities
+    * @return The passed in capabilities with the global capabilities merged in
+    */
+   List<Capability> mergeGlobalCapabilities(List<Capability> capabilities)
+   {
+      if (capabilities == null)
+         throw new IllegalArgumentException("Null capabilities");
+      
+      if (globalCapabilitiesProviders != null && globalCapabilitiesProviders.size() > 0)
+      {
+         for (GlobalCapabilitiesProvider provider : globalCapabilitiesProviders)
+         {
+            capabilities.addAll(provider.getCapabilities());
+         }
+      }
+      return capabilities;
+   }
 }

Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -207,6 +207,16 @@
    }
    
    /**
+    * Merges the capabilities provided by our global capabilities provider with the passed in capabilities
+    * @param capabilities The capabilities list into which we want to add the global capabilities
+    * @return The passed in capabilities with the global capabilities merged in
+    */
+   List<Capability> mergeGlobalCapabilities(List<Capability> capabilities)
+   {
+      return classLoading.mergeGlobalCapabilities(capabilities);
+   }
+   
+   /**
     * Resolve a requirement to a module
     * 
     * @param module the module

Added: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/GlobalCapabilitiesProvider.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/GlobalCapabilitiesProvider.java	                        (rev 0)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/GlobalCapabilitiesProvider.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -0,0 +1,36 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.classloading.spi.dependency;
+
+import java.util.List;
+
+import org.jboss.classloading.spi.metadata.Capability;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface GlobalCapabilitiesProvider
+{
+   List<Capability> getCapabilities();
+}

Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -82,7 +82,7 @@
    
    /** The requirements */
    private List<RequirementDependencyItem> requirementDependencies;
-
+   
    /**
     * Register a classloader for a module
     * 
@@ -355,7 +355,7 @@
    {
       return true;
    }
-
+   
    /**
     * Find the module for a classloader
     * 
@@ -656,6 +656,9 @@
       // Use the defaults
       if (capabilities == null)
          capabilities = defaultCapabilities();
+
+      //Add global capabilities
+      capabilities = getDomain().mergeGlobalCapabilities(capabilities);
       
       // Cache it
       this.capabilities = capabilities;

Modified: projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -27,6 +27,7 @@
 
 import org.jboss.test.classloading.vfs.client.test.ClientClassPathUnitTestCase;
 import org.jboss.test.classloading.vfs.metadata.test.DomainUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.GeneratedClassesUnitTestCase;
 import org.jboss.test.classloading.vfs.metadata.test.ImportAllUnitTestCase;
 import org.jboss.test.classloading.vfs.metadata.test.ManagedObjectVFSClassLoaderFactoryUnitTestCase;
 import org.jboss.test.classloading.vfs.metadata.test.ModuleDependencyUnitTestCase;
@@ -83,6 +84,7 @@
       suite.addTest(VFSResourceVisitorUnitTestCase.suite());
       suite.addTest(ClientClassPathUnitTestCase.suite());
       suite.addTest(PackageInfoUnitTestCase.suite());
+      suite.addTest(GeneratedClassesUnitTestCase.suite());
 
       return suite;
    }

Modified: projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -41,12 +41,20 @@
 
    protected void deploy() throws Exception
    {
+      enableTrace("org.jboss.xb");
       String common = "/org/jboss/test/classloading/vfs/metadata/Common.xml";
       URL url = getClass().getResource(common);
       if (url == null)
          throw new IllegalStateException(common + " not found");
       deploy(url);
 
-      super.deploy();
+      try
+      {
+         super.deploy();
+      }
+      catch(Exception e)
+      {
+         e.printStackTrace();
+      }
    }
 }

Added: projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/support2/MockGlobalCapabilitiesProvider.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/support2/MockGlobalCapabilitiesProvider.java	                        (rev 0)
+++ projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/support2/MockGlobalCapabilitiesProvider.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -0,0 +1,56 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.classloading.vfs.metadata.support2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.classloading.plugins.metadata.PackageCapability;
+import org.jboss.classloading.spi.dependency.GlobalCapabilitiesProvider;
+import org.jboss.classloading.spi.metadata.Capability;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockGlobalCapabilitiesProvider implements GlobalCapabilitiesProvider
+{
+   List<Capability> capabilities;
+   
+   public void setCapabilities(List<Capability> capabilities)
+   {
+      this.capabilities = capabilities;
+   }
+   
+   public List<Capability> getCapabilities()
+   {
+      if (capabilities == null)
+      {
+         capabilities = new ArrayList<Capability>();
+         capabilities.add(new PackageCapability("newpackage"));
+      }
+      
+      return capabilities;
+   }
+   
+}

Modified: projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java	2009-03-11 15:30:59 UTC (rev 85738)
@@ -50,8 +50,8 @@
  */
 public class GeneratedClassesUnitTestCase extends VFSClassLoadingMicrocontainerTest
 {
-   final static GeneratedClassInfo DEFAULT_PACKAGE = new GeneratedClassInfo("DefaultGeneratedClass");
    final static GeneratedClassInfo NEW_PACKAGE  = new GeneratedClassInfo("newpackage.GeneratedClass");
+   final static GeneratedClassInfo OTHER_PACKAGE  = new GeneratedClassInfo("otherpackage.GeneratedClass");
    final static GeneratedClassInfo EXISTING_PACKAGE  = new GeneratedClassInfo("org.jboss.test.classloading.vfs.metadata.support.a.GeneratedClass");
    static
    {
@@ -70,21 +70,20 @@
 
    public void testImportAllGenerateClassInExistingPackage() throws Exception
    {
-      runImportAllGenerateClass(EXISTING_PACKAGE);
+      runImportAllGenerateClass(EXISTING_PACKAGE, true);
    }
    
-   public void testImportAllGenerateClassInDefaultPackage() throws Exception
+   public void testImportAllGenerateClassInGlobalIncludedPackage() throws Exception
    {
-      runImportAllGenerateClass(DEFAULT_PACKAGE);      
+      runImportAllGenerateClass(NEW_PACKAGE, true);
    }
    
-   public void testImportAllGenerateClassInNewPackage() throws Exception
+   public void testImportAllGenerateClassInOtherPackage() throws Exception
    {
-      runImportAllGenerateClass(NEW_PACKAGE);
+      runImportAllGenerateClass(OTHER_PACKAGE, false);
    }
    
-   
-   private void runImportAllGenerateClass(GeneratedClassInfo info) throws Exception
+   private void runImportAllGenerateClass(GeneratedClassInfo info, boolean expectSuccess) throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
       String dynamicClassRoot = getDynamicClassRoot();
@@ -93,7 +92,7 @@
       a.getRoots().add(getRoot(A.class));
       a.getRoots().add(dynamicClassRoot);
       a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.getCapabilities().addCapability(factory.createPackage(info.getPackageName()));
+      //a.getCapabilities().addCapability(factory.createPackage(info.getPackageName()));
       KernelDeployment depA = install(a);
 
       VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
@@ -114,8 +113,24 @@
          Class<?> clazz = generateClass(clA, dynamicClassRoot, info);
          Class<?> clazzA = assertLoadClass(info.getClassname(), clA);
          assertSame(clazz, clazzA);
-         Class<?> clazzB = assertLoadClass(info.getClassname(), clB, clA);
-         assertSame(clazz, clazzB);
+         
+         try
+         {
+            Class<?> clazzB = assertLoadClass(info.getClassname(), clB, clA);
+            
+            if (!expectSuccess)
+            {
+               fail("Should not have been able to load " + info.getClassname());
+            }
+            assertSame(clazz, clazzB);
+         }
+         catch(Throwable t)
+         {
+            if (expectSuccess)
+            {
+               fail("Should have been able to load class" + info.getClassname() + " " + t);
+            }
+         }
       }
       finally
       {
@@ -180,6 +195,8 @@
       private void loadClassBytes()
       {
          InputStream in = this.getClass().getClassLoader().getResourceAsStream("classes/" + resourceName);
+         
+         assertNotNull("Could not find inputstream for " + resourceName, in);
          try
          {
             ByteArrayOutputStream out = new ByteArrayOutputStream();

Added: projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/otherpackage/GeneratedClass.class
===================================================================
(Binary files differ)


Property changes on: projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/otherpackage/GeneratedClass.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: projects/jboss-cl/trunk/classloading-vfs/src/test/resources/org/jboss/test/classloading/vfs/metadata/Common.xml
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/test/resources/org/jboss/test/classloading/vfs/metadata/Common.xml	2009-03-11 15:04:21 UTC (rev 85737)
+++ projects/jboss-cl/trunk/classloading-vfs/src/test/resources/org/jboss/test/classloading/vfs/metadata/Common.xml	2009-03-11 15:30:59 UTC (rev 85738)
@@ -9,6 +9,8 @@
    <bean name="ClassLoading" class="org.jboss.classloading.spi.dependency.ClassLoading">
       <incallback method="addModule" state="Configured"/>
       <uncallback method="removeModule" state="Configured"/>
+      <incallback method="addGlobalCapabilitiesProvider" state="Configured"/>
+      <uncallback method="removeGlobalCapabilitiesProvider" state="Configured"/>
    </bean>
 
    <bean name="SchemaResolverConfig" class="org.jboss.xb.binding.sunday.unmarshalling.SchemaResolverConfig">
@@ -18,6 +20,10 @@
                <key>urn:jboss:classloader:1.0</key>
                <value>org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory10</value>
             </entry>
+            <entry>
+               <key>urn:jboss:classloading:1.0</key>
+               <value>org.jboss.classloading.spi.metadata.ClassLoadingMetaData10</value>
+            </entry>
          </map>
       </property>
    </bean>




More information about the jboss-cvs-commits mailing list