[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