__log.debug("Starting transaction.");
begin();
} catch (Exception ex) {
String errmsg = "Failed to start transaction.";
__log.error(errmsg, ex);
throw new ContextException(errmsg, ex);
}
boolean success = false;
try {
T retval = transaction.call();
success = true;
return retval;
} finally {
if (success)
try {
if (__log.isDebugEnabled())
__log.debug("Commiting transaction.");
commit();
} catch (Exception ex) {
String errmsg = "Failed to commit transaction.";
__log.error(errmsg, ex);
throw new ContextException(errmsg, ex);
}
else
try {
rollback();
} catch (Exception ex) {
String errmsg = "Failed to rollback transaction.";
__log.error(errmsg, ex);
throw new ContextException(errmsg, ex);
}
}
}