[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