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