[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