You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/11/05 16:05:56 UTC

svn commit: r1405821 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/ main/java/org/apache/openejb/cdi/ main/java/org/apache/openejb/core/ivm/ test/java/org/apache/openejb/cdi/

Author: rmannibucau
Date: Mon Nov  5 15:05:55 2012
New Revision: 1405821

URL: http://svn.apache.org/viewvc?rev=1405821&view=rev
Log:
fix failling tck because of passivation on stateful

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1405821&r1=1405820&r2=1405821&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Mon Nov  5 15:05:55 2012
@@ -65,7 +65,9 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.spi.Bean;
 import javax.naming.Context;
 import javax.persistence.EntityManagerFactory;
+import java.io.Serializable;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -1600,6 +1602,12 @@ public class BeanContext extends Deploym
     }
 
     public void initIsPassivationScope() {
+        // CDI 6.6.4
+        if (BeanType.STATELESS.equals(componentType) || BeanType.SINGLETON.equals(componentType)) {
+            isPassivatingScope = false;
+            return;
+        }
+
         final BeanManagerImpl bm = moduleContext.getAppContext().getWebBeansContext().getBeanManagerImpl();
         if (!bm.isInUse()) {
             isPassivatingScope = true;

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1405821&r1=1405820&r2=1405821&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Mon Nov  5 15:05:55 2012
@@ -22,9 +22,14 @@ import org.apache.openejb.OpenEJBRuntime
 import org.apache.openejb.assembler.classic.ProxyInterfaceResolver;
 import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.component.WebBeansType;
+import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.decorator.WebBeansDecorator;
 import org.apache.webbeans.ejb.common.component.BaseEjbBean;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.intercept.InterceptorData;
+import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
+import org.apache.webbeans.logger.WebBeansLoggerFacade;
 
 import javax.ejb.NoSuchEJBException;
 import javax.ejb.Remove;
@@ -34,21 +39,25 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Typed;
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Decorator;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.SessionBeanType;
 import javax.persistence.EntityManager;
+import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.rmi.NoSuchObjectException;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
 
 public class CdiEjbBean<T> extends BaseEjbBean<T> {
     private final Map<Integer, Object> dependentSFSBToBeRemoved = new ConcurrentHashMap<Integer, Object>();
@@ -85,6 +94,42 @@ public class CdiEjbBean<T> extends BaseE
                 }
             }
         }
+
+        //Check for interceptors and decorators, copied from parent(s)
+        for (Decorator<?> dec : decorators) {
+            WebBeansDecorator<?> decorator = (WebBeansDecorator<?>) dec;
+            if (!decorator.isPassivationCapable()) {
+                throw new WebBeansConfigurationException(MessageFormat.format(
+                        WebBeansLoggerFacade.getTokenString(OWBLogConst.EXCEPT_0015), toString()));
+            } else {
+                decorator.validatePassivationDependencies();
+            }
+        }
+
+        for (InterceptorData interceptorData : interceptorStack) {
+            if (interceptorData.isDefinedWithWebBeansInterceptor()) {
+                WebBeansInterceptor<?> interceptor = (WebBeansInterceptor<?>) interceptorData.getWebBeansInterceptor();
+                if (!interceptor.isPassivationCapable()) {
+                    throw new WebBeansConfigurationException(MessageFormat.format(
+                            WebBeansLoggerFacade.getTokenString(OWBLogConst.EXCEPT_0016), toString()));
+                } else {
+                    interceptor.validatePassivationDependencies();
+                }
+            } else {
+                if (interceptorData.isDefinedInInterceptorClass()) {
+                    Class<?> interceptorClass = interceptorData.getInterceptorClass();
+                    if (!Serializable.class.isAssignableFrom(interceptorClass)) {
+                        throw new WebBeansConfigurationException(MessageFormat.format(
+                                WebBeansLoggerFacade.getTokenString(OWBLogConst.EXCEPT_0016), toString()));
+                    } else {
+                        if (!getWebBeansContext().getAnnotationManager().checkInjectionPointForInterceptorPassivation(interceptorClass)) {
+                            throw new WebBeansConfigurationException(MessageFormat.format(
+                                    WebBeansLoggerFacade.getTokenString(OWBLogConst.EXCEPT_0017), toString(), interceptorClass));
+                        }
+                    }
+                }
+            }
+        }
     }
 
     @Override
@@ -318,7 +363,12 @@ public class CdiEjbBean<T> extends BaseE
     }
 
     private void destroyScopedStateful(final T instance, final CreationalContext<T> cc) {
-        instance.hashCode(); // force the instance to be created - otherwise we'll miss @PreDestroy for instance
+        try {
+            instance.hashCode(); // force the instance to be created - otherwise we'll miss @PreDestroy for instance
+        } catch (NoSuchEJBException e) {
+            logger.log(Level.FINE, "The stateful instance " + instance + " can't be removed since it was invalidated", e);
+            return;
+        }
 
         Object ejbInstance = dependentSFSBToBeRemoved.remove(System.identityHashCode(instance));
         if (ejbInstance != null) {

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?rev=1405821&r1=1405820&r2=1405821&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Mon Nov  5 15:05:55 2012
@@ -311,7 +311,7 @@ public abstract class BaseEjbProxyHandle
             } else if (interfaceType.isComponent() || java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())) {
                 throw new NoSuchObjectException("reference is invalid");
             } else {
-                throw new NoSuchEJBException("reference is invalid");
+                throw new NoSuchEJBException("reference is invalid for " + deploymentID);
             }
         }
         if (!(Object.class.equals(method.getDeclaringClass())

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java?rev=1405821&r1=1405820&r2=1405821&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java Mon Nov  5 15:05:55 2012
@@ -38,7 +38,6 @@ import java.util.Properties;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 
 @RunWith(ApplicationComposer.class)
 public class ProducedExtendedEmTest {
@@ -90,7 +89,6 @@ public class ProducedExtendedEmTest {
         public String getDelegateClassName() {
             return em.getDelegate().getClass().getCanonicalName();
         }
-
     }
 
     @Inject