[jboss-cvs] JBossAS SVN: r102422 - in projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3: aop and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 15 13:47:02 EDT 2010


Author: jaikiran
Date: 2010-03-15 13:47:01 -0400 (Mon, 15 Mar 2010)
New Revision: 102422

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
Log:
EJBTHREE-2045 Refactored the BeanContainer to ask the EJBContainer for metadata based annotation repo, while initializing the advisor

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java	2010-03-15 17:44:56 UTC (rev 102421)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java	2010-03-15 17:47:01 UTC (rev 102422)
@@ -35,6 +35,7 @@
 import org.jboss.ejb3.annotation.SecurityDomain;
 import org.jboss.ejb3.annotation.defaults.PoolDefaults;
 import org.jboss.ejb3.aop.BeanContainer;
+import org.jboss.ejb3.cluster.metadata.ClusteredMetaDataBridge;
 import org.jboss.ejb3.common.spi.ErrorCodes;
 import org.jboss.ejb3.deployers.JBoss5DependencyPolicy;
 import org.jboss.ejb3.injection.InjectionInvocation;
@@ -43,17 +44,26 @@
 import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
 import org.jboss.ejb3.interceptors.direct.DirectContainer;
 import org.jboss.ejb3.interceptors.direct.IndirectContainer;
+import org.jboss.ejb3.interceptors.metadata.AdditiveBeanInterceptorMetaDataBridge;
+import org.jboss.ejb3.interceptors.metadata.InterceptorComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.interceptors.metadata.InterceptorMetaDataBridge;
 import org.jboss.ejb3.javaee.JavaEEComponent;
 import org.jboss.ejb3.javaee.JavaEEComponentHelper;
 import org.jboss.ejb3.javaee.JavaEEModule;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
 import org.jboss.ejb3.pool.Pool;
 import org.jboss.ejb3.pool.PoolFactory;
 import org.jboss.ejb3.pool.PoolFactoryRegistry;
 import org.jboss.ejb3.proxy.factory.ProxyFactoryHelper;
 import org.jboss.ejb3.security.SecurityDomainManager;
+import org.jboss.ejb3.security.bridge.RunAsMetaDataBridge;
+import org.jboss.ejb3.security.bridge.SecurityDomainMetaDataBridge;
 import org.jboss.ejb3.statistics.InvocationStatistics;
 import org.jboss.ejb3.timeout.spi.TimeoutMethodCallbackRequirements;
 import org.jboss.ejb3.tx.UserTransactionImpl;
+import org.jboss.ejb3.tx.metadata.ApplicationExceptionComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.tx.metadata.ApplicationExceptionMetaDataBridge;
 import org.jboss.ejb3.vfs.spi.VirtualFile;
 import org.jboss.ejb3.util.Service;
 import org.jboss.injection.*;
@@ -62,6 +72,7 @@
 import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.spec.ApplicationExceptionMetaData;
 import org.jboss.metadata.ejb.spec.InterceptorMetaData;
 import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
 import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
@@ -166,6 +177,11 @@
    
    protected boolean reinitialize = false;
    
+   /**
+    * Metadata based annotation repository
+    */
+   protected AnnotationRepositoryToMetaData metadataBasedAnnotationRepo;
+   
    private static final int TOTAL_PERMITS = Integer.MAX_VALUE;
    
    // To support clean startup/shutdown
@@ -1679,6 +1695,60 @@
       
    }
    
+   /**
+    * Returns {@link AnnotationRepositoryToMetaData} corresponding to this {@link EJBContainer}.
+    * The returned {@link AnnotationRepositoryToMetaData} is an implementation of {@link AnnotationRepository}
+    * and is capable of resolving annotations from bean metadata through the use of {@link MetaDataBridge}s
+    * 
+    * @return
+    */
+   public AnnotationRepositoryToMetaData getMetaDataBasedAnnotationRepository()
+   {
+      if (this.metadataBasedAnnotationRepo == null)
+      {
+         this.initMetaDataBasedAnnotationRepository();
+      }
+      return this.metadataBasedAnnotationRepo;
+   }
+   
+   /**
+    * Initializes the metadata based annotation repository {@link AnnotationRepositoryToMetaData},
+    * by setting up the appropriate metadata bridges.
+    * <p>
+    *   Individual containers can then override this method to add more metadata bridges to the
+    *   metadata based annotation repository. 
+    * </p>
+    * <p>
+    *   Sets up metadata bridges for
+    *   <ul>
+    *       <li>SecurityDomain metadata</li>
+    *       <li>RunAs metadata</li>
+    *       <li>Clustered metadata</li>
+    *       <li>ApplicationException metadata</li>
+    *       <li>Various metadata bridges for processing lifecycle callbacks on bean an interceptors</li> 
+    *   </ul>
+    * </p>
+    * 
+    */
+   protected void initMetaDataBasedAnnotationRepository()
+   {
+      this.metadataBasedAnnotationRepo = new AnnotationRepositoryToMetaData(this.beanClass, this.xml, name, this.classloader);
+      List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+      interceptorBridges.add(new InterceptorMetaDataBridge());
+      this.metadataBasedAnnotationRepo.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+      this.metadataBasedAnnotationRepo.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(this.beanClass, this.classloader, this.xml));
+      
+      List<MetaDataBridge<ApplicationExceptionMetaData>> appExceptionBridges = new ArrayList<MetaDataBridge<ApplicationExceptionMetaData>>();
+      appExceptionBridges.add(new ApplicationExceptionMetaDataBridge());
+      this.metadataBasedAnnotationRepo.addComponentMetaDataLoaderFactory(new ApplicationExceptionComponentMetaDataLoaderFactory(appExceptionBridges));
+      
+      this.metadataBasedAnnotationRepo.addMetaDataBridge(new RunAsMetaDataBridge());
+      //Add a security domain bridge
+      this.metadataBasedAnnotationRepo.addMetaDataBridge(new SecurityDomainMetaDataBridge());
+      // Ensure that an @Clustered annotation is visible to AOP if the XML says the bean is  clustered.
+      this.metadataBasedAnnotationRepo.addMetaDataBridge(new ClusteredMetaDataBridge());
+   }
+   
    public String toString()
    {
       return getObjectName().getCanonicalName();

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2010-03-15 17:44:56 UTC (rev 102421)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2010-03-15 17:47:01 UTC (rev 102422)
@@ -188,23 +188,9 @@
    
    public void initialize(String name, Domain domain, Class<? extends Object> beanClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
    {
-      AnnotationRepositoryToMetaData annotations = new AnnotationRepositoryToMetaData(beanClass, beanMetaData, name, classLoader);
-      List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
-      interceptorBridges.add(new InterceptorMetaDataBridge());
-      annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-      annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
+      AnnotationRepositoryToMetaData annotationRepo = this.container.getMetaDataBasedAnnotationRepository();
       
-      List<MetaDataBridge<ApplicationExceptionMetaData>> appExceptionBridges = new ArrayList<MetaDataBridge<ApplicationExceptionMetaData>>();
-      appExceptionBridges.add(new ApplicationExceptionMetaDataBridge());
-      annotations.addComponentMetaDataLoaderFactory(new ApplicationExceptionComponentMetaDataLoaderFactory(appExceptionBridges));
-      
-      annotations.addMetaDataBridge(new RunAsMetaDataBridge());
-      //Add a security domain bridge
-      annotations.addMetaDataBridge(new SecurityDomainMetaDataBridge());
-      // Ensure that an @Clustered annotation is visible to AOP if the XML says the bean is  clustered.
-      annotations.addMetaDataBridge(new ClusteredMetaDataBridge());
-      
-      initializeAdvisor(name, domain, beanClass, new CachingAnnotationRepository(annotations, classLoader));
+      initializeAdvisor(name, domain, beanClass, new CachingAnnotationRepository(annotationRepo, classLoader));
    }
 
    @Override




More information about the jboss-cvs-commits mailing list