UserTransaction.rollback() must not throw IllegalStateException if
getStatus()==STATUS_ROLLEDBACK
-------------------------------------------------------------------------------------------------
Key: JBAS-6663
URL:
https://jira.jboss.org/jira/browse/JBAS-6663
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Transaction Manager (Arjuna)
Affects Versions: JBossAS-4.2.3.GA
Reporter: Jörg von Frantzius
Assignee: Jonathan Halliday
When a timeout has occurred, UserTransaction.getStatus() returns STATUS_ROLLEDBACK.
Calling UserTransaction.rollback() at this point will throw the following
IllegalStateException:
java.lang.IllegalStateException:
[com.arjuna.ats.internal.jta.transaction.arjunacore.inactive]
[com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction is not
active!
at
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.rollbackAndDisassociate(TransactionImple.java:1473)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:163)
at
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.rollback(BaseTransactionManagerDelegate.java:126)
at
org.jboss.tm.usertx.client.ServerVMClientUserTransaction.rollback(ServerVMClientUserTransaction.java:148)
The JTA specification says about when UserTransaction.rollback() may throw
IllegalStateException: "IllegalStateException Thrown if the current thread is not
associated with a transaction." Since getStatus() does return STATUS_ROLLEDBACK (and
*not* STATUS_NO_TRANSACTION), the thread obviously still is associated with a transaction.
Apart from breaking the JTA contract, this effectively renders the UserTransaction useless
since begin() will also throw exception.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira