[jboss-cvs] JBossAS SVN: r97700 - in projects/jboss-classpool/trunk/src: main/java/org/jboss/classpool/plugins/as and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Dec 10 12:51:01 EST 2009
Author: flavia.rainone at jboss.com
Date: 2009-12-10 12:51:01 -0500 (Thu, 10 Dec 2009)
New Revision: 97700
Added:
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/FilteredClassPool.java
Modified:
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java
Log:
[JBREFLECT-84] The exclusion mechanism simply replaces the src classpool*, defined by ScopedClassPoolRepositoryImpl, by a default classpool, defined in the AbstractClassPoolFactory.
* This is the classpool that was supposed to be used as the default class pool; that value cannot be overwritten because SCPRImpl has a private constructor and the src classpool is a protected field without accessors.
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java 2009-12-10 17:35:48 UTC (rev 97699)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java 2009-12-10 17:51:01 UTC (rev 97700)
@@ -113,6 +113,11 @@
return parent;
}
+ public void setParent(ClassPool parent)
+ {
+ this.parent = parent;
+ }
+
@Override
protected boolean isLocalClassLoaderResource(String classResourceName)
{
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java 2009-12-10 17:35:48 UTC (rev 97699)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java 2009-12-10 17:51:01 UTC (rev 97700)
@@ -43,7 +43,7 @@
//Make sure that we get classpools for all the parent classloaders
if (cl == null)
{
- return ClassPool.getDefault();
+ return defaultClassPool;
}
ClassLoader parent = SecurityActions.getParent(cl);
@@ -51,7 +51,10 @@
{
return repository.registerClassLoader(parent);
}
- return src;
+ else
+ {
+ return defaultClassPool;
+ }
}
public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java 2009-12-10 17:35:48 UTC (rev 97699)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java 2009-12-10 17:51:01 UTC (rev 97700)
@@ -34,7 +34,18 @@
*/
public class AbstractClassPoolFactory implements ScopedClassPoolFactory
{
-
+ protected static ClassPool defaultClassPool = ClassPool.getDefault();
+
+ /**
+ * Determines the ClassPool that will be used to map null class loaders
+ *
+ * @param defaultCP maps null class loaders
+ */
+ public static void setDefaultClassPool(ClassPool defaultCP)
+ {
+ defaultClassPool = defaultCP;
+ }
+
public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
{
return new AbstractClassPool(cl, src, repository);
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/FilteredClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/FilteredClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/FilteredClassPool.java 2009-12-10 17:51:01 UTC (rev 97700)
@@ -0,0 +1,269 @@
+/*
+ * 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.classpool.jbosscl.support;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.Iterator;
+
+import javassist.CannotCompileException;
+import javassist.ClassPath;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtMethod;
+import javassist.NotFoundException;
+
+import org.jboss.classloader.spi.filter.ClassFilter;
+
+/**
+ * Filters loading of support classes. For test purposes only.
+ *
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+
+public class FilteredClassPool extends ClassPool
+{
+ private ClassPool delegate;
+ private ClassFilter classFilter;
+
+ public FilteredClassPool(ClassPool delegate, ClassFilter classFilter)
+ {
+ this.delegate = delegate;
+ this.classFilter = classFilter;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "FilteredClassPool (" + delegate + ")";
+ }
+
+ @Override
+ public void importPackage(String packageName)
+ {
+ delegate.importPackage(packageName);
+ }
+
+ @Override
+ public void clearImportedPackages()
+ {
+ if (delegate != null)
+ {
+ delegate.clearImportedPackages();
+ }
+ else
+ {
+ super.clearImportedPackages();
+ }
+ }
+
+ @Override
+ public Iterator<?> getImportedPackages()
+ {
+ return delegate.getImportedPackages();
+ }
+
+ @Override
+ public void recordInvalidClassName(String name)
+ {
+ delegate.recordInvalidClassName(name);
+ }
+
+ @Override
+ public Object[] lookupCflow(String name)
+ {
+ return delegate.lookupCflow(name);
+ }
+
+ @Override
+ public CtClass getAndRename(String orgName, String newName) throws NotFoundException
+ {
+ return delegate.getAndRename(orgName, newName);
+ }
+
+ @Override
+ public CtClass get(String classname) throws NotFoundException
+ {
+ if (classFilter.matchesClassName(classname))
+ {
+ return delegate.get(classname);
+ }
+ throw new NotFoundException(classname);
+ }
+
+ @Override
+ public CtClass getCtClass(String classname) throws NotFoundException
+ {
+ if (classFilter.matchesClassName(classname))
+ {
+ return delegate.getCtClass(classname);
+ }
+ throw new NotFoundException(classname);
+ }
+
+ @Override
+ public URL find(String classname)
+ {
+ if (classFilter.matchesClassName(classname))
+ {
+ return delegate.find(classname);
+ }
+ return null;
+ }
+
+ @Override
+ public CtClass[] get(String[] classnames) throws NotFoundException
+ {
+ for (String classname: classnames)
+ {
+ if (!classFilter.matchesClassName(classname))
+ throw new NotFoundException(classname);
+ }
+ return delegate.get(classnames);
+ }
+
+ @Override
+ public CtMethod getMethod(String classname, String methodname) throws NotFoundException
+ {
+ if (classFilter.matchesClassName(classname))
+ {
+ return delegate.getMethod(classname, methodname);
+ }
+ throw new NotFoundException(classname);
+ }
+
+ @Override
+ public CtClass makeClass(InputStream classfile) throws IOException, RuntimeException
+ {
+ return delegate.makeClass(classfile);
+ }
+
+ @Override
+ public CtClass makeClass(InputStream classfile, boolean ifNotFrozen)
+ throws IOException, RuntimeException
+ {
+ return delegate.makeClass(classfile, ifNotFrozen);
+ }
+
+ @Override
+ public CtClass makeClassIfNew(InputStream classfile) throws IOException, RuntimeException
+ {
+ return delegate.makeClassIfNew(classfile);
+ }
+
+ @Override
+ public CtClass makeClass(String classname) throws RuntimeException
+ {
+ return delegate.makeClass(classname);
+ }
+
+ @Override
+ public synchronized CtClass makeClass(String classname, CtClass superclass)
+ throws RuntimeException
+ {
+ return delegate.makeClass(classname, superclass);
+ }
+
+ @Override
+ public CtClass makeInterface(String name) throws RuntimeException
+ {
+ return delegate.makeInterface(name);
+ }
+
+ @Override
+ public synchronized CtClass makeInterface(String name, CtClass superclass)
+ throws RuntimeException
+ {
+ return delegate.makeInterface(name, superclass);
+ }
+
+ @Override
+ public ClassPath appendSystemPath()
+ {
+ return delegate.appendSystemPath();
+ }
+
+ @Override
+ public ClassPath insertClassPath(ClassPath cp)
+ {
+ return delegate.insertClassPath(cp);
+ }
+
+ @Override
+ public ClassPath appendClassPath(ClassPath cp)
+ {
+ return delegate.appendClassPath(cp);
+ }
+
+ @Override
+ public ClassPath insertClassPath(String pathname) throws NotFoundException
+ {
+ return delegate.insertClassPath(pathname);
+ }
+
+ @Override
+ public ClassPath appendClassPath(String pathname) throws NotFoundException
+ {
+ return delegate.appendClassPath(pathname);
+ }
+
+ @Override
+ public void removeClassPath(ClassPath cp)
+ {
+ delegate.removeClassPath(cp);
+ }
+
+ @Override
+ public void appendPathList(String pathlist) throws NotFoundException
+ {
+ delegate.appendPathList(pathlist);
+ }
+
+ @Override
+ public Class<?> toClass(CtClass clazz) throws CannotCompileException
+ {
+ return delegate.toClass(clazz);
+ }
+
+ @Override
+ public ClassLoader getClassLoader()
+ {
+ return delegate.getClassLoader();
+ }
+
+ @Override
+ @SuppressWarnings("deprecation")
+ public Class<?> toClass(CtClass ct, ClassLoader loader) throws CannotCompileException
+ {
+ return delegate.toClass(ct, loader);
+ }
+
+ @Override
+ public Class<?> toClass(CtClass ct, ClassLoader loader, ProtectionDomain domain)
+ throws CannotCompileException
+ {
+ return delegate.toClass(ct, loader, domain);
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/FilteredClassPool.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java 2009-12-10 17:35:48 UTC (rev 97699)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java 2009-12-10 17:51:01 UTC (rev 97700)
@@ -1,28 +1,30 @@
/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, 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.
-*/
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, 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.classpool.jbosscl.test;
import java.net.URL;
+import javassist.ClassPool;
+
import javax.management.MBeanServer;
import org.jboss.classloader.plugins.ClassLoaderUtils;
@@ -33,6 +35,7 @@
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.classpool.jbosscl.support.FilteredClassPool;
import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
import org.jboss.xb.binding.resolver.MutableSchemaResolver;
import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
@@ -47,6 +50,8 @@
{
@SuppressWarnings("unused")
private static ParentPolicy parentPolicy;
+ @SuppressWarnings("unused")
+ private static ClassPool defaultClassPool;
private MainDeployerImpl mainDeployer;
@@ -91,6 +96,8 @@
};
parentPolicy = new ParentPolicy(classFilter, ClassFilter.NOTHING, "BEFORE");
+
+ defaultClassPool = new FilteredClassPool(ClassPool.getDefault(), classFilter);
}
public JBossClClassPoolTestDelegate(Class<?> clazz) throws Exception
@@ -119,6 +126,7 @@
//ClassLoaderSystem system = getBean("ClassLoaderSystem", ControllerState.INSTALLED, ClassLoaderSystem.class);
//ClassLoaderDomain domain = system.getDefaultDomain();
//domain.setParentPolicy(parentPolicy);
+ //AbstractClassPoolFactory.setDefaultClassPool(defaultClassPool);
super.deploy();
}
More information about the jboss-cvs-commits
mailing list