[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