HibernateTransactionManagerTests for Hibernate 3 covers currentSession() as well

Issue: SPR-9020
master
Juergen Hoeller 10 years ago
parent 5cbb1fc498
commit 6b6ca4889b
  1. 49
      spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java

@ -23,7 +23,6 @@ import java.sql.Savepoint;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.FlushMode;
@ -36,12 +35,11 @@ import org.hibernate.cache.NoCacheProvider;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.GenericJDBCException;
import org.junit.After;
import org.junit.Test;
import org.mockito.InOrder;
import org.springframework.beans.factory.BeanFactory;
@ -615,6 +613,49 @@ public class HibernateTransactionManagerTests {
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
public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception {
final SessionFactory sf = mock(SessionFactory.class);
@ -900,7 +941,7 @@ public class HibernateTransactionManagerTests {
catch (DataIntegrityViolationException ex) {
// expected
assertEquals(rootCause, ex.getCause());
assertTrue(ex.getMessage().indexOf("mymsg") != -1);
assertTrue(ex.getMessage().contains("mymsg"));
}
assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf));

Loading…
Cancel
Save