diff options
author | Roberto E. Escobar | 2012-03-15 19:34:35 +0000 |
---|---|---|
committer | Ryan D. Brooks | 2012-03-15 19:34:35 +0000 |
commit | 98fec2677d0d432d9140063125458b0a09d3901e (patch) | |
tree | a1d6741ae913fce33cb8e77247098c7516c2f5aa | |
parent | 7a5853079baae2e22ec54c85401dabdd3b4d1068 (diff) | |
download | org.eclipse.osee-98fec2677d0d432d9140063125458b0a09d3901e.tar.gz org.eclipse.osee-98fec2677d0d432d9140063125458b0a09d3901e.tar.xz org.eclipse.osee-98fec2677d0d432d9140063125458b0a09d3901e.zip |
refinement: Improve DatabaseTransactions
Ensure connection.destroy is called in DatabaseTransactions exception
section after a rollback even if rollback fails
Move deferConstraints method from ConnectionHandler to DatabaseTransactions
Pass database service into deferConstraints/DatabaseTransactions
3 files changed, 24 insertions, 23 deletions
diff --git a/plugins/org.eclipse.osee.database.schema/src/org/eclipse/osee/database/schema/DatabaseTxCallable.java b/plugins/org.eclipse.osee.database.schema/src/org/eclipse/osee/database/schema/DatabaseTxCallable.java index d8f4c5ab923..1f0a28050ea 100644 --- a/plugins/org.eclipse.osee.database.schema/src/org/eclipse/osee/database/schema/DatabaseTxCallable.java +++ b/plugins/org.eclipse.osee.database.schema/src/org/eclipse/osee/database/schema/DatabaseTxCallable.java @@ -37,7 +37,7 @@ public abstract class DatabaseTxCallable<T> extends DatabaseCallable<T> { OseeConnection connection = getDatabaseService().getConnection(); try { InternalTxWork work = new InternalTxWork(); - DatabaseTransactions.execute(connection, work); + DatabaseTransactions.execute(getDatabaseService(), connection, work); value = work.getResult(); } finally { connection.close(); diff --git a/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/ConnectionHandler.java b/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/ConnectionHandler.java index c39e5d80afa..e58e7ac2e12 100644 --- a/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/ConnectionHandler.java +++ b/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/ConnectionHandler.java @@ -28,7 +28,7 @@ import org.eclipse.osee.framework.database.internal.Activator; */ public final class ConnectionHandler { - private static IOseeDatabaseService getDatabase() throws OseeDataStoreException { + protected static IOseeDatabaseService getDatabase() throws OseeDataStoreException { return Activator.getInstance().getOseeDatabaseService(); } @@ -151,22 +151,6 @@ public final class ConnectionHandler { return getDatabase().runPreparedQueryFetchObject(connection, defaultValue, query, data); } - /** - * Cause constraint checking to be deferred until the end of the current transaction. - */ - public static void deferConstraintChecking(OseeConnection connection) throws OseeCoreException { - SupportedDatabase dbType = SupportedDatabase.getDatabaseType(connection.getMetaData()); - switch (dbType) { - case h2: - runPreparedUpdate(connection, "SET REFERENTIAL_INTEGRITY = FALSE"); - break; - default: - // NOTE: this must be a PreparedStatement to play correctly with DB Transactions. - runPreparedUpdate(connection, "SET CONSTRAINTS ALL DEFERRED"); - break; - } - } - public static DatabaseMetaData getMetaData() throws OseeCoreException { OseeConnection connection = getDatabase().getConnection(); try { diff --git a/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/DatabaseTransactions.java b/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/DatabaseTransactions.java index bf77cf23566..1c9433a2b0f 100644 --- a/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/DatabaseTransactions.java +++ b/plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/DatabaseTransactions.java @@ -13,6 +13,7 @@ package org.eclipse.osee.framework.database.core; import java.util.logging.Level; import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.exception.OseeExceptions; +import org.eclipse.osee.framework.database.IOseeDatabaseService; import org.eclipse.osee.framework.database.internal.Activator; import org.eclipse.osee.framework.logging.OseeLog; @@ -23,10 +24,10 @@ public final class DatabaseTransactions { } public static void execute(IDbTransactionWork dbWork) throws OseeCoreException { - execute(ConnectionHandler.getConnection(), dbWork); + execute(ConnectionHandler.getDatabase(), ConnectionHandler.getConnection(), dbWork); } - public static void execute(OseeConnection connection, IDbTransactionWork dbWork) throws OseeCoreException { + public static void execute(IOseeDatabaseService dbService, OseeConnection connection, IDbTransactionWork dbWork) throws OseeCoreException { boolean initialAutoCommit = true; Exception saveException = null; try { @@ -34,7 +35,7 @@ public final class DatabaseTransactions { initialAutoCommit = connection.getAutoCommit(); connection.setAutoCommit(false); - ConnectionHandler.deferConstraintChecking(connection); + deferConstraintChecking(dbService, connection); dbWork.handleTxWork(connection); connection.commit(); @@ -43,9 +44,12 @@ public final class DatabaseTransactions { saveException = ex; try { connection.rollback(); - connection.destroy(); } finally { - dbWork.handleTxException(ex); + try { + connection.destroy(); + } finally { + dbWork.handleTxException(ex); + } } } finally { try { @@ -69,4 +73,17 @@ public final class DatabaseTransactions { } } } + + private static void deferConstraintChecking(IOseeDatabaseService dbService, OseeConnection connection) throws OseeCoreException { + SupportedDatabase dbType = SupportedDatabase.getDatabaseType(connection.getMetaData()); + switch (dbType) { + case h2: + dbService.runPreparedUpdate(connection, "SET REFERENTIAL_INTEGRITY = FALSE"); + break; + default: + // NOTE: this must be a PreparedStatement to play correctly with DB Transactions. + dbService.runPreparedUpdate(connection, "SET CONSTRAINTS ALL DEFERRED"); + break; + } + } } |