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();