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