[jboss-cvs] JBossAS SVN: r80246 - projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 30 10:07:38 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-10-30 10:07:38 -0400 (Thu, 30 Oct 2008)
New Revision: 80246
Modified:
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java
Log:
[JBMICROCONT-374] Better determination of classloader to use in DelegatingBeanAspectFactory
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java 2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java 2008-10-30 14:07:38 UTC (rev 80246)
@@ -338,9 +338,16 @@
protected void setDefinitionControllerContext(KernelControllerContext context)
{
- if (definition != null)
+ try
{
- ((GenericBeanAspectFactory)definition.getFactory()).setKernelControllerContext(context);
+ if (definition != null)
+ {
+ ((KernelControllerContextAware)definition.getFactory()).setKernelControllerContext(context);
+ }
}
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
}
}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java 2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java 2008-10-30 14:07:38 UTC (rev 80246)
@@ -25,8 +25,14 @@
import org.jboss.aop.InstanceAdvisor;
import org.jboss.aop.advice.AspectFactory;
import org.jboss.aop.joinpoint.Joinpoint;
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
import org.jboss.beans.metadata.plugins.factory.GenericBeanFactory;
+import org.jboss.beans.metadata.spi.ValueMetaData;
import org.jboss.beans.metadata.spi.factory.BeanFactory;
+import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
import org.jboss.logging.Logger;
import org.jboss.util.xml.XmlLoadable;
import org.w3c.dom.Element;
@@ -36,7 +42,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class DelegatingBeanAspectFactory implements AspectFactory
+public class DelegatingBeanAspectFactory implements AspectFactory, KernelControllerContextAware
{
private static final Logger log = Logger.getLogger(GenericBeanAspectFactory.class);
@@ -46,6 +52,8 @@
protected Element element;
+ protected KernelControllerContext context;
+
public DelegatingBeanAspectFactory(String name, BeanFactory factory, Element element)
{
this.name = name;
@@ -53,6 +61,17 @@
this.element = element;
}
+ public void setKernelControllerContext(KernelControllerContext context)
+ {
+ this.context = context;
+ }
+
+
+ public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+ {
+ this.context = null;
+ }
+
public void setBeanFactory(GenericBeanFactory factory)
{
this.factory = factory;
@@ -98,6 +117,13 @@
try
{
log.debug("Creating advice " + name);
+
+ //Add the ability to push the scoped classloader into the bean factory
+ if (((GenericBeanFactory)factory).getClassLoader() == null)
+ {
+ ((GenericBeanFactory)factory).setClassLoader(new PushedClassLoaderMetaData());
+ }
+
AspectFactory fac = (AspectFactory)factory.createBean();
if (fac instanceof XmlLoadable)
{
@@ -110,4 +136,45 @@
throw new RuntimeException(throwable);
}
}
+
+
+ /**
+ * Gets any classloaders for the thread
+ */
+ private class PushedClassLoaderMetaData extends AbstractClassLoaderMetaData
+ {
+ /** The serialVersionUID */
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ValueMetaData getClassLoader()
+ {
+ ClassLoader cl = null;
+ if (((GenericBeanFactory)factory).getClassLoader() == this && context != null)
+ {
+ try
+ {
+ cl = context.getClassLoader();
+ }
+ catch (Throwable t)
+ {
+ log.trace("Unable to retrieve classloader from " + context);
+ }
+ }
+
+ if (cl == null)
+ {
+ try
+ {
+ cl = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
+ }
+ catch (Throwable e)
+ {
+ log.trace("Unable to retrieve classloader from " + factory);
+ }
+ }
+
+ return new AbstractValueMetaData(cl);
+ }
+ }
}
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java 2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java 2008-10-30 14:07:38 UTC (rev 80246)
@@ -32,6 +32,7 @@
import org.jboss.beans.metadata.spi.factory.BeanFactory;
import org.jboss.kernel.plugins.config.Configurator;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
import org.jboss.logging.Logger;
import org.jboss.util.xml.XmlLoadable;
import org.w3c.dom.Element;
@@ -42,7 +43,7 @@
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision$
*/
-public class GenericBeanAspectFactory extends GenericAspectFactory
+public class GenericBeanAspectFactory extends GenericAspectFactory implements KernelControllerContextAware
{
private static final Logger log = Logger.getLogger(GenericBeanAspectFactory.class);
@@ -114,11 +115,17 @@
return doCreate(advisor, instanceAdvisor, jp);
}
- void setKernelControllerContext(KernelControllerContext context)
+ public void setKernelControllerContext(KernelControllerContext context)
{
this.context = context;
}
+
+ public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+ {
+ this.context = null;
+ }
+
protected Object doCreate(Advisor advisor, InstanceAdvisor instanceAdvisor, Joinpoint jp)
{
try
@@ -184,5 +191,4 @@
return new AbstractValueMetaData(cl);
}
}
-
}
More information about the jboss-cvs-commits
mailing list