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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Feb 21 06:37:19 EST 2008


Author: adrian at jboss.org
Date: 2008-02-21 06:37:18 -0500 (Thu, 21 Feb 2008)
New Revision: 69994

Added:
   projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoadingDefaultDeployer.java
   projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/
   projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/META-INF/
   projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/META-INF/jboss-classloading.xml
Modified:
   projects/microcontainer/trunk/deployers-vfs-spi/src/main/org/jboss/deployers/vfs/spi/deployer/SchemaResolverDeployer.java
   projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml
   projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTest.java
   projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTestDelegate.java
   projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java
   projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/BootstrapDeployersSmokeTestUnitTestCase.java
Log:
[JBMICROCONT-241] - Add a default ClassLoadingMetaData deployer and include classloading to the Bootstrap Deployers test

Added: projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoadingDefaultDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoadingDefaultDeployer.java	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoadingDefaultDeployer.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -0,0 +1,95 @@
+/*
+* 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.plugins.classloading;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractOptionalRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ * ClassLoadingDefaultDeployer.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoadingDefaultDeployer extends AbstractOptionalRealDeployer<ClassLoadingMetaData>
+{
+   /** The default classloading metadata */
+   private ClassLoadingMetaData defaultMetaData;
+   
+   /**
+    * Create a new ClassLoadingDefaultDeployer.
+    */
+   public ClassLoadingDefaultDeployer()
+   {
+      super(ClassLoadingMetaData.class);
+      setOutput(ClassLoadingMetaData.class);
+      setStage(DeploymentStages.DESCRIBE);
+      setTopLevelOnly(true);
+   }
+
+   /**
+    * Get the defaultMetaData.
+    * 
+    * @return the defaultMetaData.
+    */
+   public ClassLoadingMetaData getDefaultMetaData()
+   {
+      return defaultMetaData;
+   }
+
+   /**
+    * Set the defaultMetaData.
+    * 
+    * @param defaultMetaData the defaultMetaData.
+    */
+   public void setDefaultMetaData(ClassLoadingMetaData defaultMetaData)
+   {
+      this.defaultMetaData = defaultMetaData;
+   }
+
+   /**
+    * Check the state
+    */
+   public void create()
+   {
+      if (defaultMetaData == null)
+         throw new IllegalStateException("Default metadata has not been configured");
+   }
+   
+   @Override
+   public void deploy(DeploymentUnit unit, ClassLoadingMetaData deployment) throws DeploymentException
+   {
+      if (deployment == null)
+      {
+         ClassLoadingMetaData cloned = defaultMetaData.clone();
+         cloned.setName(unit.getSimpleName());
+         unit.addAttachment(ClassLoadingMetaData.class, cloned);
+      }
+      else if (deployment.getName() == null)
+      {
+         deployment.setName(unit.getSimpleName());
+      }
+   }
+}

Modified: projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/bootstrap.xml	2008-02-21 11:37:18 UTC (rev 69994)
@@ -97,15 +97,26 @@
    </bean>
 
    <!-- VFS ClassLoader -->
-   <!--bean name="ClassLoaderSystem" class="org.jboss.classloader.spi.ClassLoaderSystem">
+   <bean name="ClassLoaderSystem" class="org.jboss.classloader.spi.ClassLoaderSystem">
       <constructor factoryClass="org.jboss.classloader.spi.ClassLoaderSystem" factoryMethod="getInstance"/>
    </bean>
    <bean name="ClassLoading" class="org.jboss.classloading.spi.dependency.ClassLoading"/>
+   <bean name="ClassLoadingMetaDataParser" class="org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer">
+      <constructor>
+         <parameter>org.jboss.classloading.spi.metadata.ClassLoadingMetaData</parameter>
+      </constructor>
+      <property name="name">jboss-classloading.xml</property>
+   </bean>
+   <bean name="ClassLoadingDefaultDeployer" class="org.jboss.deployers.plugins.classloading.ClassLoadingDefaultDeployer">
+      <property name="defaultMetaData">
+         <classloading xmlns="urn:jboss:classloading:1.0" export-all="NON_EMPTY" import-all="true"/>
+      </property>
+   </bean>
    <bean name="ClassLoaderDescribeDeployer" class="org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer">
       <property name="classLoading"><inject bean="ClassLoading"/></property>
    </bean>
    <bean name="ClassLoaderDeployer" class="org.jboss.deployers.plugins.classloading.AbstractTopLevelClassLoaderSystemDeployer">
       <property name="classLoading"><inject bean="ClassLoading"/></property>
       <property name="system"><inject bean="ClassLoaderSystem"/></property>
-   </bean-->
+   </bean>
 </deployment>

Added: projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/META-INF/jboss-classloading.xml
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/META-INF/jboss-classloading.xml	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-vfs/src/resources/tests/bootstrap/test-classloader/META-INF/jboss-classloading.xml	2008-02-21 11:37:18 UTC (rev 69994)
@@ -0,0 +1 @@
+<classloading xmlns="urn:jboss:classloading:1.0" name="test-classloading"/>

Modified: projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTest.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTest.java	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTest.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -25,7 +25,14 @@
 import java.security.CodeSource;
 import java.security.ProtectionDomain;
 
+import junit.framework.AssertionFailedError;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.plugins.jdk.AbstractJDKChecker;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
 import org.jboss.deployers.client.spi.DeployerClient;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.structure.spi.main.MainDeployerStructure;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
 import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
@@ -76,13 +83,15 @@
       return (BootstrapDeployersTestDelegate) super.getDelegate();
    }
    
-   protected VFSDeployment createVFSDeployment(String root) throws Exception
+   protected VFSDeployment createVFSDeployment(String root, String child) throws Exception
    {
       URL resourceRoot = getClass().getResource(root);
       if (resourceRoot == null)
-         throw new IllegalStateException("Resource not found: " + root);
-      VirtualFile rootFile = VFS.getRoot(resourceRoot);
-      return createVFSDeployment(rootFile);
+         fail("Resource not found: " + root);
+      VirtualFile deployment = VFS.getVirtualFile(resourceRoot, child);
+      if (deployment == null)
+         fail("Child not found " + child + " from " + resourceRoot);
+      return createVFSDeployment(deployment);
    }
    
    protected VFSDeployment createVFSDeployment(VirtualFile root) throws Exception
@@ -91,10 +100,164 @@
       return factory.createVFSDeployment(root);
    }
    
-   protected VFSDeploymentUnit assertDeploy(String root) throws Exception
+   protected VFSDeploymentUnit assertDeploy(String root, String child) throws Exception
    {
-      VFSDeployment deployment = createVFSDeployment(root);
+      VFSDeployment deployment = createVFSDeployment(root, child);
       getDeployerClient().deploy(deployment);
       return (VFSDeploymentUnit) getMainDeployerStructure().getDeploymentUnit(deployment.getName(), true);
    }
+   
+   protected void undeploy(DeploymentUnit unit)
+   {
+      try
+      {
+         undeploy(unit, false);
+      }
+      catch (Throwable t)
+      {
+         throw new RuntimeException("Unexpected", t);
+      }
+   }
+   
+   protected void undeploy(DeploymentUnit unit, boolean wantError) throws Exception
+   {
+      try
+      {
+         getDeployerClient().undeploy(unit.getName());
+      }
+      catch (Exception e)
+      {
+         if (wantError)
+            throw e;
+      }
+   }
+   
+   protected void assertClassLoader(Class<?> clazz, ClassLoader expected)
+   {
+      if (expected == null)
+         return;
+      ClassLoader cl = clazz.getClassLoader();
+      boolean result = expected.equals(cl);
+      assertTrue(ClassLoaderUtils.classToString(clazz) + " should have expected classloader=" + expected, result);
+   }
+   
+   protected void assertClassEquality(Class<?> expected, Class<?> actual)
+   {
+      assertTrue("Should be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected == actual);
+   }
+   
+   protected void assertNoClassEquality(Class<?> expected, Class<?> actual)
+   {
+      assertTrue("Should NOT be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected != actual);
+   }
+   
+   protected URL assertGetResource(String name, ClassLoader start)
+   {
+      URL result = start.getResource(name);
+      assertNotNull("Resource not found '" + name  + "' from " + start, result);
+      return result;
+   }
+   
+   protected void assertNoResource(String name, ClassLoader start)
+   {
+      URL result = start.getResource(name);
+      assertNull("Did not expect resource '" + name  + "' from " + start, result);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start)
+   {
+      return assertLoadClass(reference, start, start, false);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, boolean isReference)
+   {
+      return assertLoadClass(reference, start, start, isReference);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected)
+   {
+      return assertLoadClass(reference, start, expected, false);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected, boolean isReference)
+   {
+      Class<?> result = assertLoadClass(reference.getName(), start, expected);
+      if (isReference)
+         assertClassEquality(reference, result);
+      else
+         assertNoClassEquality(reference, result);
+      return result;
+   }
+   
+   protected Class<?> assertLoadClass(String name, ClassLoader start)
+   {
+      return assertLoadClass(name, start, start);
+   }
+   
+   protected Class<?> assertLoadClass(String name, ClassLoader start, ClassLoader expected)
+   {
+      Class<?> result = null;
+      try
+      {
+         result = start.loadClass(name);
+         getLog().debug("Got class: " + ClassLoaderUtils.classToString(result) + " for " + name + " from " + start);
+      }
+      catch (ClassNotFoundException e)
+      {
+         failure("Did not expect CNFE for " + name + " from " + start, e);
+      }
+      assertClassLoader(result, expected);
+      return result;
+   }
+   
+   protected void assertLoadClassFail(Class<?> reference, ClassLoader start)
+   {
+      assertLoadClassFail(reference.getName(), start);
+   }
+      
+   protected void assertLoadClassFail(String name, ClassLoader start)
+   {
+      try
+      {
+         start.loadClass(name);
+         fail("Should not be here!");
+      }
+      catch (Exception expected)
+      {
+         checkThrowable(ClassNotFoundException.class, expected);
+      }
+   }
+   
+   protected ClassLoader getClassLoader(DeploymentUnit unit)
+   {
+      return unit.getClassLoader();
+   }
+   
+   protected ClassLoader getClassLoader(Object name)
+   {
+      ControllerContext ctx = getControllerContext(name);
+      assertNotNull(ctx);
+      InvokeDispatchContext dispatch = assertInstanceOf(ctx, InvokeDispatchContext.class, true);
+      try
+      {
+         ClassLoader result = dispatch.getClassLoader();
+         assertNotNull(result);
+         return result;
+      }
+      catch (AssertionFailedError e)
+      {
+         throw e;
+      }
+      catch (Throwable e)
+      {
+         throw new RuntimeException("Unexpected error getting classloader", e);
+      }
+   }
+   
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      // This is a hack for a hack. ;-)
+      AbstractJDKChecker.getExcluded().add(BootstrapDeployersTest.class);
+   }
 }

Modified: projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTestDelegate.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTestDelegate.java	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/BootstrapDeployersTestDelegate.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -23,9 +23,13 @@
 
 import java.net.URL;
 
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData10;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory10;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.plugins.main.MainDeployerImpl;
 import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
 
 /**
  * BootstrapDeployersTestDelegate.
@@ -36,6 +40,13 @@
 public class BootstrapDeployersTestDelegate extends MicrocontainerTestDelegate
 {
    private MainDeployerImpl mainDeployer;
+
+   static
+   {
+      DefaultSchemaResolver resolver = (DefaultSchemaResolver) SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
+      resolver.addClassBinding("urn:jboss:classloader:1.0", VFSClassLoaderFactory10.class);
+      resolver.addClassBinding("urn:jboss:classloading:1.0", ClassLoadingMetaData10.class);
+   }
    
    public BootstrapDeployersTestDelegate(Class<?> clazz) throws Exception
    {

Modified: projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -21,6 +21,7 @@
 */
 package org.jboss.test.deployers.vfs.classloader;
 
+import org.jboss.test.deployers.vfs.classloader.test.BootstrapDeployersSmokeTestUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.InMemoryClasesUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.VFSClassLoaderDependenciesUnitTestCase;
 import org.jboss.test.deployers.vfs.classloader.test.VFSUndeployOrderClassLoaderUnitTestCase;
@@ -46,6 +47,7 @@
    {
       TestSuite suite = new TestSuite("VFS ClassLoader Tests");
 
+      suite.addTest(BootstrapDeployersSmokeTestUnitTestCase.suite());
       suite.addTest(VFSClassLoaderDependenciesUnitTestCase.suite());
       suite.addTest(VFSUndeployOrderClassLoaderUnitTestCase.suite());
       suite.addTest(InMemoryClasesUnitTestCase.suite());

Modified: projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/BootstrapDeployersSmokeTestUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/BootstrapDeployersSmokeTestUnitTestCase.java	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/classloader/test/BootstrapDeployersSmokeTestUnitTestCase.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -26,6 +26,8 @@
 
 import junit.framework.Test;
 
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ExportAll;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
 import org.jboss.test.deployers.BootstrapDeployersTest;
@@ -60,13 +62,47 @@
    
    public void testDeployBeans() throws Exception
    {
-      VFSDeploymentUnit unit = assertDeploy("/bootstrap/test");
-      List<DeploymentUnit> components = unit.getComponents();
-      assertNotNull(components);
-      assertEquals(1, components.size());
-      DeploymentUnit component = components.get(0);
-      assertEquals("Test", component.getName());
-      
-      assertBean("Test", ArrayList.class);
+      VFSDeploymentUnit unit = assertDeploy("/bootstrap", "test");
+      try
+      {
+         List<DeploymentUnit> components = unit.getComponents();
+         assertNotNull(components);
+         assertEquals(1, components.size());
+         DeploymentUnit component = components.get(0);
+         assertEquals("Test", component.getName());
+         
+         assertBean("Test", ArrayList.class);
+         
+         assertNoResource("META-INF/test-beans.xml", getClass().getClassLoader());
+         ClassLoader unitCl = getClassLoader(unit);
+         assertGetResource("META-INF/test-beans.xml", unitCl);
+         ClassLoader beanCl = getClassLoader("Test");
+         assertGetResource("META-INF/test-beans.xml", beanCl);
+         
+         ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class);
+         assertEquals(unit.getSimpleName(), metaData.getName());
+         assertEquals(ExportAll.NON_EMPTY, metaData.getExportAll());
+         assertTrue(metaData.isImportAll());
+      }
+      finally
+      {
+         undeploy(unit);
+      }
    }
+   
+   public void testClassLoadingMetaData() throws Exception
+   {
+      VFSDeploymentUnit unit = assertDeploy("/bootstrap", "test-classloader");
+      try
+      {
+         ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class);
+         assertEquals("test-classloading", metaData.getName());
+         assertNull(metaData.getExportAll());
+         assertFalse(metaData.isImportAll());
+      }
+      finally
+      {
+         undeploy(unit);
+      }
+   }
 }

Modified: projects/microcontainer/trunk/deployers-vfs-spi/src/main/org/jboss/deployers/vfs/spi/deployer/SchemaResolverDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs-spi/src/main/org/jboss/deployers/vfs/spi/deployer/SchemaResolverDeployer.java	2008-02-21 11:35:39 UTC (rev 69993)
+++ projects/microcontainer/trunk/deployers-vfs-spi/src/main/org/jboss/deployers/vfs/spi/deployer/SchemaResolverDeployer.java	2008-02-21 11:37:18 UTC (rev 69994)
@@ -39,7 +39,7 @@
  * @author Scott.Stark at jboss.org
  * @version $Revision 1.1 $
  */
-public abstract class SchemaResolverDeployer<T> extends AbstractVFSParsingDeployer<T>
+public class SchemaResolverDeployer<T> extends AbstractVFSParsingDeployer<T>
 {
    /** Unmarshaller factory */
    private static final UnmarshallerFactory factory = UnmarshallerFactory.newInstance();




More information about the jboss-cvs-commits mailing list