
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