[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