Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Escobar2012-03-15 19:34:35 +0000
committerRyan D. Brooks2012-03-15 19:34:35 +0000
commit98fec2677d0d432d9140063125458b0a09d3901e (patch)
treea1d6741ae913fce33cb8e77247098c7516c2f5aa
parent7a5853079baae2e22ec54c85401dabdd3b4d1068 (diff)
downloadorg.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
-rw-r--r--plugins/org.eclipse.osee.database.schema/src/org/eclipse/osee/database/schema/DatabaseTxCallable.java2
-rw-r--r--plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/ConnectionHandler.java18
-rw-r--r--plugins/org.eclipse.osee.framework.database/src/org/eclipse/osee/framework/database/core/DatabaseTransactions.java27
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;
+ }
+ }
}

Back to the top