[jboss-jira] [JBoss JIRA] Commented: (JBAS-4675) TransactionLocal cannot be locked when transaction is marked rollback only

Adrian Brock (JIRA) jira-events at lists.jboss.org
Thu Sep 6 09:01:12 EDT 2007


    [ http://jira.jboss.com/jira/browse/JBAS-4675?page=comments#action_12375649 ] 
            
Adrian Brock commented on JBAS-4675:
------------------------------------

It's ok to disallow transaction local delegate construction if the status is not ACTIVE,
similar to you cannot create the synchronization.

It's NOT ok to disallow retrieval of the delegate if it is was previouslly allowed to be constructed
(assuming the transaction hasn't completed - rollback, heuristic or otherwise).

It's virtually the same rules as transaction synchronization.
i.e. You register the synchronization, setRollbackOnly() and still the afterCompletion() gets invoked.

I imagine this also affects the TransactionSynchronizationRegistry implementation of JavaEE5
which has a simpler "TransactionLocal" put/getResource notion?

> TransactionLocal cannot be locked when transaction is marked rollback only
> --------------------------------------------------------------------------
>
>                 Key: JBAS-4675
>                 URL: http://jira.jboss.com/jira/browse/JBAS-4675
>             Project: JBoss Application Server
>          Issue Type: Sub-task
>      Security Level: Public(Everyone can see) 
>          Components: Transaction Manager
>    Affects Versions: JBossAS-4.2.1.GA
>            Reporter: Adrian Brock
>         Assigned To: Jonathan Halliday
>            Priority: Critical
>             Fix For:  JBossAS-5.0.0.Beta3, JBossAS-4.2.2.GA
>
>
> Related to the parent issue, the proposed fix does not work in jboss-4.2.x because
> the transaction local cannot be locked when the status is ABORT.
> Here's the stacktrace of the error:
> 2007-09-05 17:50:44,899 DEBUG [org.jboss.resource.connectionmanager.CachedConnectionManager] Unable to synchronize with transaction
> java.lang.IllegalStateException: Transaction not active
>         at com.arjuna.ats.jbossatx.TransactionLocalDelegateImpl.lock(TransactionLocalDelegateImpl.java:119)
>         at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.lock(BaseTransactionManagerDelegate.java:200)
>         at org.jboss.tm.TransactionLocal.lock(TransactionLocal.java:120)
>         at org.jboss.resource.connectionmanager.TransactionSynchronizer.lock(TransactionSynchronizer.java:223)
>         at org.jboss.resource.connectionmanager.CachedConnectionManager.getCloseConnectionSynchronization(CachedConnectionManager.java:550)
>         at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:315)
>         at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:622)
>         at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:266)
>         at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:129)
> You shouldn't be able to create a new delegate if the transaction is not active,
> but you should be able to retrieve existing ones.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list