package org.springframework.webflow.persistence; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.webflow.execution.Action; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.FlowExecutionListener; import org.springframework.webflow.execution.RequestContext; public class JpaFlowManagedPersistenceIntegrationTests extends AbstractFlowManagedPersistenceIntegrationTests { private EntityManagerFactory entityManagerFactory; @Override protected FlowExecutionListener createFlowExecutionListener() throws Exception { entityManagerFactory = getEntityManagerFactory(getDataSource()); JpaTransactionManager tm = new JpaTransactionManager(entityManagerFactory); return new JpaFlowExecutionListener(entityManagerFactory, tm); } @Override protected Action incrementCountAction() { return new Action() { @SuppressWarnings("cast") public Event execute(RequestContext context) throws Exception { assertSessionBound(); EntityManager em = (EntityManager) context.getFlowScope().get("persistenceContext"); TestBean bean = (TestBean) em.getReference(TestBean.class, new Long(0)); bean.incrementCount(); assertNotNull(bean); return new Event(this, "success"); } }; } @Override protected Object assertCountAction() { return new Object() { @SuppressWarnings({ "unused", "cast" }) public void execute(RequestContext context, int expected) throws Exception { assertSessionBound(); EntityManager em = (EntityManager) context.getFlowScope().get("persistenceContext"); TestBean bean = (TestBean) em.getReference(TestBean.class, new Long(0)); assertEquals(expected, bean.getCount()); } }; } @Override protected void assertSessionBound() { assertNotNull(TransactionSynchronizationManager.getResource(entityManagerFactory)); } /* private helper methods */ private EntityManagerFactory getEntityManagerFactory(DataSource dataSource) throws Exception { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource); factory.setPersistenceXmlLocation("classpath:org/springframework/webflow/persistence/persistence.xml"); factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); factory.afterPropertiesSet(); return factory.getObject(); } }