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) {