[ 
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.

Reply via email to