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/10/08 11:33:28 UTC

svn commit: r1395492 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb: BeanContext.java core/stateful/Cache.java core/stateful/SimpleCache.java core/stateful/StatefulContainer.java

Author: rmannibucau
Date: Mon Oct  8 09:33:27 2012
New Revision: 1395492

URL: http://svn.apache.org/viewvc?rev=1395492&view=rev
Log:
TOMEE-445 skip activate phase when stateful is requestscoped

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/core/stateful/Cache.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SimpleCache.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.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=1395492&r1=1395491&r2=1395492&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  8 09:33:27 2012
@@ -63,6 +63,7 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.spi.Bean;
 import javax.naming.Context;
 import javax.persistence.EntityManagerFactory;
+import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -1575,6 +1576,14 @@ public class BeanContext extends Deploym
         this.hidden = hidden;
     }
 
+    public Class<? extends Annotation> getScope() {
+        final CdiEjbBean<?> bean = get(CdiEjbBean.class);
+        if (bean != null) {
+            return bean.getScope();
+        }
+        return null;
+    }
+
     public void stop() {
         if (ejbTimerService != null && ejbTimerService instanceof EjbTimerServiceImpl) {
             ((EjbTimerServiceImpl) ejbTimerService).shutdownMe();

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Cache.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Cache.java?rev=1395492&r1=1395491&r2=1395492&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Cache.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Cache.java Mon Oct  8 09:33:27 2012
@@ -46,7 +46,7 @@ public interface Cache<K, V> {
      * @throws Exception if an entry is loaded and the afterLoad method threw an
      * exception
      */
-    V checkOut(K key) throws Exception;
+    V checkOut(K key, boolean loadIfNotFound) throws Exception;
 
     /**
      * Marks the entry available, so it can be accessed again.

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SimpleCache.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SimpleCache.java?rev=1395492&r1=1395491&r2=1395492&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SimpleCache.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SimpleCache.java Mon Oct  8 09:33:27 2012
@@ -226,11 +226,14 @@ public class SimpleCache<K, V> implement
         cache.put(key, entry);
     }
 
-    public V checkOut(K key) throws Exception {
+    public V checkOut(K key, boolean loadEntryIfNotFound) throws Exception {
         // attempt (up to 10 times) to obtain the entry from the cache
         for (int i = 0; i < 10; i++) {
             // find the entry
             Entry entry = cache.get(key);
+            if (!loadEntryIfNotFound && entry == null) {
+                return null;
+            }
             if (entry == null) {
                 entry = loadEntry(key);
                 if (entry == null) {

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1395492&r1=1395491&r2=1395492&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Mon Oct  8 09:33:27 2012
@@ -65,6 +65,7 @@ import javax.ejb.RemoveException;
 import javax.ejb.SessionBean;
 import javax.ejb.SessionContext;
 import javax.enterprise.context.Dependent;
+import javax.enterprise.context.RequestScoped;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.naming.Context;
@@ -501,7 +502,7 @@ public class StatefulContainer implement
             Method runMethod = null;
             try {
                 // Obtain instance
-                instance = obtainInstance(primKey, callContext, callMethod);
+                instance = obtainInstance(primKey, callContext, callMethod, beanContext.getScope() != RequestScoped.class);
 
                 // Resume previous Bean transaction if there was one
                 if (txPolicy instanceof BeanTransactionPolicy){
@@ -619,7 +620,7 @@ public class StatefulContainer implement
             Instance instance = null;
             try {
                 // Obtain instance
-                instance = obtainInstance(primKey, callContext, callMethod);
+                instance = obtainInstance(primKey, callContext, callMethod, true);
 
                 // Resume previous Bean transaction if there was one
                 if (txPolicy instanceof BeanTransactionPolicy){
@@ -665,7 +666,7 @@ public class StatefulContainer implement
         }
     }
 
-    private Instance obtainInstance(Object primaryKey, ThreadContext callContext, Method callMethod) throws OpenEJBException {
+    private Instance obtainInstance(Object primaryKey, ThreadContext callContext, Method callMethod, boolean checkOutIfNecessary) throws OpenEJBException {
         if (primaryKey == null) {
             throw new SystemException(new NullPointerException("Cannot obtain an instance of the stateful session bean with a null session id"));
         }
@@ -678,7 +679,7 @@ public class StatefulContainer implement
             instance = checkedOutInstances.get(primaryKey);
             if (instance == null) { // no need to check for extended persistence contexts it shouldn't happen
                 try {
-                    instance = cache.checkOut(primaryKey);
+                    instance = cache.checkOut(primaryKey, checkOutIfNecessary);
                 } catch (OpenEJBException e) {
                     throw e;
                 } catch (Exception e) {