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