[jboss-svn-commits] JBL Code SVN: r34145 - in labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src: test/java/org/drools/persistence/processinstance/timer and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 23 14:55:40 EDT 2010


Author: diegoll
Date: 2010-07-23 14:55:40 -0400 (Fri, 23 Jul 2010)
New Revision: 34145

Modified:
   labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPACheckerProcessTimerJobService.java
   labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPAProcessTimerPersistenceStrategy.java
   labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersitentTimerServiceTest.java
Log:
added test for new scenario

Modified: labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPACheckerProcessTimerJobService.java
===================================================================
--- labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPACheckerProcessTimerJobService.java	2010-07-23 16:27:49 UTC (rev 34144)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPACheckerProcessTimerJobService.java	2010-07-23 18:55:40 UTC (rev 34145)
@@ -85,6 +85,7 @@
         SignalManager signalManager = sessionImpl.getInternalWorkingMemory().getSignalManager();
 		TimerInstance timerInstance = processJob.getTimerInstance();
 		signalManager.signalEvent( processJob.getProcessId(), "timerTriggered",  timerInstance );
+		ksession.dispose();
 	}
 
 	private boolean shouldExecuteJob(ProcessTimerJob processJob) {

Modified: labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPAProcessTimerPersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPAProcessTimerPersistenceStrategy.java	2010-07-23 16:27:49 UTC (rev 34144)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/timer/JPAProcessTimerPersistenceStrategy.java	2010-07-23 18:55:40 UTC (rev 34145)
@@ -2,7 +2,9 @@
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
+import javax.persistence.NoResultException;
 
+import org.drools.process.instance.timer.TimerInstance;
 import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
 import org.drools.time.ProcessTimerPersistenceStrategy;
 import org.drools.time.impl.IntervalTrigger;
@@ -18,20 +20,33 @@
 	}
 
 	public void save(ProcessJobContext processContext, IntervalTrigger intervalTrigger) {
-		ProcessTimerJob timerJob = new ProcessTimerJob();
-		timerJob.setProcessId(processContext.getProcessInstanceId());
-		timerJob.setInitialTime(intervalTrigger.getStartTime().getTime());
-		timerJob.setPeriod(intervalTrigger.getPeriod());
-		timerJob.setDelay(intervalTrigger.getDelay());
-		timerJob.setTimerInstance(processContext.getTimer());
+		EntityManager entityManager = getEntityManager();
+		TimerInstance timerInstance = processContext.getTimer();
+		long processInstanceId = processContext.getProcessInstanceId();
 
-		getEntityManager().persist(timerJob);
+		try{
+			entityManager
+				.createQuery("from ProcessTimerJob as ptj where ptj.processId = :processId and ptj.timerInstance.id = :timerInstanceId")
+				.setParameter("processId", processInstanceId)
+				.setParameter("timerInstanceId", timerInstance.getId())
+			.getSingleResult();
+		}catch(NoResultException nre){
+			ProcessTimerJob timerJob = new ProcessTimerJob();
+			timerJob.setProcessId(processInstanceId);
+			timerJob.setInitialTime(intervalTrigger.getStartTime().getTime());
+			timerJob.setPeriod(intervalTrigger.getPeriod());
+			timerJob.setDelay(intervalTrigger.getDelay());
+			timerJob.setTimerInstance(timerInstance);
+	
+			entityManager.persist(timerJob);
+		}
 	}
 
 	public boolean remove(ProcessJobHandle jobHandle) {
-		return getEntityManager().createQuery("delete ProcessTimerJob where processId=:processId")
-		.setParameter("processId", jobHandle.getProcessId())
-		.executeUpdate() == 1;
+		return true;
+//		return getEntityManager().createQuery("delete ProcessTimerJob where processId=:processId")
+//		.setParameter("processId", jobHandle.getProcessId())
+//		.executeUpdate() == 1;
 	}
 
 	public EntityManager getEntityManager() {

Modified: 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/JPAPersitentTimerServiceTest.java	2010-07-23 16:27:49 UTC (rev 34144)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-persistence-jpa/src/test/java/org/drools/persistence/processinstance/timer/JPAPersitentTimerServiceTest.java	2010-07-23 18:55:40 UTC (rev 34145)
@@ -15,13 +15,16 @@
 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;
@@ -109,6 +112,8 @@
         ksession.dispose();
         jpaTimerChecker.stop();
 	}
+	
+	
 
 	private StatefulKnowledgeSession createKnowledgeSession(KnowledgeBase kbase) {
 		Environment environment = EnvironmentFactory.newEnvironment();
@@ -137,4 +142,39 @@
         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