[jbpm-commits] JBoss JBPM SVN: r6454 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/timer and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Sat Jul 3 09:07:34 EDT 2010
Author: swiderski.maciej
Date: 2010-07-03 09:07:34 -0400 (Sat, 03 Jul 2010)
New Revision: 6454
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java
Log:
JBPM-2890: support for expression in timer repeat attribute, applies as well to reminder
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2010-07-03 03:49:45 UTC (rev 6453)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2010-07-03 13:07:34 UTC (rev 6454)
@@ -34,6 +34,7 @@
import org.jbpm.api.JbpmException;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.cal.CronExpression;
+import org.jbpm.pvm.internal.el.Expression;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.history.HistoryEvent;
import org.jbpm.pvm.internal.history.events.VariableCreate;
@@ -318,7 +319,14 @@
if (retries!=null) {
timer.setRetries(retries);
}
- timer.setRepeat(timerDefinition.getRepeat());
+ // support for repeat attribute given as expression
+ // only if repeat is specified
+ if (timerDefinition.getRepeat() != null) {
+ Object repeatEl = Expression.create(timerDefinition.getRepeat(), Expression.LANGUAGE_UEL_VALUE).evaluate();
+ timer.setRepeat(repeatEl.toString());
+ } else {
+ timer.setRepeat(timerDefinition.getRepeat());
+ }
}
return timer;
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java 2010-07-03 03:49:45 UTC (rev 6453)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java 2010-07-03 13:07:34 UTC (rev 6454)
@@ -22,6 +22,7 @@
package org.jbpm.test.timer;
import java.util.Calendar;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -428,7 +429,98 @@
assertProcessInstanceEnded(processInstance);
}
+
+ public void testTimerRepeat() {
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <on event='timeout'>" +
+ " <timer duedate='20 minutes' repeat='10 seconds' />" +
+ " <event-listener class='" + MyCustomWait.class.getName() + "' />" +
+ " </on>" +
+ " <transition to='b' />" +
+ " </state>" +
+ " <state name='b' >" +
+ " <transition to='escalate' />" +
+ " </state>" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", "82436");
+
+ Job job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ managementService.executeJob(job.getId());
+
+
+ job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ managementService.executeJob(job.getId());
+
+ processInstance = executionService.findProcessInstanceById(processInstance.getId());
+ String processInstanceId = processInstance.findActiveExecutionIn("a").getId();
+
+ processInstance = executionService.signalExecutionById(processInstanceId);
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ assertProcessInstanceEnded(processInstance);
+ }
+
+ public void testTimerELRepeat() {
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <on event='timeout'>" +
+ " <timer duedate='20 minutes' repeat='#{repeat}' />" +
+ " <event-listener class='" + MyCustomWait.class.getName() + "' />" +
+ " </on>" +
+ " <transition to='b' />" +
+ " </state>" +
+ " <state name='b' >" +
+ " <transition to='escalate' />" +
+ " </state>" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, String> variables = Collections.singletonMap("repeat", "20 seconds");
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", variables, "82436");
+
+ Job job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ managementService.executeJob(job.getId());
+
+
+ job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ managementService.executeJob(job.getId());
+
+ processInstance = executionService.findProcessInstanceById(processInstance.getId());
+ String processInstanceId = processInstance.findActiveExecutionIn("a").getId();
+
+ processInstance = executionService.signalExecutionById(processInstanceId);
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ assertProcessInstanceEnded(processInstance);
+ }
+
public static class MyCustomWait implements ExternalActivityBehaviour, EventListener {
private static final long serialVersionUID = 1L;
More information about the jbpm-commits
mailing list