diff --git a/spring-webflow/src/main/java/org/springframework/webflow/persistence/HibernateFlowExecutionListener.java b/spring-webflow/src/main/java/org/springframework/webflow/persistence/HibernateFlowExecutionListener.java index b6fe077b..0302064d 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/persistence/HibernateFlowExecutionListener.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/persistence/HibernateFlowExecutionListener.java @@ -104,13 +104,13 @@ public class HibernateFlowExecutionListener extends FlowExecutionListenerAdapter } public void sessionStarting(RequestContext context, FlowSession session, MutableAttributeMap input) { - if (isPersistenceContext(session.getDefinition())) { - if (!session.isRoot()) { - FlowSession parent = session.getParent(); - if (isPersistenceContext(parent.getDefinition())) { - unbind(getHibernateSession(parent)); - } + if (!session.isRoot()) { + FlowSession parent = session.getParent(); + if (isPersistenceContext(parent.getDefinition())) { + unbind(getHibernateSession(parent)); } + } + if (isPersistenceContext(session.getDefinition())) { Session hibernateSession = createSession(context); session.getScope().put(HIBERNATE_SESSION_ATTRIBUTE, hibernateSession); bind(hibernateSession); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/persistence/JpaFlowExecutionListener.java b/spring-webflow/src/main/java/org/springframework/webflow/persistence/JpaFlowExecutionListener.java index 03ad3674..34ca0b9b 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/persistence/JpaFlowExecutionListener.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/persistence/JpaFlowExecutionListener.java @@ -94,13 +94,13 @@ public class JpaFlowExecutionListener extends FlowExecutionListenerAdapter { } public void sessionStarting(RequestContext context, FlowSession session, MutableAttributeMap input) { - if (isPersistenceContext(session.getDefinition())) { - if (!session.isRoot()) { - FlowSession parent = session.getParent(); - if (isPersistenceContext(parent.getDefinition())) { - unbind(getEntityManager(parent)); - } + if (!session.isRoot()) { + FlowSession parent = session.getParent(); + if (isPersistenceContext(parent.getDefinition())) { + unbind(getEntityManager(parent)); } + } + if (isPersistenceContext(session.getDefinition())) { EntityManager em = entityManagerFactory.createEntityManager(); session.getScope().put(ENTITY_MANAGER_ATTRIBUTE, em); bind(em); diff --git a/spring-webflow/src/test/java/org/springframework/webflow/persistence/HibernateFlowManagedPersistenceIntegrationTests.java b/spring-webflow/src/test/java/org/springframework/webflow/persistence/HibernateFlowManagedPersistenceIntegrationTests.java index 0141cd48..fd18d17c 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/persistence/HibernateFlowManagedPersistenceIntegrationTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/persistence/HibernateFlowManagedPersistenceIntegrationTests.java @@ -11,12 +11,12 @@ import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateTransactionManager; import org.springframework.orm.hibernate3.LocalSessionFactoryBean; import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.webflow.engine.EndState; import org.springframework.webflow.engine.Flow; import org.springframework.webflow.engine.builder.FlowAssembler; import org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder; @@ -35,8 +35,6 @@ public class HibernateFlowManagedPersistenceIntegrationTests extends TestCase { private SessionFactory sessionFactory; - private JdbcTemplate jdbcTemplate; - private HibernateTemplate hibernateTemplate; private HibernateFlowExecutionListener hibernateListener; @@ -46,7 +44,6 @@ public class HibernateFlowManagedPersistenceIntegrationTests extends TestCase { protected void setUp() throws Exception { DataSource dataSource = getDataSource(); populateDataBase(dataSource); - jdbcTemplate = new JdbcTemplate(dataSource); sessionFactory = getSessionFactory(dataSource); hibernateTemplate = new HibernateTemplate(sessionFactory); hibernateTemplate.setCheckWriteOperations(false); @@ -60,6 +57,9 @@ public class HibernateFlowManagedPersistenceIntegrationTests extends TestCase { FlowAssembler assembler = new FlowAssembler(builder, context); Flow flow = assembler.assembleFlow(); context.registerSubflow(flow); + Flow notManaged = new Flow("notmanaged"); + new EndState(notManaged, "finish"); + context.registerSubflow(notManaged); context.registerBean("loadTestBean", new Action() { public Event execute(RequestContext context) throws Exception { assertSessionBound(); @@ -84,6 +84,13 @@ public class HibernateFlowManagedPersistenceIntegrationTests extends TestCase { flowExecution.resume(context); } + public void testManagedFlowWithUnmanagedSubflow() { + MockExternalContext context = new MockExternalContext(); + flowExecution.start(null, context); + context.setEventId("notmanaged"); + flowExecution.resume(context); + } + private DataSource getDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); @@ -132,10 +139,6 @@ public class HibernateFlowManagedPersistenceIntegrationTests extends TestCase { return (SessionFactory) factory.getObject(); } - private void assertSessionNotBound() { - assertNull(TransactionSynchronizationManager.getResource(sessionFactory)); - } - private void assertSessionBound() { assertNotNull(TransactionSynchronizationManager.getResource(sessionFactory)); } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/persistence/JpaFlowManagedPersistenceIntegrationTests.java b/spring-webflow/src/test/java/org/springframework/webflow/persistence/JpaFlowManagedPersistenceIntegrationTests.java index fae40486..73c6947f 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/persistence/JpaFlowManagedPersistenceIntegrationTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/persistence/JpaFlowManagedPersistenceIntegrationTests.java @@ -10,13 +10,12 @@ import javax.sql.DataSource; import junit.framework.TestCase; import org.springframework.core.io.ClassPathResource; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.orm.jpa.JpaTemplate; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.webflow.engine.EndState; import org.springframework.webflow.engine.Flow; import org.springframework.webflow.engine.builder.FlowAssembler; import org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder; @@ -37,20 +36,14 @@ public class JpaFlowManagedPersistenceIntegrationTests extends TestCase { private JpaFlowExecutionListener jpaListener; - private JdbcTemplate jdbcTemplate; - - private JpaTemplate jpaTemplate; - private FlowExecution flowExecution; protected void setUp() throws Exception { DataSource dataSource = getDataSource(); populateDataBase(dataSource); - jdbcTemplate = new JdbcTemplate(dataSource); entityManagerFactory = getEntityManagerFactory(dataSource); JpaTransactionManager tm = new JpaTransactionManager(entityManagerFactory); jpaListener = new JpaFlowExecutionListener(entityManagerFactory, tm); - jpaTemplate = new JpaTemplate(entityManagerFactory); ClassPathResource res = new ClassPathResource("flow-managed-persistence.xml", getClass()); DefaultFlowModelHolder holder = new DefaultFlowModelHolder(new XmlFlowModelBuilder(res)); @@ -59,6 +52,9 @@ public class JpaFlowManagedPersistenceIntegrationTests extends TestCase { FlowAssembler assembler = new FlowAssembler(builder, context); Flow flow = assembler.assembleFlow(); context.registerSubflow(flow); + Flow notManaged = new Flow("notmanaged"); + new EndState(notManaged, "finish"); + context.registerSubflow(notManaged); context.registerBean("loadTestBean", new Action() { public Event execute(RequestContext context) throws Exception { assertSessionBound(); @@ -74,7 +70,7 @@ public class JpaFlowManagedPersistenceIntegrationTests extends TestCase { flowExecution = factory.createFlowExecution(flow); } - public void testFlowWithSubflow() { + public void testManagedFlowWithManagedSubflow() { MockExternalContext context = new MockExternalContext(); flowExecution.start(null, context); context.setEventId("subflow"); @@ -83,6 +79,13 @@ public class JpaFlowManagedPersistenceIntegrationTests extends TestCase { flowExecution.resume(context); } + public void testManagedFlowWithUnmanagedSubflow() { + MockExternalContext context = new MockExternalContext(); + flowExecution.start(null, context); + context.setEventId("notmanaged"); + flowExecution.resume(context); + } + private DataSource getDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); @@ -131,10 +134,6 @@ public class JpaFlowManagedPersistenceIntegrationTests extends TestCase { return factory.getObject(); } - private void assertSessionNotBound() { - assertNull(TransactionSynchronizationManager.getResource(entityManagerFactory)); - } - private void assertSessionBound() { assertNotNull(TransactionSynchronizationManager.getResource(entityManagerFactory)); } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/persistence/flow-managed-persistence.xml b/spring-webflow/src/test/java/org/springframework/webflow/persistence/flow-managed-persistence.xml index 3b522ce6..89e38012 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/persistence/flow-managed-persistence.xml +++ b/spring-webflow/src/test/java/org/springframework/webflow/persistence/flow-managed-persistence.xml @@ -12,6 +12,7 @@ + @@ -21,6 +22,13 @@ + + + + + + +