Author: rmannibucau
Date: Thu Jan 26 22:29:08 2012
New Revision: 1236419
URL: http://svn.apache.org/viewvc?rev=1236419&view=rev
Log:
OPENEJB-1759 don't use cache for stateful with extended persistence context -
keeping it in fresh cache of the container
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/PassivationWithEmTest.java
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=1236419&r1=1236418&r2=1236419&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
Thu Jan 26 22:29:08 2012
@@ -269,11 +269,13 @@ public class StatefulContainer implement
beanContext.setContainer(null);
beanContext.setContainerData(null);
- cache.removeAll(new CacheFilter<Instance>() {
- public boolean matches(Instance instance) {
- return beanContext == instance.beanContext;
- }
- });
+ if (!containsExtendedPersistenceContext(beanContext)) {
+ cache.removeAll(new CacheFilter<Instance>() {
+ public boolean matches(Instance instance) {
+ return beanContext == instance.beanContext;
+ }
+ });
+ }
}
public synchronized void deploy(BeanContext beanContext) throws
OpenEJBException {
@@ -350,6 +352,11 @@ public class StatefulContainer implement
}
}
+ private static boolean containsExtendedPersistenceContext(final
BeanContext beanContext) {
+ final Index<EntityManagerFactory, Map> factories =
beanContext.getExtendedEntityManagerFactories();
+ return factories != null && factories.size() > 0;
+ }
+
protected ProxyInfo createEJBObject(BeanContext beanContext, Method
callMethod, Object[] args, InterfaceType interfaceType) throws OpenEJBException
{
// generate a new primary key
Object primaryKey = newPrimaryKey();
@@ -396,7 +403,9 @@ public class StatefulContainer implement
}
// add to cache
- cache.add(primaryKey, instance);
+ if (!containsExtendedPersistenceContext(beanContext)) { // no
need to cache it it will never expires
+ cache.add(primaryKey, instance);
+ }
// instance starts checked-out
checkedOutInstances.put(primaryKey, instance);
@@ -661,7 +670,7 @@ public class StatefulContainer implement
Instance instance;
synchronized (primaryKey) {
instance = checkedOutInstances.get(primaryKey);
- if (instance == null) {
+ if (instance == null) { // no need to check for extended
persistence contexts it shouldn't happen
try {
instance = cache.checkOut(primaryKey);
} catch (OpenEJBException e) {
@@ -755,7 +764,7 @@ public class StatefulContainer implement
// no longer in use
instance.setInUse(false);
- if (instance.getTransaction() == null) {
+ if (instance.getTransaction() == null &&
!containsExtendedPersistenceContext(instance.beanContext)) {
synchronized (instance.primaryKey) {
// return to cache
cache.checkIn(instance.primaryKey);
@@ -773,7 +782,9 @@ public class StatefulContainer implement
}
Instance instance = checkedOutInstances.remove(primaryKey);
- cache.remove(primaryKey);
+ if (!containsExtendedPersistenceContext(instance.beanContext)) {
+ cache.remove(primaryKey);
+ }
if (null != instance && null != instance.creationalContext) {
instance.creationalContext.release();
Modified:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/PassivationWithEmTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/PassivationWithEmTest.java?rev=1236419&r1=1236418&r2=1236419&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/PassivationWithEmTest.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/PassivationWithEmTest.java
Thu Jan 26 22:29:08 2012
@@ -36,7 +36,6 @@ public class PassivationWithEmTest {
}
@Test
- @Ignore("not working - extended should be ignred")
public void passivationExtendedTest() throws Exception {
final PassivationWithEmExtended ejb = (PassivationWithEmExtended)
SystemInstance.get()
.getComponent(ContainerSystem.class).getJNDIContext()
@@ -59,7 +58,7 @@ public class PassivationWithEmTest {
public Persistence persistence() throws Exception {
PersistenceUnit unit = new PersistenceUnit("passivation-unit");
unit.addClass(MyEntity.class);
- unit.setTransactionType(TransactionType.RESOURCE_LOCAL);
+ unit.setTransactionType(TransactionType.JTA);
unit.setProperty("openjpa.jdbc.SynchronizeMappings",
"buildSchema(ForeignKeys=true)");
unit.getProperties().setProperty("openjpa.RuntimeUnenhancedClasses",
"supported");
unit.setExcludeUnlistedClasses(true);