[jboss-svn-commits] JBL Code SVN: r34146 - labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jul 23 15:00:06 EDT 2010
Author: diegoll
Date: 2010-07-23 15:00:05 -0400 (Fri, 23 Jul 2010)
New Revision: 34146
Added:
labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersistentTimerServiceTest.java
Log:
fix typo in test name
Copied: labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersistentTimerServiceTest.java (from rev 34145, labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersitentTimerServiceTest.java)
===================================================================
--- labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersistentTimerServiceTest.java (rev 0)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersistentTimerServiceTest.java 2010-07-23 19:00:05 UTC (rev 34146)
@@ -0,0 +1,180 @@
+package org.drools.persistence.processinstance.timer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.NoResultException;
+import javax.persistence.Persistence;
+import javax.transaction.UserTransaction;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Message;
+import org.drools.base.MapGlobalResolver;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.impl.EnvironmentFactory;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.persistence.session.TestWorkItemHandler;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.junit.Assert;
+
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
+public class JPAPersistentTimerServiceTest extends TestCase{
+
+ private EntityManagerFactory emf;
+ private PoolingDataSource ds1;
+
+ protected void setUp() {
+ startDataSource();
+ emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+ }
+
+ private void startDataSource() {
+ 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();
+ }
+
+ protected void tearDown() {
+ emf.close();
+ ds1.close();
+ }
+
+ public void testProcessTimerPersisted() throws Exception{
+ EntityManager entityManager = emf.createEntityManager();
+ KnowledgeBase kbase = getKnowledgeBase();
+ StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
+
+ assertTrue("timers queued at begin", entityManager.createQuery("from ProcessTimerJob").getResultList().isEmpty());
+ ksession.setGlobal("myList", new ArrayList<Message>());
+ ksession.startProcess("com.plugtree.timer");
+ ProcessTimerJob uniquePersistedTimer = null;
+ try{
+ uniquePersistedTimer = (ProcessTimerJob) entityManager.createQuery("from ProcessTimerJob").getSingleResult();
+ } catch (NoResultException nre){
+ fail("no timer persisted");
+ }
+
+ assertNotNull("timer id not persisted", uniquePersistedTimer.getTimerInstance());
+
+ ksession.dispose();
+ }
+
+ public void testTimerTriggered() throws Exception{
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+
+ EntityManager entityManager = emf.createEntityManager();
+ KnowledgeBase kbase = getKnowledgeBase();
+ StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
+
+ JPACheckerProcessTimerJobService jpaTimerChecker = new JPACheckerProcessTimerJobService(ksession.getId(), kbase);
+ jpaTimerChecker.start();
+
+ List<Message> myList = new ArrayList<Message>();
+ ksession.setGlobal("myList", myList);
+ ProcessInstance processInstance = ksession.startProcess("com.plugtree.timer");
+ Assert.assertEquals(0, myList.size());
+ Assert.assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+
+ ProcessTimerJob uniquePersistedTimer = null;
+ try{
+ uniquePersistedTimer = (ProcessTimerJob) entityManager.createQuery("from ProcessTimerJob").getSingleResult();
+ } catch (NoResultException nre){
+ fail("no timer persisted");
+ }
+ Thread.sleep(6000);
+
+ Assert.assertEquals(5, myList.size());
+ ksession.dispose();
+ jpaTimerChecker.stop();
+ }
+
+
+
+ private StatefulKnowledgeSession createKnowledgeSession(KnowledgeBase kbase) {
+ Environment environment = EnvironmentFactory.newEnvironment();
+ environment.set(EnvironmentName.ENTITY_MANAGER_FACTORY, Persistence.createEntityManagerFactory("org.drools.persistence.jpa"));
+ environment.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
+ environment.set(EnvironmentName.PROCESS_TIMER_STRATEGY, new JPAProcessTimerPersistenceStrategy(emf));
+
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, environment);
+ //StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(null, environment);
+ return ksession;
+ }
+
+ private KnowledgeBase getKnowledgeBase() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+ kbuilder.add(ResourceFactory.newClassPathResource("simpleTimer.rf"), ResourceType.DRF);
+ if (kbuilder.hasErrors()) {
+ StringBuilder builder = new StringBuilder();
+ for (KnowledgeBuilderError error : kbuilder.getErrors()) {
+ builder.append(error.getMessage()+"\n");
+ }
+ fail(builder.toString());
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+
+ public void testPersistenceTimer() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( new ClassPathResource( "TimerProcess.rf" ),
+ ResourceType.DRF );
+ KnowledgeBase kbase = kbuilder.newKnowledgeBase();
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+ env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+ env.set(EnvironmentName.PROCESS_TIMER_STRATEGY, new JPAProcessTimerPersistenceStrategy(emf));
+
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+ int id = ksession.getId();
+ ksession.dispose();
+
+ JPACheckerProcessTimerJobService jpaTimerChecker = new JPACheckerProcessTimerJobService(id, kbase);
+ jpaTimerChecker.start();
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+ ksession.dispose();
+
+ assertNotNull(TestWorkItemHandler.getInstance().getWorkItem());
+
+ Thread.sleep(5000);
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNull( processInstance );
+ jpaTimerChecker.stop();
+ }
+
+}
More information about the jboss-svn-commits
mailing list