[
https://issues.apache.org/jira/browse/OPENEJB-1049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Blevins closed OPENEJB-1049.
----------------------------------
Resolution: Fixed
Fix Version/s: 3.1.2
Assignee: David Blevins
We now track a transaction object in the Instance which is checked to prevent
access outside the transaction by other threads.
We also have some special logic that allows the client thread using the
instance in the transaction to bend the rules and invoke the bean as it wishes
(inside or outside the transaction it is controlling). In this scenario the
instance will still be considered in transaction stay locked to other threads.
$ svn ci
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java
Sending
container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java
Adding
container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulTransactionLockingTest.java
Transmitting file data ...........
Committed revision 819749.
> Stateful session cache management issue
> ---------------------------------------
>
> Key: OPENEJB-1049
> URL: https://issues.apache.org/jira/browse/OPENEJB-1049
> Project: OpenEJB
> Issue Type: Bug
> Affects Versions: 3.1.1
> Reporter: Jean-Louis MONTEIRO
> Assignee: David Blevins
> Fix For: 3.1.2
>
> Attachments: patch-SimpleCache.txt
>
> Original Estimate: 0h
> Remaining Estimate: 0h
>
> SimpleCache throws an error during check in.
> ERROR - An unexpected system exception occured while invoking the
> afterCompletion method on the SessionSynchronization object
> java.lang.IllegalStateException: The entry
> d52b726a0e36ac50:-3f5aa6df:122503062bb:-8000 is not checked-out
> at
> org.apache.openejb.core.stateful.SimpleCache.checkIn(SimpleCache.java:219)
> at
> org.apache.openejb.core.stateful.StatefulContainer.releaseInstance(StatefulContainer.java:659)
> at
> org.apache.openejb.core.stateful.StatefulContainer.access$2(StatefulContainer.java:646)
> at
> org.apache.openejb.core.stateful.StatefulContainer$SessionSynchronizationCoordinator.afterCompletion(StatefulContainer.java:940)
> at
> org.apache.openejb.core.transaction.JtaTransactionPolicy$1.afterCompletion(JtaTransactionPolicy.java:155)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:534)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:526)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:326)
> at
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
> at
> org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:291)
> at
> org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:71)
> at
> org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:74)
> at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:241)
> at
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:174)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:281)
> at $Proxy10.sum(Unknown Source)
> at
> org.superbiz.calculator.CalculatorTest.testCalculatorViaRemoteInterface(CalculatorTest.java:51)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at junit.framework.TestCase.runTest(TestCase.java:164)
> at junit.framework.TestCase.runBare(TestCase.java:130)
> at junit.framework.TestResult$1.protect(TestResult.java:110)
> at junit.framework.TestResult.runProtected(TestResult.java:128)
> at junit.framework.TestResult.run(TestResult.java:113)
> at junit.framework.TestCase.run(TestCase.java:120)
> at junit.framework.TestSuite.runTest(TestSuite.java:228)
> at junit.framework.TestSuite.run(TestSuite.java:223)
> at
> org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
> at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
> at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> WARN - Unexpected exception from afterCompletion; continuing
> java.lang.RuntimeException: An unexpected system exception occured while
> invoking the afterCompletion method on the SessionSynchronization object
> at
> org.apache.openejb.core.stateful.StatefulContainer$SessionSynchronizationCoordinator.afterCompletion(StatefulContainer.java:962)
> at
> org.apache.openejb.core.transaction.JtaTransactionPolicy$1.afterCompletion(JtaTransactionPolicy.java:155)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:534)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:526)
> at
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:326)
> at
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
> at
> org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:291)
> at
> org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:71)
> at
> org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:74)
> at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:241)
> at
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:174)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:281)
> at $Proxy10.sum(Unknown Source)
> at
> org.superbiz.calculator.CalculatorTest.testCalculatorViaRemoteInterface(CalculatorTest.java:51)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at junit.framework.TestCase.runTest(TestCase.java:164)
> at junit.framework.TestCase.runBare(TestCase.java:130)
> at junit.framework.TestResult$1.protect(TestResult.java:110)
> at junit.framework.TestResult.runProtected(TestResult.java:128)
> at junit.framework.TestResult.run(TestResult.java:113)
> at junit.framework.TestCase.run(TestCase.java:120)
> at junit.framework.TestSuite.runTest(TestSuite.java:228)
> at junit.framework.TestSuite.run(TestSuite.java:223)
> at
> org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
> at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
> at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.lang.IllegalStateException: The entry
> d52b726a0e36ac50:-3f5aa6df:122503062bb:-8000 is not checked-out
> at
> org.apache.openejb.core.stateful.SimpleCache.checkIn(SimpleCache.java:219)
> at
> org.apache.openejb.core.stateful.StatefulContainer.releaseInstance(StatefulContainer.java:659)
> at
> org.apache.openejb.core.stateful.StatefulContainer.access$2(StatefulContainer.java:646)
> at
> org.apache.openejb.core.stateful.StatefulContainer$SessionSynchronizationCoordinator.afterCompletion(StatefulContainer.java:940)
> ... 34 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.