package io.ebeaninternal.server.transaction; import io.ebeaninternal.api.SpiTransaction; import io.ebeaninternal.util.JdbcClose; import javax.persistence.PersistenceException; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; /** * Transaction factory when no multi-tenancy is used. */ class TransactionFactoryBasic extends TransactionFactory { private final DataSource dataSource; TransactionFactoryBasic(TransactionManager manager, DataSourceSupplier dataSourceSupplier) { super(manager); this.dataSource = dataSourceSupplier.getDataSource(); } @Override public SpiTransaction createQueryTransaction(Object tenantId) { return create(false); } @Override public SpiTransaction createTransaction(boolean explicit, int isolationLevel) { SpiTransaction t = create(explicit); return setIsolationLevel(t, explicit, isolationLevel); } private SpiTransaction create(boolean explicit) { Connection c = null; try { c = dataSource.getConnection(); return manager.createTransaction(explicit, c, counter.incrementAndGet()); } catch (PersistenceException ex) { JdbcClose.close(c); throw ex; } catch (SQLException ex) { throw new PersistenceException(ex); } } }