HibernateTransactionManagerTests for Hibernate 3 covers currentSession() as well
Issue: SPR-9020
This commit is contained in:
parent
5cbb1fc498
commit
6b6ca4889b
|
|
@ -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…
Reference in New Issue