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