@ -16,6 +16,7 @@
@@ -16,6 +16,7 @@
package org.springframework.orm.hibernate4 ;
import java.lang.reflect.Method ;
import java.sql.Connection ;
import javax.sql.DataSource ;
@ -44,6 +45,8 @@ import org.springframework.transaction.support.AbstractPlatformTransactionManage
@@ -44,6 +45,8 @@ import org.springframework.transaction.support.AbstractPlatformTransactionManage
import org.springframework.transaction.support.DefaultTransactionStatus ;
import org.springframework.transaction.support.ResourceTransactionManager ;
import org.springframework.transaction.support.TransactionSynchronizationManager ;
import org.springframework.util.ClassUtils ;
import org.springframework.util.ReflectionUtils ;
/ * *
* { @link org . springframework . transaction . PlatformTransactionManager }
@ -102,6 +105,15 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
@@ -102,6 +105,15 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
public class HibernateTransactionManager extends AbstractPlatformTransactionManager
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 DataSource dataSource ;
@ -281,7 +293,7 @@ public class HibernateTransactionManager extends AbstractPlatformTransactionMana
@@ -281,7 +293,7 @@ public class HibernateTransactionManager extends AbstractPlatformTransactionMana
}
else if ( this . hibernateManagedSession ) {
try {
Session session = getSessionFactory ( ) . getCurrentSession ( ) ;
Session session = ( Session ) ReflectionUtils . invokeMethod ( getCurrentSessionMethod , this . sessionFactory ) ;
if ( logger . isDebugEnabled ( ) ) {
logger . debug ( "Found Hibernate-managed Session [" + session + "] for Spring-managed transaction" ) ;
}