All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jpattern.orm.datasource.DataSourceTransaction Maven / Gradle / Ivy

package com.jpattern.orm.datasource;

import com.jpattern.logger.ILogger;
import com.jpattern.orm.exception.OrmException;
import com.jpattern.orm.exception.OrmRollbackException;
import com.jpattern.orm.logger.OrmLogger;
import com.jpattern.orm.transaction.ITransaction;
import com.jpattern.orm.transaction.ITransactionDefinition;
import com.jpattern.orm.transaction.TransactionIsolation;

/**
 * 
 * @author Francesco Cina
 *
 * 18/giu/2011
 */
public class DataSourceTransaction implements ITransaction, IConnectionCaller {

	private ILogger logger;
	private final IConnection conn;
	private boolean isClosed = false;
	private boolean rollbackOnly = false;

	public DataSourceTransaction(DataSourceSessionProvider dataSourceSessionProvider, ITransactionDefinition transactionDefinition) {
		logger = OrmLogger.getOrmLogger(getClass());
		this.conn = dataSourceSessionProvider.getConnection(transactionDefinition.isReadOnly(), this);
		if (transactionDefinition.getIsolationLevel() != TransactionIsolation.DEFAULT) {
			conn.setTransactionIsolation(transactionDefinition.getIsolationLevel().getTransactionIsolation());
		}
	}

	@Override
	public void setRollbackOnly() throws OrmException {
		logger.debug("setRollbackOnly", "Transaction sets rollback only");
		rollbackOnly = true;
		conn.setRollbackOnly();
	}

	@Override
	public void rollback() throws OrmException {
		setRollbackOnly();
		try {
			if (!isClosed && !conn.isClosed()) {
				logger.debug("rollback", "Rollback called");
				conn.rollback();
			}
		} finally {
			conn.close(this);
			isClosed=true;
		}
	}

	@Override
	public void commit() throws OrmException, OrmRollbackException {
		if (rollbackOnly) {
			rollback();
			return;
		}
		try {
			if (!isClosed && !conn.isClosed()) {
				logger.debug("commit", "Commit called");
				conn.commit();
			}
		} finally {
			conn.close(this);
			isClosed=true;
		}
	}

	@Override
	public boolean isClosed() {
		return isClosed;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy