[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