You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ma...@apache.org on 2007/04/04 14:26:22 UTC

svn commit: r525501 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb: ./ core/mdb/

Author: manugeorge
Date: Wed Apr  4 05:26:20 2007
New Revision: 525501

URL: http://svn.apache.org/viewvc?view=rev&rev=525501
Log:
For Jiras OPENEJB-532 and OPENEJB-533
Wiring in LifeCycle and onMessage interceptor support

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?view=diff&rev=525501&r1=525500&r2=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java Wed Apr  4 05:26:20 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb;
 
+import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.timer.EjbTimerService;
 
 import java.lang.reflect.Method;
@@ -110,6 +111,8 @@
     public List<Method> getPrePassivate();
 
     public List<Injection> getInjections();
+    
+    public List<InterceptorData> getMethodInterceptors(Method method);
 
     public void setContainer(Container container);
 

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java?view=diff&rev=525501&r1=525500&r2=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java Wed Apr  4 05:26:20 2007
@@ -20,6 +20,7 @@
 import org.apache.openejb.ApplicationException;
 import org.apache.openejb.SystemException;
 import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.mdb.Instance;
 
 import javax.ejb.EJBException;
 import javax.resource.spi.ApplicationServerInternalException;
@@ -308,7 +309,7 @@
         try {
             container.release(deployment, instance);
         } finally {
-            instanceFactory.freeInstance(instance, false);
+            instanceFactory.freeInstance((Instance)instance, false);
             instance = null;
         }
     }

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java?view=auto&rev=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java Wed Apr  4 05:26:20 2007
@@ -0,0 +1,18 @@
+package org.apache.openejb.core.mdb;
+
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Instance {
+    public final Object bean;
+    public final Map<String,Object> interceptors;
+
+    public Instance(Object bean, Map<String, Object> interceptors) {
+        this.bean = bean;
+        this.interceptors = interceptors;
+    }
+}

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?view=diff&rev=525501&r1=525500&r2=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java Wed Apr  4 05:26:20 2007
@@ -27,6 +27,9 @@
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.interceptor.InterceptorData;
+import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.mdb.Instance;
 import org.apache.openejb.core.transaction.TransactionContainer;
 import org.apache.openejb.core.transaction.TransactionContext;
 import org.apache.openejb.core.transaction.TransactionPolicy;
@@ -44,6 +47,7 @@
 import javax.resource.spi.UnavailableException;
 import javax.resource.ResourceException;
 import java.lang.reflect.Method;
+import java.util.List;
 import java.util.Map;
 import java.util.Arrays;
 import java.util.concurrent.ConcurrentMap;
@@ -310,8 +314,11 @@
     }
 
     private Object _invoke(Object instance, Method runMethod, Object [] args, DeploymentInfo deploymentInfo, MdbCallContext mdbCallContext) throws SystemException, ApplicationException {
+        Object returnValue = null;
         try {
-            Object returnValue = runMethod.invoke(instance, args);
+            List<InterceptorData> interceptors = deploymentInfo.getMethodInterceptors(runMethod);
+            InterceptorStack interceptorStack = new InterceptorStack(((Instance)instance).bean, runMethod, Operation.BUSINESS, interceptors, ((Instance)instance).interceptors);
+            returnValue = interceptorStack.invoke(args);            
             return returnValue;
         } catch (java.lang.reflect.InvocationTargetException ite) {// handle exceptions thrown by enterprise bean
             if (!isApplicationException(deploymentInfo, ite.getTargetException())) {
@@ -372,7 +379,7 @@
                 logger.error("error while releasing message endpoint", e);
             } finally {
                 EndpointFactory endpointFactory = (EndpointFactory) deployInfo.getContainerData();
-                endpointFactory.getInstanceFactory().freeInstance(instance, false);
+                endpointFactory.getInstanceFactory().freeInstance((Instance)instance, false);
                 ThreadContext.exit(mdbCallContext.oldCallContext);
             }
         }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java?view=diff&rev=525501&r1=525500&r2=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java Wed Apr  4 05:26:20 2007
@@ -213,6 +213,8 @@
     static {
         states[Operation.INJECTION.ordinal()] = new InjectionMdbState();
         states[Operation.CREATE.ordinal()] = new LifecycleMdbState();
+        states[Operation.POST_CONSTRUCT.ordinal()] = new LifecycleMdbState();
+        states[Operation.PRE_DESTROY.ordinal()] = new LifecycleMdbState();
         states[Operation.BUSINESS.ordinal()] = new BusinessTimeoutMdbState();
         states[Operation.TIMEOUT.ordinal()] = new BusinessTimeoutMdbState();
     }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?view=diff&rev=525501&r1=525500&r2=525501
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java Wed Apr  4 05:26:20 2007
@@ -23,6 +23,7 @@
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.mdb.Instance;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.Injection;
 import org.apache.openejb.util.Logger;
@@ -132,8 +133,8 @@
      * @param bean the bean instance to free
      * @param ignoredInstanceCount
      */
-    public void freeInstance(Object bean, boolean ignoredInstanceCount) {
-        if (bean == null) throw new NullPointerException("bean is null");
+    public void freeInstance(Instance instance, boolean ignoredInstanceCount) {
+        if (instance == null) throw new NullPointerException("bean is null");
 
         // decrement the instance count
         if (!ignoredInstanceCount) {
@@ -149,17 +150,12 @@
             // call post destroy method
             callContext.setCurrentOperation(Operation.PRE_DESTROY);
             callContext.setCurrentAllowedStates(MdbContext.getStates());
-
-            Method remove = bean instanceof MessageDrivenBean ? MessageDrivenBean.class.getMethod("ejbRemove"): null;
-
-            List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
-            ArrayList interceptorDatas = new ArrayList(); // TODO
-            HashMap interceptorInstances = new HashMap(); // TODO
-            InterceptorStack interceptorStack = new InterceptorStack(bean, remove, Operation.PRE_DESTROY, interceptorDatas, interceptorInstances);
-
+            Method remove = instance.bean instanceof MessageDrivenBean ? MessageDrivenBean.class.getMethod("ejbRemove"): null;
+            List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();           
+            InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, callbackInterceptors, instance.interceptors);
             interceptorStack.invoke();
         } catch (Throwable re) {
-            MdbInstanceFactory.logger.error("The bean instance " + bean + " threw a system exception:" + re, re);
+            MdbInstanceFactory.logger.error("The bean instance " + instance.bean + " threw a system exception:" + re, re);
         } finally {
             callContext.setCurrentOperation(originalOperation);
             callContext.setCurrentAllowedStates(originalAllowedStates);
@@ -237,7 +233,7 @@
 
             // TODO: We need to keep these somehwere
             interceptorInstances.put(beanClass.getName(), bean);
-
+            Instance instance = new Instance(bean,interceptorInstances);
             try {
                 callContext.setCurrentOperation(Operation.POST_CONSTRUCT);
                 callContext.setCurrentAllowedStates(MdbContext.getStates());
@@ -261,7 +257,7 @@
                 throw e;
             }
 
-            return bean;
+            return instance;
         } catch (Throwable e) {
             if (e instanceof java.lang.reflect.InvocationTargetException) {
                 e = ((java.lang.reflect.InvocationTargetException) e).getTargetException();