package org.jbpm.persistence.map.impl; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.base.MapGlobalResolver; import org.drools.persistence.jpa.JPAKnowledgeService; import org.drools.runtime.Environment; import org.drools.runtime.EnvironmentName; import org.drools.runtime.StatefulKnowledgeSession; import org.junit.After; import org.junit.Before; import bitronix.tm.TransactionManagerServices; import bitronix.tm.resource.jdbc.PoolingDataSource; public class JpaBasedPersistenceTest extends MapPersistenceTest { private PoolingDataSource ds1; private EntityManagerFactory emf; @Before public void setUp() throws Exception { ds1 = new PoolingDataSource(); ds1.setUniqueName("jdbc/testDS1"); ds1.setClassName("org.h2.jdbcx.JdbcDataSource"); ds1.setMaxPoolSize(3); ds1.setAllowLocalTransactions(true); ds1.getDriverProperties().put("user", "sa"); ds1.getDriverProperties().put("password", "sasa"); ds1.getDriverProperties().put("URL", "jdbc:h2:mem:mydb"); ds1.init(); emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa"); } @After public void tearDown() throws Exception { emf.close(); ds1.close(); } @Override protected StatefulKnowledgeSession createSession(final KnowledgeBase kbase) { return JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, createEnvironment()); } @Override protected StatefulKnowledgeSession disposeAndReloadSession(final StatefulKnowledgeSession ksession, final KnowledgeBase kbase) { final int ksessionId = ksession.getId(); ksession.dispose(); return JPAKnowledgeService.loadStatefulKnowledgeSession(ksessionId, kbase, null, createEnvironment()); } @Override protected int getProcessInstancesCount() { return emf.createEntityManager().createQuery("FROM ProcessInstanceInfo").getResultList().size(); } @Override protected int getKnowledgeSessionsCount() { return emf.createEntityManager().createQuery("FROM SessionInfo").getResultList().size(); } private Environment createEnvironment() { final Environment env = KnowledgeBaseFactory.newEnvironment(); env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager()); env.set(EnvironmentName.GLOBALS, new MapGlobalResolver()); return env; } }