Author: rmannibucau
Date: Fri Mar 22 13:07:48 2013
New Revision: 1459751
URL: http://svn.apache.org/r1459751
Log:
OPENEJB-2009 is stateful is already destroyed don't remove it, it is done
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1459751&r1=1459750&r2=1459751&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
Fri Mar 22 13:07:48 2013
@@ -20,6 +20,9 @@ import org.apache.openejb.BeanContext;
import org.apache.openejb.BeanType;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.assembler.classic.ProxyInterfaceResolver;
+import org.apache.openejb.core.ivm.BaseEjbProxyHandler;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
+import org.apache.openejb.util.proxy.ProxyManager;
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.decorator.WebBeansDecorator;
@@ -42,6 +45,7 @@ import javax.enterprise.inject.spi.Sessi
import javax.persistence.EntityManager;
import java.io.Serializable;
import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.UndeclaredThrowableException;
@@ -354,7 +358,17 @@ public class CdiEjbBean<T> extends BaseE
private void destroyScopedStateful(final T instance, final
CreationalContext<T> cc) {
try {
instance.hashCode(); // force the instance to be created -
otherwise we'll miss @PreDestroy for instance
- } catch (NoSuchEJBException e) {
+ } catch (final NoSuchEJBException e) {
+ InvocationHandler handler = null;
+ if (LocalBeanProxyFactory.isProxy(instance.getClass())) {
+ handler = LocalBeanProxyFactory.getInvocationHandler(instance);
+ } else if (ProxyManager.isProxyClass(instance.getClass())) {
+ handler = ProxyManager.getInvocationHandler(instance);
+ }
+ if (BaseEjbProxyHandler.class.isInstance(handler) &&
!BaseEjbProxyHandler.class.cast(handler).isValid()) {
+ return; // already destroyed
+ } // else log error
+
logger.log(Level.FINE, "The stateful instance " + instance + "
can't be removed since it was invalidated", e);
return;
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?rev=1459751&r1=1459750&r2=1459751&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
Fri Mar 22 13:07:48 2013
@@ -329,6 +329,10 @@ public abstract class BaseEjbProxyHandle
}
}
+ public boolean isValid() {
+ return !isInvalidReference;
+ }
+
private void isValidReference(final Method method) throws
NoSuchObjectException {
if (isInvalidReference) {
if (interfaceType.isComponent() && interfaceType.isLocal()) {