public void rollback() throws IllegalStateException, SystemException { status = Status.STATUS_ROLLING_BACK; runXaResourceRollback(); status = Status.STATUS_ROLLEDBACK; if (connection != null) { try { connection.rollback(); connection.close(); } catch (SQLException sqle) { status = Status.STATUS_UNKNOWN; throw new SystemException(); } } if (synchronizations != null) { for (int i = 0; i < synchronizations.size(); i++) { Synchronization s = (Synchronization) synchronizations.get(i); if (s != null) s.afterCompletion(status); } } // status = Status.STATUS_NO_TRANSACTION; jtaTransactionManager.endCurrent(this); }
public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, IllegalStateException, SystemException { if (status == Status.STATUS_MARKED_ROLLBACK) { log.trace("on commit, status was marked for rollback-only"); rollback(); } else { status = Status.STATUS_PREPARING; if (synchronizations != null) { for (int i = 0; i < synchronizations.size(); i++) { Synchronization s = (Synchronization) synchronizations.get(i); s.beforeCompletion(); } } if (!runXaResourcePrepare()) { status = Status.STATUS_ROLLING_BACK; } else { status = Status.STATUS_PREPARED; } status = Status.STATUS_COMMITTING; if (connection != null) { try { connection.commit(); connectionProvider.closeConnection(connection); connection = null; } catch (SQLException sqle) { status = Status.STATUS_UNKNOWN; throw new SystemException(); } } runXaResourceCommitTx(); status = Status.STATUS_COMMITTED; if (synchronizations != null) { for (int i = 0; i < synchronizations.size(); i++) { Synchronization s = (Synchronization) synchronizations.get(i); s.afterCompletion(status); } } // status = Status.STATUS_NO_TRANSACTION; jtaTransactionManager.endCurrent(this); } }