From 5bef24fc3f8ca0ea933ce9639ebc43243a88e796 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Mon, 12 Nov 2012 09:37:16 +0000
Subject: [PATCH] Make the transaction manager set the EoDSQL managed
 transaction.

SVN: 27566
---
 .../OpenBISHibernateTransactionManager.java   | 26 +++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java
index aa194994e98..8b505c4604b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java
@@ -20,9 +20,12 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.WeakHashMap;
 
+import net.lemnik.eodsql.QueryTool;
+
 import org.hibernate.Interceptor;
 import org.hibernate.Transaction;
 import org.springframework.beans.BeansException;
+import org.springframework.jdbc.datasource.JdbcTransactionObjectSupport;
 import org.springframework.orm.hibernate3.HibernateTransactionManager;
 import org.springframework.orm.hibernate3.SessionHolder;
 import org.springframework.transaction.support.DefaultTransactionStatus;
@@ -32,8 +35,12 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
 
 /**
- * The implementation of {@link HibernateTransactionManager}, that creates a new
- * EntityValidationInterceptor for each hibernate session.
+ * An implementation of {@link HibernateTransactionManager} that:
+ * <ul>
+ * <li>creates a new EntityValidationInterceptor for each hibernate session,</li>
+ * <li>injects (and clears) the connection of the current transaction as default managed database
+ * connection into EoDSQL.</li> </li>
+ * </ul>
  * 
  * @author Jakub Straszewski
  */
@@ -61,9 +68,23 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana
     WeakHashMap<Transaction, String> rolledBackTransactions =
             new WeakHashMap<Transaction, String>();
 
+    @Override
+    protected Object doGetTransaction()
+    {
+        final JdbcTransactionObjectSupport transaction =
+                (JdbcTransactionObjectSupport) super.doGetTransaction();
+        if (isExistingTransaction(transaction) == false && transaction.hasConnectionHolder())
+        {
+            QueryTool.setManagedDatabaseConnection(transaction.getConnectionHolder()
+                    .getConnection());
+        }
+        return transaction;
+    }
+
     @Override
     public void rollbackTransaction(Transaction tx, String reason)
     {
+        QueryTool.clearManagedDatabaseConnection();
         tx.rollback();
         rolledBackTransactions.put(tx, reason);
     }
@@ -81,6 +102,7 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana
     @Override
     protected void doCommit(DefaultTransactionStatus status)
     {
+        QueryTool.clearManagedDatabaseConnection();
         Transaction tx = null;
         try
         {
-- 
GitLab