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 8b505c4604b22c01d398cda524d1c64a06739606..a5cb10f5014d1cd1f5c4e72b239a5a0396431d94 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 @@ -28,6 +28,7 @@ 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.TransactionDefinition; import org.springframework.transaction.support.DefaultTransactionStatus; import ch.systemsx.cisd.openbis.generic.server.dataaccess.HibernateInterceptorsWrapper; @@ -68,23 +69,32 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana WeakHashMap<Transaction, String> rolledBackTransactions = new WeakHashMap<Transaction, String>(); + // + // EoDSQL managed connection handling + // + @Override - protected Object doGetTransaction() + protected void doBegin(Object transaction, TransactionDefinition definition) { - final JdbcTransactionObjectSupport transaction = - (JdbcTransactionObjectSupport) super.doGetTransaction(); - if (isExistingTransaction(transaction) == false && transaction.hasConnectionHolder()) - { - QueryTool.setManagedDatabaseConnection(transaction.getConnectionHolder() - .getConnection()); - } - return transaction; + super.doBegin(transaction, definition); + QueryTool.setManagedDatabaseConnection(((JdbcTransactionObjectSupport) transaction) + .getConnectionHolder().getConnection()); } @Override - public void rollbackTransaction(Transaction tx, String reason) + protected void doCleanupAfterCompletion(Object transaction) { + super.doCleanupAfterCompletion(transaction); QueryTool.clearManagedDatabaseConnection(); + } + + // + // Exception handling for Hibernate session + // + + @Override + public void rollbackTransaction(Transaction tx, String reason) + { tx.rollback(); rolledBackTransactions.put(tx, reason); } @@ -102,7 +112,6 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana @Override protected void doCommit(DefaultTransactionStatus status) { - QueryTool.clearManagedDatabaseConnection(); Transaction tx = null; try { @@ -155,6 +164,7 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana SessionHolder sessionHolder = (SessionHolder) method.invoke(status.getTransaction()); return sessionHolder.getTransaction(); } + } interface IHibernateTransactionManagerCallback