package org.tests.transaction; import io.ebean.BaseTestCase; import io.ebean.Database; import io.ebean.DatabaseFactory; import io.ebean.Query; import io.ebean.Transaction; import io.ebean.annotation.ForPlatform; import io.ebean.annotation.Platform; import io.ebean.config.DatabaseConfig; import io.ebean.config.properties.PropertiesLoader; import io.ebean.datasource.DataSourceConfig; import io.ebean.datasource.DataSourcePool; import io.ebean.datasource.pool.ConnectionPool; import org.junit.Test; import org.tests.model.basic.UTDetail; import org.tests.model.basic.UTMaster; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class TestAutoCommitDataSource extends BaseTestCase { @ForPlatform({Platform.H2, Platform.POSTGRES}) @Test public void test() throws SQLException { Properties properties = PropertiesLoader.load(); DataSourceConfig dsConfig = new DataSourceConfig(); dsConfig.loadSettings(properties, "h2autocommit");//"pg" dsConfig.setAutoCommit(true); DataSourcePool pool = new ConnectionPool("h2autocommit", dsConfig); Connection connection = pool.getConnection(); assertTrue(connection.getAutoCommit()); connection.close(); DatabaseConfig config = new DatabaseConfig(); config.setName("h2autocommit"); config.loadFromProperties(); config.setDataSource(pool); config.setDefaultServer(false); config.setRegister(false); config.addClass(UTMaster.class); config.addClass(UTDetail.class); config.setDdlGenerate(true); config.setDdlRun(true); config.setDdlExtra(false); config.setAutoCommitMode(true); Database database = DatabaseFactory.create(config); Query query = database.find(UTMaster.class); List details = query.findList(); assertEquals(0, details.size()); UTMaster bean1 = new UTMaster("one1"); UTMaster bean2 = new UTMaster("two2"); UTMaster bean3 = new UTMaster("three3"); // use a different transaction to do final query check try (Transaction otherTxn = database.createTransaction()) { try (Transaction txn = database.beginTransaction()) { assertTrue(txn.getConnection().getAutoCommit()); database.save(bean1); database.save(bean2); details = database.find(UTMaster.class) .usingTransaction(otherTxn) .findList(); assertEquals(2, details.size()); database.save(bean3); txn.rollback(); } details = database.find(UTMaster.class) .usingTransaction(otherTxn) .findList(); assertEquals(3, details.size()); } } }