fixed "hibernateManagedSession" mode to actually work against Hibernate 4.0 (SPR-8776)
This commit is contained in:
parent
48836e2ebb
commit
439b7750d4
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package org.springframework.orm.hibernate4;
|
package org.springframework.orm.hibernate4;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
@ -44,6 +45,8 @@ import org.springframework.transaction.support.AbstractPlatformTransactionManage
|
||||||
import org.springframework.transaction.support.DefaultTransactionStatus;
|
import org.springframework.transaction.support.DefaultTransactionStatus;
|
||||||
import org.springframework.transaction.support.ResourceTransactionManager;
|
import org.springframework.transaction.support.ResourceTransactionManager;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
|
import org.springframework.util.ClassUtils;
|
||||||
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link org.springframework.transaction.PlatformTransactionManager}
|
* {@link org.springframework.transaction.PlatformTransactionManager}
|
||||||
|
@ -102,6 +105,15 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
|
||||||
public class HibernateTransactionManager extends AbstractPlatformTransactionManager
|
public class HibernateTransactionManager extends AbstractPlatformTransactionManager
|
||||||
implements ResourceTransactionManager, InitializingBean {
|
implements ResourceTransactionManager, InitializingBean {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Method handle for the <code>SessionFactory.getCurrentSession()</code> method.
|
||||||
|
* The return value differs between Hibernate 3.x and 4.x; for cross-compilation purposes,
|
||||||
|
* we have to use reflection here as long as we keep compiling against Hibernate 3.x jars.
|
||||||
|
*/
|
||||||
|
private static final Method getCurrentSessionMethod =
|
||||||
|
ClassUtils.getMethod(SessionFactory.class, "getCurrentSession");
|
||||||
|
|
||||||
|
|
||||||
private SessionFactory sessionFactory;
|
private SessionFactory sessionFactory;
|
||||||
|
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
|
@ -281,7 +293,7 @@ public class HibernateTransactionManager extends AbstractPlatformTransactionMana
|
||||||
}
|
}
|
||||||
else if (this.hibernateManagedSession) {
|
else if (this.hibernateManagedSession) {
|
||||||
try {
|
try {
|
||||||
Session session = getSessionFactory().getCurrentSession();
|
Session session = (Session) ReflectionUtils.invokeMethod(getCurrentSessionMethod, this.sessionFactory);
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("Found Hibernate-managed Session [" + session + "] for Spring-managed transaction");
|
logger.debug("Found Hibernate-managed Session [" + session + "] for Spring-managed transaction");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue