Hi Devs,

While working on a client project I came across an issue where an exception
is thrown with a message that reads something like:

"Caused by: org.hibernate.HibernateException: Failed to commit or rollback
transaction. Root cause []"

Upon further digging I found the following code in XWikiHibernateBaseStore:

<code>
/**
 * Ends a transaction
*
* @param context
* @param commit should we commit or not
*/
public void endTransaction(XWikiContext context, boolean commit)
{
   endTransaction(context, commit, false);
}

/**
* Ends a transaction
*
* @param context
* @param commit should we commit or not
* @param withTransaction
* @throws HibernateException
*/
public void endTransaction(XWikiContext context, boolean commit, boolean
withTransaction) throws HibernateException
{
   Session session = null;
   try {
   session = getSession(context);
   Transaction transaction = getTransaction(context);
   setSession(null, context);
   setTransaction(null, context);

   if (transaction != null) {
       // We need to clean up our connection map first because the
connection will
       // be aggressively closed by hibernate 3.1 and more
       preCloseSession(session);

       if (log.isDebugEnabled()) {
           log.debug("Releasing hibernate transaction " + transaction);
       }
       if (commit) {
           transaction.commit();
       } else {
           transaction.rollback();
       }
   }
   } catch (HibernateException e) {
   // Ensure the original cause will get printed.
   throw new HibernateException("Failed to commit or rollback transaction.
Root cause ["
       + getExceptionMessage(e) + "]", e);
   } finally {
   closeSession(session);
   }
}
</code>

The problem i see in this code is that if preCloseSession(session) or
transaction.commit() throws an exception, there is no attempt made to
rollback the transaction. Normally a transaction rollback attempt should be
made within the catch block.

If I understand the basics of transaction handling, this code is wrong. I
want to discuss this with you (other developers) because I'm not an expert
in this subject :)

Thanks.

- Asiri
_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to