[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