diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java index 52b416617..a607ffb40 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java @@ -2,11 +2,13 @@ package com.avaje.ebeaninternal.server.transaction; import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.config.ServerConfig; +import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebeaninternal.api.SpiTransaction; import com.avaje.ebeaninternal.server.cluster.ClusterManager; import com.avaje.ebeaninternal.server.core.BootupClasses; import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; +import javax.sql.DataSource; import java.sql.Connection; /** @@ -29,4 +31,23 @@ public class ExplicitTransactionManager extends TransactionManager { return new ExplicitJdbcTransaction(prefix + id, explicit, c, this); } + /** + * Override the initalise of OnQueryOnly with the intention not to use CLOSE with ExplicitJdbcTransaction. + */ + @Override + protected DatabasePlatform.OnQueryOnly initOnQueryOnly(DatabasePlatform.OnQueryOnly dbPlatformOnQueryOnly, DataSource ds) { + + // first check for a system property 'override' + String systemPropertyValue = System.getProperty("ebean.transaction.onqueryonly"); + if (systemPropertyValue != null) { + return DatabasePlatform.OnQueryOnly.valueOf(systemPropertyValue.trim().toUpperCase()); + } + + if (DatabasePlatform.OnQueryOnly.CLOSE.equals(dbPlatformOnQueryOnly)) { + // Not using OnQueryOnly.CLOSE with ExplicitJdbcTransaction + return DatabasePlatform.OnQueryOnly.ROLLBACK; + } + // default to rollback if not defined on the platform + return dbPlatformOnQueryOnly == null ? DatabasePlatform.OnQueryOnly.ROLLBACK : dbPlatformOnQueryOnly; + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java index c382b4003..b7e7e3b50 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java @@ -164,7 +164,7 @@ public class TransactionManager { * just for queries do need to be committed or rollback after the query. *

*/ - private OnQueryOnly initOnQueryOnly(OnQueryOnly dbPlatformOnQueryOnly, DataSource ds) { + protected OnQueryOnly initOnQueryOnly(OnQueryOnly dbPlatformOnQueryOnly, DataSource ds) { // first check for a system property 'override' String systemPropertyValue = System.getProperty("ebean.transaction.onqueryonly"); @@ -190,7 +190,7 @@ public class TransactionManager { /** * Return true if the isolation level is read committed. */ - private boolean isReadCommittedIsolation(DataSource ds) { + protected boolean isReadCommittedIsolation(DataSource ds) { if (DbOffline.isSet()) { return true;