
io.ebeaninternal.server.transaction.JtaTransaction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ebean Show documentation
Show all versions of ebean Show documentation
composite of common runtime dependencies for all platforms
package io.ebeaninternal.server.transaction;
import javax.persistence.PersistenceException;
import javax.sql.DataSource;
import javax.transaction.Status;
import javax.transaction.UserTransaction;
import java.sql.SQLException;
/**
* Jta based transaction.
*/
public class JtaTransaction extends JdbcTransaction {
private final UserTransaction userTransaction;
private boolean commmitted;
private boolean newTransaction;
/**
* Create the JtaTransaction.
*/
public JtaTransaction(String id, boolean explicit, UserTransaction utx, DataSource ds, TransactionManager manager) {
super(id, explicit, null, manager);
userTransaction = utx;
try {
newTransaction = userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION;
if (newTransaction) {
userTransaction.begin();
}
} catch (Exception e) {
throw new PersistenceException(e);
}
try {
// Open JDBC Connection
this.connection = ds.getConnection();
if (connection == null) {
throw new PersistenceException("The DataSource returned a null connection.");
}
if (connection.getAutoCommit()) {
connection.setAutoCommit(false);
}
} catch (SQLException e) {
throw new PersistenceException(e);
}
}
/**
* Commit the transaction.
*/
public void commit() {
if (commmitted) {
throw new PersistenceException("This transaction has already been committed.");
}
try {
try {
if (newTransaction) {
userTransaction.commit();
}
notifyCommit();
} finally {
close();
}
} catch (Exception e) {
throw new PersistenceException(e);
}
commmitted = true;
}
public void rollback() {
rollback(null);
}
/**
* Rollback the transaction.
*/
public void rollback(Throwable e) {
if (!commmitted) {
try {
try {
if (userTransaction != null) {
if (newTransaction) {
userTransaction.rollback();
} else {
userTransaction.setRollbackOnly();
}
}
notifyRollback(e);
} finally {
closeConnection();
}
} catch (Exception ex) {
throw new PersistenceException(ex);
}
}
}
/**
* Close the underlying connection.
*/
private void closeConnection() throws SQLException {
if (connection != null) {
connection.close();
connection = null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy