/* * This software is distributed under the terms of the FSF * Gnu Lesser General Public License (see lgpl.txt). * * This program is distributed WITHOUT ANY WARRANTY. See the * GNU General Public License for more details. */ package com.scooterframework.transaction; import javax.transaction.UserTransaction; import com.scooterframework.orm.sqldataexpress.connection.UserDatabaseConnection; import com.scooterframework.orm.sqldataexpress.exception.TransactionException; import com.scooterframework.orm.sqldataexpress.util.DAOUtil; /** * JtaTransaction class * * @author (Fei) John Chen */ public class JtaTransaction extends AbstractTransactionImpl { /** * Initialize JtaTransaction */ public JtaTransaction() { super(); transactionType = Transaction.JTA_TRANSACTION_TYPE; this.ut = TransactionUtil.lookupUserTransaction(); } /** * Initialize JtaTransaction by injecting an UserTransaction instance. */ public JtaTransaction(UserTransaction ut) { super(); if (ut == null) throw new IllegalArgumentException("Failed to create JtaTransaction: UserTransaction is null."); transactionType = Transaction.JTA_TRANSACTION_TYPE; this.ut = ut; //notify the TransactionStarter that transaction is not started automatically. if (TransactionUtil.isUserTransactionActive(ut)) { TransactionManagerUtil.getTransactionStarterType().setTransactionStarterType(null); } } /** * Start a transaction. */ public void begin() { try { super.begin(); ut.begin(); } catch(Exception ex) { throw new TransactionException("eroror in begin()", ex); } } /** * Commit a transaction. This is the end of the transaction. This method * also commits all JdbcConnections. * All resources are released. When this method completes, the thread is * no longer associated with a transaction. */ public void commit() { try { super.commit(); for (UserDatabaseConnection udc : connList) { if (UserDatabaseConnection.JDBC_CONNECTION.equals(udc.getConnectionType())) DAOUtil.commit(udc.getConnection()); } ut.commit(); bTransactionHasEnded = true; releaseResources(); } catch(Exception ex) { throw new TransactionException("eroror in commit()", ex); } } /** * Rollback a transaction. This method also rollback all JdbcConnections. * All resources are released. When this method completes, the thread is * no longer associated with a transaction. */ public void rollback() { try { super.rollback(); for (UserDatabaseConnection udc : connList) { if (UserDatabaseConnection.JDBC_CONNECTION.equals(udc.getConnectionType())) DAOUtil.rollback(udc.getConnection()); } ut.rollback(); releaseResources(); } catch(Exception ex) { throw new TransactionException("eroror in rollback()", ex); } } private UserTransaction ut; }