[jboss-cvs] JBossAS SVN: r103194 - in projects/kernel/trunk/kernel/src/test: java/org/jboss/test/kernel/dependency/test and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Mar 29 14:18:00 EDT 2010
Author: kabir.khan at jboss.com
Date: 2010-03-29 14:17:58 -0400 (Mon, 29 Mar 2010)
New Revision: 103194
Added:
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java
projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml
Modified:
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java
Log:
[JBKERNEL-114] Rework test to understand classloading better when creating classpools
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java 2010-03-29 18:17:58 UTC (rev 103194)
@@ -0,0 +1,99 @@
+/*
+* 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.kernel.dependency.support;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import javassist.ClassPool;
+import javassist.LoaderClassPath;
+
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl;
+import org.jboss.reflect.plugins.javassist.classpool.ClassPoolFactory;
+
+/**
+ * ClassPoolFactory which works as a in/uncallback listener for classloaders
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolFactoryImpl implements ClassPoolFactory
+{
+ private Map<ClassLoader, ClassPool> pools = new WeakHashMap<ClassLoader, ClassPool>();
+
+ private ClassPoolFactory factory;
+
+ @Install
+ public void addClassLoader(ClassLoader loader)
+ {
+ ClassPool pool = new ClassLoaderAwareClassPool(ClassPool.getDefault(), loader);
+ pool.childFirstLookup = true;
+ pool.appendClassPath(new LoaderClassPath(loader));
+ pools.put(loader, pool);
+ }
+
+ @Uninstall
+ public void removeClassLoader(ClassLoader loader)
+ {
+ pools.remove(loader);
+ }
+
+ public ClassPool getPoolForLoader(ClassLoader classLoader)
+ {
+ ClassPool pool = pools.get(classLoader);
+ if (pool != null)
+ return pool;
+ return ClassPool.getDefault();
+ }
+
+ public void start()
+ {
+ factory = JavassistTypeInfoFactoryImpl.getPoolFactory();
+ JavassistTypeInfoFactoryImpl.setPoolFactory(this);
+ }
+
+ public void stop()
+ {
+ if (factory != null)
+ JavassistTypeInfoFactoryImpl.setPoolFactory(factory);
+ }
+
+ private static class ClassLoaderAwareClassPool extends ClassPool
+ {
+ ClassLoader cl;
+ public ClassLoaderAwareClassPool(ClassPool parent, ClassLoader cl)
+ {
+ super(parent);
+ this.cl = cl;
+ childFirstLookup = true;
+ appendClassPath(new LoaderClassPath(cl));
+ }
+
+ public ClassLoader getClassLoader()
+ {
+ return cl;
+ }
+ }
+
+}
\ No newline at end of file
Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java 2010-03-29 18:05:11 UTC (rev 103193)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java 2010-03-29 18:17:58 UTC (rev 103194)
@@ -225,6 +225,7 @@
{
constructorClassLoaderReinstall();
+ assertInstall(4, "ClassPoolFactory");
assertInstall(3, "URL");
ControllerContext clCtx = assertInstall(0, "VFSClassLoader");
ControllerContext bean1Ctx = assertInstall(1, "VFSBean1");
@@ -320,7 +321,10 @@
AbstractConstructorMetaData cmd = new AbstractConstructorMetaData();
metaData2.setConstructor(cmd);
cmd.setParameters(constructor2);
+
+ AbstractBeanMetaData metaData4 = new AbstractBeanMetaData("ClassPoolFactory",
+ "org.jboss.test.kernel.dependency.support.ClassPoolFactoryImpl");
- setBeanMetaDatas(new BeanMetaData[] { metaData0, metaData1, metaData2, metaData3 });
+ setBeanMetaDatas(new BeanMetaData[] { metaData0, metaData1, metaData2, metaData3, metaData4});
}
}
\ No newline at end of file
Added: projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml 2010-03-29 18:17:58 UTC (rev 103194)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="ClassPoolFactory" class="org.jboss.test.kernel.dependency.support.ClassPoolFactoryImpl"/>
+</deployment>
More information about the jboss-cvs-commits
mailing list