[jbossseam-issues] [JBoss JIRA] Closed: (JBSEAM-2309) UserTransaction.commit() may throw a RollbackException(), in that case don't try to perform a UserTransaction.rollback()

Norman Richards (JIRA) jira-events at lists.jboss.org
Fri Mar 28 17:47:40 EDT 2008


     [ http://jira.jboss.com/jira/browse/JBSEAM-2309?page=all ]

Norman Richards closed JBSEAM-2309.
-----------------------------------

    Fix Version/s: 2.1.0.BETA1
       Resolution: Done

I've taken the suggestion of checking the TX status before rolling back.   The patch contained another suggestion for checking the tx status before a commit.  I'll need a bit of convincing on that one.  It seems to me that we would want an exception thrown in that case.  The patch looks like it would silently ignore the error.  I you think it's an important issue, please open a new JIRA for it and explain a bit more what is wrong.  


> UserTransaction.commit() may throw a RollbackException(), in that case don't try to perform a UserTransaction.rollback()
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JBSEAM-2309
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-2309
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.2.1.GA, 2.0.0.GA
>            Reporter: Denis Forveille
>         Assigned To: Norman Richards
>             Fix For: 2.0.2.CR1, 2.1.0.BETA1
>
>         Attachments: work-tx-rollback.diff
>
>
> In the org.jboss.seam.util.Work class, the call to userTransaction.commit() is surrounded by a try/catch(Exception). In the catch block, if an exception occurs during the commit, a UserTransaction.rollback() is attempted. This may fail as the UserTransaction.commit() may throw a RollbackException, and in that case the UserTransaction ihas already been rollbacked. So an attempt to perform a rollback on the UserTransaction result in an illegalstate exception. This happens to us when something goes wrong in the beforeCommit() methods and hibernate throws a StaleObjectStateException() 
> We use seam 1.2.1 + POJO + WebSphere v61.0..13
> The code could be something like this (Class Work.java):
>       try {
>          T result = work();
>          if (begin) {
>             log.debug("committing transaction");
>             userTransaction.commit();
>          }
>          return result;
>       } catch (Exception e) {
>          if (begin) {
>             log.debug("rolling back transaction");
>             if (userTransaction.getStatus() != STATUS_NO_TRANSACTION) {
>                userTransaction.rollback();
>             }
>          }
>          throw e;
> }
> Or the code could explicitely catch the RollbackException
> This could be applied at any place in the code when a UserTransaction.commit() is called.

-- 
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 seam-issues mailing list