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();