[jboss-cvs] JBossAS SVN: r82996 - in projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop: classpool/ucl and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 16 15:22:36 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-16 15:22:36 -0500 (Fri, 16 Jan 2009)
New Revision: 82996

Modified:
   projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/JBoss4Integration.java
   projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
   projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapper.java
   projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapperMBean.java
Log:
[JBAOP-666] Add ability to select which classpool factory is used via MBean configuration

Modified: projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/JBoss4Integration.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/JBoss4Integration.java	2009-01-16 17:53:41 UTC (rev 82995)
+++ projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/JBoss4Integration.java	2009-01-16 20:22:36 UTC (rev 82996)
@@ -22,6 +22,7 @@
 package org.jboss.aop.asintegration.jboss4;
 
 import java.io.File;
+import java.lang.reflect.Constructor;
 
 import javassist.ClassPool;
 import javassist.scopedpool.ScopedClassPool;
@@ -40,7 +41,9 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.asintegration.JBossIntegration;
 import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
+import org.jboss.aop.classpool.ucl.JBossUclClassPoolFactory;
 import org.jboss.aop.domain.ScopedRepositoryClassLoaderDomain;
+import org.jboss.logging.Logger;
 import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
 import org.jboss.mx.loading.RepositoryClassLoader;
 import org.jboss.mx.server.ServerConstants;
@@ -69,6 +72,8 @@
  */
 public class JBoss4Integration implements JBossIntegration, ScopedClassPoolFactory
 {
+   Logger logger = Logger.getLogger(JBoss4Integration.class);
+   
    static {
       //pre-load necessary classes so that we avoid NoClassDefFoundErrors on JRockit when using the RepositoryClassloader hook
       //When AspectManager.translate() is called the first time, these classes have not been loaded yet, and this is what causes
@@ -82,6 +87,8 @@
    /** The delegate classpool factory */
    private ScopedClassPoolFactory delegateClassPoolFactory;
    
+   private String classPoolFactoryClassName; 
+   
    public boolean isValidClassLoader(ClassLoader loader)
    {
       if (!(loader instanceof RepositoryClassLoader)) return false;
@@ -93,9 +100,55 @@
       return new RepositoryClassLoaderScopingPolicy();
    }
 
+   public String getClassPoolFactoryClassName()
+   {
+      if (classPoolFactoryClassName == null)
+      {
+         classPoolFactoryClassName = JBossClassPoolFactory.class.getName();
+      }
+      return classPoolFactoryClassName;
+   }
+   
+   public void setClassPoolFactoryName(String classname)
+   {
+      if (delegateClassPoolFactory != null && classname != null)
+      {
+         logger.warn("Setting classpool factory name to " + classname + " will be ignored since the classpool factory has already been initialised");
+      }
+      else
+      {
+         this.classPoolFactoryClassName = classname;
+      }
+   }
+   
    public ScopedClassPoolFactory createScopedClassPoolFactory(File tmpDir) throws Exception
    {
-      delegateClassPoolFactory = new JBossClassPoolFactory(tmpDir);
+      String classname = getClassPoolFactoryClassName();
+      if (classname.equals(JBossClassPoolFactory.class.getName()))
+      {
+         delegateClassPoolFactory = new JBossClassPoolFactory(tmpDir);
+      }
+      else if (classname.equals(JBossUclClassPoolFactory.class.getName()))
+      {
+         delegateClassPoolFactory = new JBossUclClassPoolFactory(tmpDir);
+      }
+      else
+      {
+         logger.info("Unsupported class pool factory " + classname + " attempting to invoke via taking a (File)");
+         try
+         {
+            Class<?> clazz = Class.forName(classname);
+            Constructor<?> ctor = clazz.getConstructor(File.class);
+            delegateClassPoolFactory = (ScopedClassPoolFactory)ctor.newInstance(tmpDir);
+         }
+         catch(Exception e)
+         {
+            logger.warn("Error instantiating " + classname + " defaulting to " + JBossClassPoolFactory.class.getName());
+            classPoolFactoryClassName = classname;
+            createScopedClassPoolFactory(tmpDir);
+         }
+      }
+         
       return this;
    }
    

Modified: projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java	2009-01-16 17:53:41 UTC (rev 82995)
+++ projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java	2009-01-16 20:22:36 UTC (rev 82996)
@@ -89,7 +89,7 @@
          {
             if (mainDomain == null)
             {
-               domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, true);
+               domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, false);
                mainDomain = domain;
             }
             else

Modified: projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapper.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapper.java	2009-01-16 17:53:41 UTC (rev 82995)
+++ projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapper.java	2009-01-16 20:22:36 UTC (rev 82996)
@@ -37,5 +37,15 @@
    {
       return integration;
    }
+   
+   public void setClassPoolFactoryClassName(String classname)
+   {
+      integration.setClassPoolFactoryName(classname);
+   }
+   
+   public String getClassPoolFactoryClassName()
+   {
+      return integration.getClassPoolFactoryClassName();
+   }
 
 }

Modified: projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapperMBean.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapperMBean.java	2009-01-16 17:53:41 UTC (rev 82995)
+++ projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/deployment/JBoss4IntegrationWrapperMBean.java	2009-01-16 20:22:36 UTC (rev 82996)
@@ -28,5 +28,6 @@
  */
 public interface JBoss4IntegrationWrapperMBean extends JBossIntegrationWrapperMBean
 {
-   
+   void setClassPoolFactoryClassName(String classname);
+   String getClassPoolFactoryClassName();
 }




More information about the jboss-cvs-commits mailing list