Author: rmannibucau
Date: Mon Oct 15 13:17:47 2012
New Revision: 1398280

URL: http://svn.apache.org/viewvc?rev=1398280&view=rev
Log:
TOMEE-466 conversationscoped needs to be managed as requestscoped when not 
active

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.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=1398280&r1=1398279&r2=1398280&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 Oct 15 13:17:47 2012
@@ -59,7 +59,7 @@ import javax.ejb.LockType;
 import javax.ejb.MessageDrivenBean;
 import javax.ejb.TimedObject;
 import javax.ejb.Timer;
-import javax.enterprise.context.Dependent;
+import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
@@ -1603,13 +1603,35 @@ public class BeanContext extends Deploym
         }
 
         final Class<? extends Annotation> scope = bean.getScope();
-        isPassivatingScope =  !bm.isNormalScope(scope) || 
bm.isPassivatingScope(scope);
+        isPassivatingScope =  !bm.isNormalScope(scope) || 
(bm.isPassivatingScope(scope) && scope != ConversationScoped.class);
     }
 
     public boolean isPassivatingScope() {
+        final CdiEjbBean<?> bean = get(CdiEjbBean.class);
+        if (bean == null) {
+            return isPassivatingScope;
+        }
+
+        if (ConversationScoped.class == bean.getScope()) {
+            try {
+                return 
!bean.getWebBeansContext().getConversationManager().getConversationBeanReference().isTransient();
+            } catch (RuntimeException re) {
+                return false;
+            }
+        }
+
         return isPassivatingScope;
     }
 
+    private boolean isConversationScopedAndActive() {
+        try {
+            return ConversationScoped.class == bean.getScope()
+                && 
!bean.getWebBeansContext().getConversationManager().getConversationBeanReference().isTransient();
+        } catch (Exception e) { // error looking for transient state, let 
assume the conversation doesn't exist
+            return true;
+        }
+    }
+
     public void stop() {
         if (ejbTimerService != null && ejbTimerService instanceof 
EjbTimerServiceImpl) {
             ((EjbTimerServiceImpl) ejbTimerService).shutdownMe();


Reply via email to