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

Denis Forveille (JIRA) jira-events at lists.jboss.org
Wed Nov 28 08:35:46 EST 2007


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: 2.0.0.GA, 1.2.1.GA
            Reporter: Denis Forveille


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