Skip to content

Commit 6b6ca48

Browse files
committed
HibernateTransactionManagerTests for Hibernate 3 covers currentSession() as well
Issue: SPR-9020
1 parent 5cbb1fc commit 6b6ca48

File tree

1 file changed

+45
-4
lines changed

1 file changed

+45
-4
lines changed

spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.ArrayList;
2424
import java.util.List;
2525
import java.util.Properties;
26-
2726
import javax.sql.DataSource;
2827

2928
import org.hibernate.FlushMode;
@@ -36,12 +35,11 @@
3635
import org.hibernate.cfg.Configuration;
3736
import org.hibernate.classic.Session;
3837
import org.hibernate.dialect.HSQLDialect;
38+
import org.hibernate.engine.SessionFactoryImplementor;
3939
import org.hibernate.exception.ConstraintViolationException;
4040
import org.hibernate.exception.GenericJDBCException;
41-
4241
import org.junit.After;
4342
import org.junit.Test;
44-
4543
import org.mockito.InOrder;
4644

4745
import org.springframework.beans.factory.BeanFactory;
@@ -615,6 +613,49 @@ public Object doInHibernate(org.hibernate.Session session) {
615613
ordered.verify(session).close();
616614
}
617615

616+
@Test
617+
public void testTransactionWithPropagationSupportsAndCurrentSession() throws Exception {
618+
final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class);
619+
final Session session = mock(Session.class);
620+
621+
given(sf.openSession()).willReturn(session);
622+
given(session.getSessionFactory()).willReturn(sf);
623+
given(session.getFlushMode()).willReturn(FlushMode.MANUAL);
624+
625+
LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() {
626+
@Override
627+
protected SessionFactory newSessionFactory(Configuration config) throws HibernateException {
628+
return sf;
629+
}
630+
};
631+
lsfb.afterPropertiesSet();
632+
final SessionFactory sfProxy = lsfb.getObject();
633+
634+
PlatformTransactionManager tm = new HibernateTransactionManager(sfProxy);
635+
TransactionTemplate tt = new TransactionTemplate(tm);
636+
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
637+
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
638+
639+
tt.execute(new TransactionCallback() {
640+
@Override
641+
public Object doInTransaction(TransactionStatus status) {
642+
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
643+
assertTrue("Is not new transaction", !status.isNewTransaction());
644+
assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly());
645+
assertFalse(TransactionSynchronizationManager.isActualTransactionActive());
646+
Session session = new SpringSessionContext(sf).currentSession();
647+
assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sfProxy));
648+
session.flush();
649+
return null;
650+
}
651+
});
652+
653+
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy));
654+
InOrder ordered = inOrder(session);
655+
ordered.verify(session).flush();
656+
ordered.verify(session).close();
657+
}
658+
618659
@Test
619660
public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception {
620661
final SessionFactory sf = mock(SessionFactory.class);
@@ -900,7 +941,7 @@ public Object doInHibernate(org.hibernate.Session session) throws HibernateExcep
900941
catch (DataIntegrityViolationException ex) {
901942
// expected
902943
assertEquals(rootCause, ex.getCause());
903-
assertTrue(ex.getMessage().indexOf("mymsg") != -1);
944+
assertTrue(ex.getMessage().contains("mymsg"));
904945
}
905946

906947
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf));

0 commit comments

Comments
 (0)