[jboss-cvs] JBossAS SVN: r109679 - in projects/ejb3/trunk/core: src/main/java/org/jboss/ejb3 and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 2 18:45:02 EST 2010


Author: ALRubinger
Date: 2010-12-02 18:45:02 -0500 (Thu, 02 Dec 2010)
New Revision: 109679

Added:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/interceptor/
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/interceptor/AsynchronousInterceptorFactory.java
Modified:
   projects/ejb3/trunk/core/pom.xml
   projects/ejb3/trunk/core/src/main/resources/ejb3-interceptors-aop.xml
Log:
[EJBTHREE-1721] Use AsynchronousInterceptorFactory to make new @Asynchronous interceptor instances

Modified: projects/ejb3/trunk/core/pom.xml
===================================================================
--- projects/ejb3/trunk/core/pom.xml	2010-12-02 23:22:55 UTC (rev 109678)
+++ projects/ejb3/trunk/core/pom.xml	2010-12-02 23:45:02 UTC (rev 109679)
@@ -47,15 +47,16 @@
     <version.org.jboss.ejb3_timerservice-naming>1.0.0-alpha-2</version.org.jboss.ejb3_timerservice-naming>
     <version.org.jboss.ejb3.tx2>0.0.1</version.org.jboss.ejb3.tx2>
     <version.sun-jaxws>2.1.1</version.sun-jaxws>
-    <version.org.jboss.ejb3.async>1.0.0-alpha-5</version.org.jboss.ejb3.async>
     <version.org.jboss.ejb3.instantiator>1.0.0-alpha-3</version.org.jboss.ejb3.instantiator>
     <version.org.jboss.ejb3.effigy>0.1.0</version.org.jboss.ejb3.effigy>
     <version.org.jboss.ejb3.ejbref.resolver>1.0.0-alpha-1</version.org.jboss.ejb3.ejbref.resolver>
     <version.switchboard>1.0.0-alpha-9</version.switchboard>
     <version.org.jboss.injection>1.0.0-alpha-3</version.org.jboss.injection>
+    <version.org.jboss.metadata.ejb>2.0.0-alpha-24</version.org.jboss.metadata.ejb>
 
     <!-- EJB 3.1 stuff -->
     <version.org.jboss.ejb3.concurrency>1.0.0-alpha-3</version.org.jboss.ejb3.concurrency>
+    <version.org.jboss.ejb3.async>1.0.0-alpha-6-SNAPSHOT</version.org.jboss.ejb3.async>
   </properties>
 
   <!-- Build Information -->
@@ -234,6 +235,13 @@
         </exclusion>
       </exclusions>
     </dependency>
+    
+    <dependency>
+      <groupId>org.jboss.metadata</groupId>
+      <artifactId>jboss-metadata-ejb</artifactId>
+      <version>${version.org.jboss.metadata.ejb}</version>
+      <scope>provided</scope>
+    </dependency>
 
     <dependency>
       <groupId>org.jboss.logging</groupId>
@@ -472,9 +480,9 @@
       <groupId>org.jboss.ejb3.async</groupId>
       <artifactId>jboss-ejb3-async-impl</artifactId>
       <version>${version.org.jboss.ejb3.async}</version>
-      <scope>test</scope>
+      <scope>provided</scope>
     </dependency>
-
+    
     <!-- TODO: remove, an EJB 3.1 dependency -->
     <dependency>
       <groupId>org.jboss.ejb3.concurrency</groupId>

Added: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/interceptor/AsynchronousInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/interceptor/AsynchronousInterceptorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/async/impl/interceptor/AsynchronousInterceptorFactory.java	2010-12-02 23:45:02 UTC (rev 109679)
@@ -0,0 +1,97 @@
+package org.jboss.ejb3.async.impl.interceptor;
+
+import org.jboss.aop.Advisor;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.jboss.jndipolicy.plugins.JBossSessionPolicyDecorator;
+import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
+
+/**
+ * Factory to create instances of the {@link AsynchronousInterceptor}.
+ * Only to be used in scope PER_INSTANCE
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ */
+public class AsynchronousInterceptorFactory extends CreatePerClassAspectFactory
+{
+
+   // --------------------------------------------------------------------------------||
+   // Class Members ------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Logger
+    */
+   private static final Logger log = Logger.getLogger(AsynchronousInterceptorFactory.class);
+
+   // --------------------------------------------------------------------------------||
+   // Required Implementations -------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.aop.advice.AspectFactory#createPerClass(org.jboss.aop.Advisor)
+    */
+   public Object createPerClass(final Advisor advisor)
+   {
+      // Get the container
+      final EJBContainer container = EJBContainer.getEJBContainer(advisor);
+
+      // Get the metadata
+      final JBossEnterpriseBeanMetaData md = container.getXml();
+
+      // Create the interceptor instance
+      AsyncMethodsMetaData asyncMethods = this.getAsyncMethods(md);
+      if (asyncMethods == null)
+      {
+         asyncMethods = new AsyncMethodsMetaData();
+      }
+      final Object interceptor = new AsynchronousInterceptor(asyncMethods);
+      return interceptor;
+   }
+
+   /**
+    * Obtains the Asynchronous methods associated with this metadata, if any
+    * @param md
+    * @return
+    */
+   private AsyncMethodsMetaData getAsyncMethods(final JBossEnterpriseBeanMetaData md)
+   {
+      // Declare async methods
+      AsyncMethodsMetaData asyncMethods = new AsyncMethodsMetaData();
+
+      // If not a Session Bean, no async methods
+      if (!md.isSession())
+      {
+         return asyncMethods;
+      }
+
+      // Get the SessionBean metadata
+      JBossSessionBeanMetaData session = (JBossSessionBeanMetaData) md;
+      if (md instanceof JBossSessionPolicyDecorator)
+      {
+         // We obtain these as wrapped in a JNDI Policy decorator, so unwrap 'em
+         // HACK, but this is going to be throwaway code anyway when we rework EJB3 Core.
+         final JBossSessionPolicyDecorator<JBossSessionBeanMetaData> policy = (JBossSessionPolicyDecorator<JBossSessionBeanMetaData>) md;
+         // Get the real Session Bean Metadata
+         session = policy.getDelegate();
+      }
+
+      // If EJB 3.1
+      if (session instanceof JBossSessionBean31MetaData)
+      {
+         final JBossSessionBean31MetaData session31 = (JBossSessionBean31MetaData) session;
+         asyncMethods = session31.getAsyncMethods();
+         if (asyncMethods == null)
+         {
+            asyncMethods = new AsyncMethodsMetaData();
+         }
+      }
+
+      // Return
+      return asyncMethods;
+   }
+}

Modified: projects/ejb3/trunk/core/src/main/resources/ejb3-interceptors-aop.xml
===================================================================
--- projects/ejb3/trunk/core/src/main/resources/ejb3-interceptors-aop.xml	2010-12-02 23:22:55 UTC (rev 109678)
+++ projects/ejb3/trunk/core/src/main/resources/ejb3-interceptors-aop.xml	2010-12-02 23:45:02 UTC (rev 109679)
@@ -7,7 +7,7 @@
    <interceptor class="org.jboss.ejb3.remoting.IsLocalInterceptor" scope="PER_VM"/>
    <interceptor class="org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor" scope="PER_VM"/>
    <interceptor class="org.jboss.aspects.remoting.ClusterChooserInterceptor" scope="PER_VM"/>
-   <interceptor class="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" SCOPE="PER_VM" />
+   <interceptor factory="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" scope="PER_CLASS" />
    <interceptor class="org.jboss.ejb3.async.impl.interceptor.FutureSerializingInterceptor" scope="PER_VM"/>
    <interceptor name="CMConcurrency" factory="org.jboss.ejb3.concurrency.aop.interceptor.ContainerManagedConcurrencyInterceptorFactory" scope="PER_INSTANCE"/>
 
@@ -15,17 +15,12 @@
    <interceptor class="org.jboss.ejb3.interceptors.aop.NopInterceptor" scope="PER_VM"/>
    
    <stack name="LocalClientInterceptors">
+      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" />
       <!-- must have at least one interceptor for the stack to exist -->
       <interceptor-ref name="org.jboss.ejb3.interceptors.aop.NopInterceptor"/>
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
    </stack>
 
    <stack name="ServiceClientInterceptors">
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
       <interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.ejb3.security.client.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
@@ -33,9 +28,7 @@
    </stack>
 
    <stack name="StatelessSessionClientInterceptors">
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
+      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" />
       <interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.ejb3.security.client.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
@@ -43,9 +36,7 @@
    </stack>
 
    <stack name="StatefulSessionClientInterceptors">
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
+      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" />
       <interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.ejb3.security.client.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
@@ -53,9 +44,7 @@
    </stack>
 
    <stack name="ClusteredStatelessSessionClientInterceptors">
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
+      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" />
       <interceptor-ref name="org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.ejb3.security.client.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
@@ -64,9 +53,7 @@
    </stack>
 
    <stack name="ClusteredStatefulSessionClientInterceptors">
-      <!--
-      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptor" />
-      -->
+      <interceptor-ref name="org.jboss.ejb3.async.impl.interceptor.AsynchronousInterceptorFactory" />
       <interceptor-ref name="org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.ejb3.security.client.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>



More information about the jboss-cvs-commits mailing list