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;
}
}