HibernateTransactionManagerTests for Hibernate 3 covers currentSession() as well
Issue: SPR-9020
This commit is contained in:
@@ -23,7 +23,6 @@ import java.sql.Savepoint;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.hibernate.FlushMode;
|
import org.hibernate.FlushMode;
|
||||||
@@ -36,12 +35,11 @@ import org.hibernate.cache.NoCacheProvider;
|
|||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.classic.Session;
|
import org.hibernate.classic.Session;
|
||||||
import org.hibernate.dialect.HSQLDialect;
|
import org.hibernate.dialect.HSQLDialect;
|
||||||
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.exception.ConstraintViolationException;
|
import org.hibernate.exception.ConstraintViolationException;
|
||||||
import org.hibernate.exception.GenericJDBCException;
|
import org.hibernate.exception.GenericJDBCException;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import org.mockito.InOrder;
|
import org.mockito.InOrder;
|
||||||
|
|
||||||
import org.springframework.beans.factory.BeanFactory;
|
import org.springframework.beans.factory.BeanFactory;
|
||||||
@@ -615,6 +613,49 @@ public class HibernateTransactionManagerTests {
|
|||||||
ordered.verify(session).close();
|
ordered.verify(session).close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTransactionWithPropagationSupportsAndCurrentSession() throws Exception {
|
||||||
|
final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class);
|
||||||
|
final Session session = mock(Session.class);
|
||||||
|
|
||||||
|
given(sf.openSession()).willReturn(session);
|
||||||
|
given(session.getSessionFactory()).willReturn(sf);
|
||||||
|
given(session.getFlushMode()).willReturn(FlushMode.MANUAL);
|
||||||
|
|
||||||
|
LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() {
|
||||||
|
@Override
|
||||||
|
protected SessionFactory newSessionFactory(Configuration config) throws HibernateException {
|
||||||
|
return sf;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
lsfb.afterPropertiesSet();
|
||||||
|
final SessionFactory sfProxy = lsfb.getObject();
|
||||||
|
|
||||||
|
PlatformTransactionManager tm = new HibernateTransactionManager(sfProxy);
|
||||||
|
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||||
|
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
|
||||||
|
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
|
||||||
|
|
||||||
|
tt.execute(new TransactionCallback() {
|
||||||
|
@Override
|
||||||
|
public Object doInTransaction(TransactionStatus status) {
|
||||||
|
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
|
||||||
|
assertTrue("Is not new transaction", !status.isNewTransaction());
|
||||||
|
assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly());
|
||||||
|
assertFalse(TransactionSynchronizationManager.isActualTransactionActive());
|
||||||
|
Session session = new SpringSessionContext(sf).currentSession();
|
||||||
|
assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sfProxy));
|
||||||
|
session.flush();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
|
||||||
|
InOrder ordered = inOrder(session);
|
||||||
|
ordered.verify(session).flush();
|
||||||
|
ordered.verify(session).close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception {
|
public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception {
|
||||||
final SessionFactory sf = mock(SessionFactory.class);
|
final SessionFactory sf = mock(SessionFactory.class);
|
||||||
@@ -900,7 +941,7 @@ public class HibernateTransactionManagerTests {
|
|||||||
catch (DataIntegrityViolationException ex) {
|
catch (DataIntegrityViolationException ex) {
|
||||||
// expected
|
// expected
|
||||||
assertEquals(rootCause, ex.getCause());
|
assertEquals(rootCause, ex.getCause());
|
||||||
assertTrue(ex.getMessage().indexOf("mymsg") != -1);
|
assertTrue(ex.getMessage().contains("mymsg"));
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf));
|
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf));
|
||||||
|
|||||||
Reference in New Issue
Block a user