[jboss-cvs] JBossAS SVN: r77073 - projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/test.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Aug 14 08:42:24 EDT 2008
Author: adrian at jboss.org
Date: 2008-08-14 08:42:24 -0400 (Thu, 14 Aug 2008)
New Revision: 77073
Added:
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/test/AnnotationRedeployTestCase.java
Log:
[JBMICROCONT-339] - Add a test for annotation not visible from the context classloader and getting redeployed
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/test/AnnotationRedeployTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/test/AnnotationRedeployTestCase.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/test/AnnotationRedeployTestCase.java 2008-08-14 12:42:24 UTC (rev 77073)
@@ -0,0 +1,191 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.test.kernel.deployment.test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import junit.framework.Test;
+
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.test.kernel.annotations.support.TestBean;
+import org.jboss.test.kernel.deployment.support.TestAnnotation1;
+
+/**
+ * AnnotationRedeployTestCase.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class AnnotationRedeployTestCase extends AbstractDeploymentTest
+{
+ public static Test suite()
+ {
+ return suite(AnnotationRedeployTestCase.class);
+ }
+
+ public AnnotationRedeployTestCase(String name) throws Throwable
+ {
+ super(name);
+ }
+
+ public void testAnnotationRedeploy() throws Throwable
+ {
+ BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("test", TestBean.class.getName());
+ builder.addAnnotation("@" + TestAnnotation1.class.getName());
+ ClassLoader cl = new TestClassLoader(getClass().getClassLoader());
+ builder.setClassLoader(cl);
+ BeanMetaData beanMetaData = builder.getBeanMetaData();
+ MetaData metaData = null;
+
+ TestClassLoader2 tcl = new TestClassLoader2(getClass().getClassLoader());
+ ClassLoader old = setContextClassLoader(tcl);
+ try
+ {
+
+ KernelControllerContext context = deploy(beanMetaData);
+ try
+ {
+ validate();
+ metaData = context.getScopeInfo().getMetaData();
+ assertNotNull(metaData);
+ Object annotation = metaData.getMetaData(TestAnnotation1.class.getName());
+ assertNotNull(annotation);
+ assertEquals(cl, annotation.getClass().getClassLoader());
+ }
+ finally
+ {
+ undeploy(context);
+ }
+
+ assertNull(metaData.getMetaData(TestAnnotation1.class.getName()));
+
+ cl = new TestClassLoader(getClass().getClassLoader());
+ beanMetaData.setClassLoader(new AbstractClassLoaderMetaData(new AbstractValueMetaData(cl)));
+ context = deploy(beanMetaData);
+ try
+ {
+ validate();
+ metaData = context.getScopeInfo().getMetaData();
+ assertNotNull(metaData);
+ Object annotation = metaData.getMetaData(TestAnnotation1.class.getName());
+ assertNotNull(annotation);
+ assertEquals(cl, annotation.getClass().getClassLoader());
+ }
+ finally
+ {
+ undeploy(context);
+ }
+ }
+ finally
+ {
+ setContextClassLoader(old);
+ }
+ }
+
+ protected ClassLoader setContextClassLoader(ClassLoader tcl)
+ {
+ SecurityManager sm = suspendSecurity();
+ try
+ {
+ Thread thread = Thread.currentThread();
+ ClassLoader result = thread.getContextClassLoader();
+ thread.setContextClassLoader(tcl);
+ return result;
+ }
+ finally
+ {
+ resumeSecurity(sm);
+ }
+ }
+
+
+ private class TestClassLoader extends ClassLoader
+ {
+ public TestClassLoader(ClassLoader parent)
+ {
+ super(parent);
+ }
+
+ protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
+ {
+ if (TestAnnotation1.class.getName().equals(name))
+ {
+ String resourceName = "/" + name.replace('.', '/') + ".class";
+ URL url = AnnotationRedeployTestCase.this.getResource(resourceName);
+ InputStream is = null;
+ byte[] bytes = null;
+ try
+ {
+ is = url.openStream();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ byte[] tmp = new byte[1024];
+ int read = 0;
+ while ( (read = is.read(tmp)) >= 0 )
+ baos.write(tmp, 0, read);
+ bytes = baos.toByteArray();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Unable to load class byte code " + name, e);
+ }
+ finally
+ {
+ try
+ {
+ if (is != null)
+ is.close();
+ }
+ catch (IOException e)
+ {
+ // pointless
+ }
+ }
+
+ return defineClass(name, bytes, 0, bytes.length);
+ }
+ return super.loadClass(name, resolve);
+ }
+ }
+
+ private class TestClassLoader2 extends ClassLoader
+ {
+ public TestClassLoader2(ClassLoader parent)
+ {
+ super(parent);
+ }
+
+ protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
+ {
+ if (TestAnnotation1.class.getName().equals(name))
+ throw new ClassNotFoundException("Masked: " + name);
+ return super.loadClass(name, resolve);
+ }
+ }
+}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list