package io.ebeaninternal.server.transaction;
import io.ebean.util.JdbcClose;
import io.ebeaninternal.api.SpiTransaction;
import javax.persistence.PersistenceException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.concurrent.atomic.AtomicLong;
Creates transactions with implementations for basic mode and multi-tenancy mode.
/**
* Creates transactions with implementations for basic mode and multi-tenancy mode.
*/
abstract class TransactionFactory {
final AtomicLong counter = new AtomicLong(1000);
final TransactionManager manager;
TransactionFactory(TransactionManager manager) {
this.manager = manager;
}
Return a new query only transaction.
Params: - tenantId – The tenantId for lazy loading queries.
/**
* Return a new query only transaction.
*
* @param tenantId The tenantId for lazy loading queries.
*/
abstract SpiTransaction createQueryTransaction(Object tenantId);
Return a new transaction.
/**
* Return a new transaction.
*/
abstract SpiTransaction createTransaction(boolean explicit, int isolationLevel);
Set the Transaction Isolation level if required.
/**
* Set the Transaction Isolation level if required.
*/
SpiTransaction setIsolationLevel(SpiTransaction t, boolean explicit, int isolationLevel) {
if (isolationLevel > -1) {
Connection connection = t.getConnection();
try {
connection.setTransactionIsolation(isolationLevel);
} catch (SQLException e) {
JdbcClose.close(connection);
throw new PersistenceException(e);
}
}
if (explicit && manager.log().txn().isTrace()) {
manager.log().txn().trace(t.getLogPrefix() + "Begin");
}
return t;
}
}