[jboss-cvs] JBossAS SVN: r101973 - in projects/ejb3/components/singleton/trunk: aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/injection and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Mar 5 12:49:34 EST 2010
Author: jaikiran
Date: 2010-03-05 12:49:33 -0500 (Fri, 05 Mar 2010)
New Revision: 101973
Modified:
projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/AOPBasedInterceptorRegistry.java
projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/LegacySingletonBeanContext.java
projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/injection/PersistenceContextInjectorFactory.java
projects/ejb3/components/singleton/trunk/deployer/src/main/java/org/jboss/ejb3/singleton/deployer/SingletonContainerDeployer.java
projects/ejb3/components/singleton/trunk/impl/src/test/java/org/jboss/ejb3/singleton/impl/test/simple/unit/SimpleSingletonContainerTest.java
Log:
EJBTHREE-2010 Changes to interceptor injectors and interaction will EJBContainer
Modified: projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/AOPBasedInterceptorRegistry.java
===================================================================
--- projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/AOPBasedInterceptorRegistry.java 2010-03-05 17:03:57 UTC (rev 101972)
+++ projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/AOPBasedInterceptorRegistry.java 2010-03-05 17:49:33 UTC (rev 101973)
@@ -21,8 +21,9 @@
*/
package org.jboss.ejb3.singleton.aop.impl;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.jboss.aop.MethodInfo;
import org.jboss.ejb3.EJBContainerInvocation;
@@ -31,7 +32,6 @@
import org.jboss.ejb3.container.spi.EJBContainer;
import org.jboss.ejb3.container.spi.InterceptorRegistry;
import org.jboss.ejb3.container.spi.injection.InstanceInjector;
-import org.jboss.ejb3.interceptor.InterceptorInjector;
/**
* A AOP based implementation of the {@link InterceptorRegistry} for a
@@ -56,7 +56,7 @@
*/
private LegacySingletonBeanContext legacySingletonBeanContext;
- private List<InstanceInjector> interceptorInjectors = new ArrayList<InstanceInjector>();
+ private Map<Class<?>, List<InstanceInjector>> interceptorInjectors = new HashMap<Class<?>, List<InstanceInjector>>();
/**
* Construct an {@link AOPBasedInterceptorRegistry} for a {@link AOPBasedSingletonContainer}
@@ -154,7 +154,20 @@
// instance for any injectable fields
// TODO: Ideally, this should be split up into separate instantiation and injection
// calls.
- legacySingletonBeanContext.initialiseInterceptorInstances();
+ //legacySingletonBeanContext.initialiseInterceptorInstances();
+ for (Class<?> interceptorClass : this.getInterceptorClasses())
+ {
+ Object interceptorInstance = legacySingletonBeanContext.getInterceptor(interceptorClass);
+ List<InstanceInjector> injectors = this.interceptorInjectors.get(interceptorClass);
+ if (injectors == null)
+ {
+ continue;
+ }
+ for (InstanceInjector injector : injectors)
+ {
+ injector.inject(legacySingletonBeanContext, interceptorInstance);
+ }
+ }
// invoke post construct lifecycle on the bean/interceptor instances
this.aopBasedSingletonContainer.invokePostConstruct(legacySingletonBeanContext);
@@ -202,7 +215,7 @@
* @see org.jboss.ejb3.container.spi.InterceptorRegistry#getInterceptorInjectors()
*/
@Override
- public List<InstanceInjector> getInterceptorInjectors()
+ public Map<Class<?>, List<InstanceInjector>> getInterceptorInjectors()
{
return this.interceptorInjectors;
}
@@ -211,7 +224,7 @@
* @see org.jboss.ejb3.container.spi.InterceptorRegistry#setInterceptorInjectors(java.util.List)
*/
@Override
- public void setInterceptorInjectors(List<InstanceInjector> interceptorInjectors)
+ public void setInterceptorInjectors(Map<Class<?>, List<InstanceInjector>> interceptorInjectors)
{
this.interceptorInjectors = interceptorInjectors;
Modified: projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/LegacySingletonBeanContext.java
===================================================================
--- projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/LegacySingletonBeanContext.java 2010-03-05 17:03:57 UTC (rev 101972)
+++ projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/LegacySingletonBeanContext.java 2010-03-05 17:49:33 UTC (rev 101973)
@@ -21,9 +21,16 @@
*/
package org.jboss.ejb3.singleton.aop.impl;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import javax.ejb.EJBContext;
import org.jboss.ejb3.container.spi.BeanContext;
+import org.jboss.ejb3.container.spi.EJBContainer;
+import org.jboss.ejb3.container.spi.InterceptorRegistry;
import org.jboss.ejb3.session.SessionSpecBeanContext;
/**
@@ -33,14 +40,18 @@
* @version $Revision: $
*/
public class LegacySingletonBeanContext extends SessionSpecBeanContext<AOPBasedSingletonContainer>
+ implements
+ BeanContext
{
private AOPBasedSingletonContainer aopBasedSingletonContainer;
-
+
+ private Map<Class<?>, Object> interceptorInstances = new HashMap<Class<?>, Object>();
+
public LegacySingletonBeanContext(AOPBasedSingletonContainer aopBasedSingletonContainer, BeanContext context)
{
super(aopBasedSingletonContainer, context.getBeanInstance());
this.aopBasedSingletonContainer = aopBasedSingletonContainer;
-
+ this.initInterceptorInstances();
}
/* (non-Javadoc)
@@ -59,6 +70,73 @@
public void remove()
{
throw new RuntimeException("Not yet implemented");
+
+ }
+
+ private void initInterceptorInstances()
+ {
+ InterceptorRegistry interceptorRegistry = this.getEJBContainer().getInterceptorRegistry();
+ List<Class<?>> interceptorClasses = interceptorRegistry.getInterceptorClasses();
+ for (Class<?> interceptorClass : interceptorClasses)
+ {
+ try
+ {
+ Object interceptorInstance = interceptorClass.newInstance();
+ this.interceptorInstances.put(interceptorClass, interceptorInstance);
+ }
+ catch (InstantiationException ie)
+ {
+ throw new RuntimeException("Could not create interceptor instance for interceptor class "
+ + interceptorClass, ie);
+ }
+ catch (IllegalAccessException iae)
+ {
+ throw new RuntimeException("Could not create interceptor instance for interceptor class "
+ + interceptorClass, iae);
+ }
+
+ }
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.container.spi.BeanContext#getBeanInstance()
+ */
+ @Override
+ public Object getBeanInstance()
+ {
+ return this.getInstance();
+ }
+
+ /**
+ * @see org.jboss.ejb3.container.spi.BeanContext#getEJBContainer()
+ */
+ @Override
+ public EJBContainer getEJBContainer()
+ {
+ return this.aopBasedSingletonContainer;
+ }
+
+ /**
+ * @see org.jboss.ejb3.container.spi.BeanContext#getSessionId()
+ */
+ @Override
+ public Serializable getSessionId()
+ {
+ // singleton beans dont have sessions
+ return null;
+ }
+
+ /**
+ * @see org.jboss.ejb3.BaseContext#getInterceptor(java.lang.Class)
+ */
+ @Override
+ public Object getInterceptor(Class<?> interceptorClass) throws IllegalArgumentException
+ {
+ Object interceptor = this.interceptorInstances.get(interceptorClass);
+ if(interceptor == null)
+ throw new IllegalArgumentException("No interceptor found for " + interceptorClass + " in " + this);
+ return interceptor;
}
}
Modified: projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/injection/PersistenceContextInjectorFactory.java
===================================================================
--- projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/injection/PersistenceContextInjectorFactory.java 2010-03-05 17:03:57 UTC (rev 101972)
+++ projects/ejb3/components/singleton/trunk/aop-impl/src/main/java/org/jboss/ejb3/singleton/aop/impl/injection/PersistenceContextInjectorFactory.java 2010-03-05 17:49:33 UTC (rev 101973)
@@ -128,7 +128,10 @@
{
encName = "env/" + pc.name();
}
- return new PersistenceContextEncInjector(encName, puSupplier, pc.type());
+ PersistenceContextEncInjector pcENCInjector = new PersistenceContextEncInjector(encName, puSupplier, pc.type());
+ pcENCInjector.addDependency(puSupplier);
+
+ return pcENCInjector;
}
}
Modified: projects/ejb3/components/singleton/trunk/deployer/src/main/java/org/jboss/ejb3/singleton/deployer/SingletonContainerDeployer.java
===================================================================
--- projects/ejb3/components/singleton/trunk/deployer/src/main/java/org/jboss/ejb3/singleton/deployer/SingletonContainerDeployer.java 2010-03-05 17:03:57 UTC (rev 101972)
+++ projects/ejb3/components/singleton/trunk/deployer/src/main/java/org/jboss/ejb3/singleton/deployer/SingletonContainerDeployer.java 2010-03-05 17:49:33 UTC (rev 101973)
@@ -106,7 +106,7 @@
addOutput(BeanMetaData.class);
// ordering
- // addInput(Ejb3Deployment.class);
+ // addInput(Ejb3Deployment.class);
// new SPI based EJB3Deployment
addInput(EJB3Deployment.class);
addInput(AttachmentNames.PROCESSED_METADATA);
@@ -193,12 +193,12 @@
+ beanMetaData.getEjbName() + " in unit " + unit);
}
Hashtable<String, String> ctxProperties = new Hashtable<String, String>();
-// Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
-// if (ejb3Deployment == null)
-// {
-// throw new DeploymentException("Could not find " + Ejb3Deployment.class
-// + " for creating singleton container for bean " + sessionBean.getEjbName() + " in unit " + unit);
-// }
+ // Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
+ // if (ejb3Deployment == null)
+ // {
+ // throw new DeploymentException("Could not find " + Ejb3Deployment.class
+ // + " for creating singleton container for bean " + sessionBean.getEjbName() + " in unit " + unit);
+ // }
AOPBasedSingletonContainer singletonContainer = null;
try
{
@@ -213,7 +213,7 @@
// Register the newly created container with the new SPI based EJB3Deployment
this.registerWithEJB3Deployment(unit, singletonContainer);
-
+
String singletonContainerMCBeanName;
try
{
@@ -229,35 +229,53 @@
throw new DeploymentException("Could not obtain a container name for bean " + sessionBean.getName()
+ " in unit " + unit);
}
-
+
// Here we let the injection handlers to setup appropriate dependencies
// on the container and also create injectors for the container
singletonContainer.instantiated();
- // singletonContainer.processMetadata();
+ // singletonContainer.processMetadata();
List<InjectorFactory> injectorFactories = new ArrayList<InjectorFactory>();
- PersistenceContextInjectorFactory pcInjectorFactory = new PersistenceContextInjectorFactory(unit,this.persistenceUnitResolver);
+ PersistenceContextInjectorFactory pcInjectorFactory = new PersistenceContextInjectorFactory(unit,
+ this.persistenceUnitResolver);
injectorFactories.add(pcInjectorFactory);
- List<EJBContainerENCInjector> encInjectors = pcInjectorFactory.createENCInjectors(sessionBean);
- singletonContainer.setENCInjectors(encInjectors);
-
+ List<EJBContainerENCInjector> encInjectors = new ArrayList<EJBContainerENCInjector>();
+ encInjectors.addAll(pcInjectorFactory.createENCInjectors(sessionBean));
+ List<InstanceInjector> beanInstanceInjectors = new ArrayList<InstanceInjector>();
try
{
Class<?> beanClass = unit.getClassLoader().loadClass(sessionBean.getEjbClass());
- singletonContainer.setEJBInjectors(this.processMethodAnnotations(beanClass, new HashSet<Method>(),injectorFactories));
+ Set<Method> methods = this.getInjectableMethods(beanClass, new HashSet<Method>(), injectorFactories);
+ for (Method method : methods)
+ {
+ for (InjectorFactory injectorFactory : injectorFactories)
+ {
+ EJBContainerENCInjector encInjector = injectorFactory.createENCInjector(method);
+ if (encInjector != null)
+ {
+ encInjectors.add(encInjector);
+ }
+ InstanceInjector beanInstanceInjector = injectorFactory.createInstanceInjector(method);
+ if (beanInstanceInjector != null)
+ {
+ beanInstanceInjectors.add(beanInstanceInjector);
+ }
+ }
+ }
}
catch (ClassNotFoundException e)
{
throw new RuntimeException(e);
}
+ singletonContainer.setENCInjectors(encInjectors);
+ singletonContainer.setEJBInjectors(beanInstanceInjectors);
+
List<DependencyBasedInjector> allInjectors = new ArrayList<DependencyBasedInjector>();
allInjectors.addAll(singletonContainer.getEJBInjectors());
allInjectors.addAll(singletonContainer.getENCInjectors());
this.installContainer(unit, singletonContainerMCBeanName, singletonContainer, allInjectors);
-
-
// TODO: This shouldn't be here
SingletonBeanRemoteJNDIBinder jndiBinder = new SingletonBeanRemoteJNDIBinder(singletonContainer);
try
@@ -268,7 +286,7 @@
{
throw new DeploymentException(e);
}
-
+
}
/**
@@ -369,15 +387,15 @@
this.persistenceUnitResolver = puResolver;
}
- private List<InstanceInjector> processMethodAnnotations(Class<?> clazz, Set<Method> visitedMethods,
+ private Set<Method> getInjectableMethods(Class<?> clazz, Set<Method> visitedMethods,
List<InjectorFactory> injectorFactories)
{
if (clazz == null || clazz.equals(Object.class))
{
- return Collections.EMPTY_LIST;
+ return Collections.EMPTY_SET;
}
Method[] methods = clazz.getDeclaredMethods();
- List<InstanceInjector> injectors = new ArrayList<InstanceInjector>();
+ //List<InstanceInjector> injectors = new ArrayList<InstanceInjector>();
for (Method method : methods)
{
if (method.getParameterTypes().length != 1)
@@ -392,38 +410,43 @@
visitedMethods.add(method);
}
- if (injectorFactories != null)
- {
- for (InjectorFactory injectorFactory : injectorFactories)
- {
- injectors.add(injectorFactory.createInstanceInjector(method));
- }
- }
+ // if (injectorFactories != null)
+ // {
+ // for (InjectorFactory injectorFactory : injectorFactories)
+ // {
+ // InstanceInjector injector = injectorFactory.createInstanceInjector(method);
+ // if (injector != null)
+ // {
+ // injectors.add(injector);
+ // }
+ // }
+ // }
}
// recursion needs to come last as the method could be overriden and we don't want the overriding method to be ignored
- processMethodAnnotations(clazz.getSuperclass(), visitedMethods, injectorFactories);
-
- return injectors;
+ getInjectableMethods(clazz.getSuperclass(), visitedMethods, injectorFactories);
+
+ return visitedMethods;
}
-
-
- private void installContainer(DeploymentUnit unit, String containerMCBeanName, EJBContainer container, List<DependencyBasedInjector> injectors)
+
+ private void installContainer(DeploymentUnit unit, String containerMCBeanName, EJBContainer container,
+ List<DependencyBasedInjector> injectors)
{
- BeanMetaDataBuilder containerBMDBuilder = BeanMetaDataBuilder.createBuilder(containerMCBeanName, container.getClass().getName());
+ BeanMetaDataBuilder containerBMDBuilder = BeanMetaDataBuilder.createBuilder(containerMCBeanName, container
+ .getClass().getName());
containerBMDBuilder.setConstructorValue(container);
-
+
// TODO: Hack! (for quick testing)
JBossSessionBean31MetaData sessionbean = (JBossSessionBean31MetaData) container.getMetaData();
String localhome = sessionbean.getLocalHome();
- containerBMDBuilder.addSupply("Class:"+localhome);
+ containerBMDBuilder.addSupply("Class:" + localhome);
String remoteHome = sessionbean.getHome();
- containerBMDBuilder.addSupply("Class:"+remoteHome);
+ containerBMDBuilder.addSupply("Class:" + remoteHome);
BusinessLocalsMetaData businessLocals = sessionbean.getBusinessLocals();
if (businessLocals != null)
{
for (String businessLocal : businessLocals)
{
- containerBMDBuilder.addSupply("Class:"+businessLocal);
+ containerBMDBuilder.addSupply("Class:" + businessLocal);
}
}
BusinessRemotesMetaData businessRemotes = sessionbean.getBusinessRemotes();
@@ -431,23 +454,24 @@
{
for (String businessRemote : businessRemotes)
{
- containerBMDBuilder.addSupply("Class:"+businessRemote);
+ containerBMDBuilder.addSupply("Class:" + businessRemote);
}
}
-
+
for (DependencyBasedInjector injector : injectors)
{
- BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(injector.toString(), injector.getClass().getName());
+ BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(injector.toString(), injector.getClass()
+ .getName());
builder.setConstructorValue(injector);
for (String dep : injector.getDependencies())
{
builder.addDependency(dep);
}
unit.addAttachment(BeanMetaData.class + ":" + injector.toString(), builder.getBeanMetaData());
-
+
containerBMDBuilder.addDependency(injector.toString());
}
-
+
unit.addAttachment(BeanMetaData.class + ":" + containerMCBeanName, containerBMDBuilder.getBeanMetaData());
}
}
Modified: projects/ejb3/components/singleton/trunk/impl/src/test/java/org/jboss/ejb3/singleton/impl/test/simple/unit/SimpleSingletonContainerTest.java
===================================================================
--- projects/ejb3/components/singleton/trunk/impl/src/test/java/org/jboss/ejb3/singleton/impl/test/simple/unit/SimpleSingletonContainerTest.java 2010-03-05 17:03:57 UTC (rev 101972)
+++ projects/ejb3/components/singleton/trunk/impl/src/test/java/org/jboss/ejb3/singleton/impl/test/simple/unit/SimpleSingletonContainerTest.java 2010-03-05 17:49:33 UTC (rev 101973)
@@ -28,6 +28,7 @@
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.jboss.ejb3.container.spi.BeanContext;
import org.jboss.ejb3.container.spi.ContainerInvocation;
@@ -258,7 +259,7 @@
* @see org.jboss.ejb3.container.spi.InterceptorRegistry#getInterceptorInjectors()
*/
@Override
- public List<InstanceInjector> getInterceptorInjectors()
+ public Map<Class<?>, List<InstanceInjector>> getInterceptorInjectors()
{
// TODO Auto-generated method stub
return null;
@@ -268,7 +269,7 @@
* @see org.jboss.ejb3.container.spi.InterceptorRegistry#setInterceptorInjectors(java.util.List)
*/
@Override
- public void setInterceptorInjectors(List<InstanceInjector> interceptorInjectors)
+ public void setInterceptorInjectors(Map<Class<?>, List<InstanceInjector>> interceptorInjectors)
{
// TODO Auto-generated method stub
More information about the jboss-cvs-commits
mailing list