use of org.jbpm.process.instance.timer.TimerInstance in project jbpm by kiegroup.
the class ProtobufProcessMarshaller method readTimer.
public static TimerInstance readTimer(MarshallerReaderContext context, JBPMMessages.ProcessTimer.TimerInstance _timer) {
TimerInstance timer = new TimerInstance();
timer.setId(_timer.getId());
timer.setTimerId(_timer.getTimerId());
timer.setDelay(_timer.getDelay());
timer.setPeriod(_timer.getPeriod());
timer.setProcessInstanceId(_timer.getProcessInstanceId());
if (_timer.hasDEPRECATEDSessionId()) {
timer.setSessionId(_timer.getDEPRECATEDSessionId());
} else {
timer.setSessionId(_timer.getSessionId());
}
timer.setActivated(new Date(_timer.getActivatedTime()));
if (_timer.hasLastTriggered()) {
timer.setLastTriggered(new Date(_timer.getLastTriggered()));
}
return timer;
}
use of org.jbpm.process.instance.timer.TimerInstance in project jbpm by kiegroup.
the class SerializedTimerRollbackTest method testSerizliableTestsWithExternalRollback.
@Test
public void testSerizliableTestsWithExternalRollback() {
try {
createRuntimeManager("org/jbpm/test/functional/timer/HumanTaskWithBoundaryTimer.bpmn");
RuntimeEngine runtimeEngine = getRuntimeEngine();
KieSession ksession = runtimeEngine.getKieSession();
TaskService taskService = runtimeEngine.getTaskService();
logger.debug("Created knowledge session");
TransactionManager tm = com.arjuna.ats.jta.TransactionManager.transactionManager();
List<Long> committedProcessInstanceIds = new ArrayList<Long>();
for (int i = 0; i < 10; i++) {
tm.begin();
Map<String, Object> params = new HashMap<String, Object>();
params.put("test", "john");
logger.debug("Creating process instance: {}", i);
ProcessInstance pi = ksession.startProcess("PROCESS_1", params);
if (i % 2 == 0) {
committedProcessInstanceIds.add(pi.getId());
tm.commit();
} else {
tm.rollback();
}
}
Connection c = getDs().getConnection();
Statement st = c.createStatement();
ResultSet rs = st.executeQuery("select rulesbytearray from sessioninfo");
rs.next();
Blob b = rs.getBlob("rulesbytearray");
assertNotNull(b);
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
ProtobufMarshaller marshaller = new ProtobufMarshaller(builder.newKieBase(), new MarshallingConfigurationImpl());
StatefulKnowledgeSession session = marshaller.unmarshall(b.getBinaryStream());
assertNotNull(session);
TimerManager timerManager = ((InternalProcessRuntime) ((InternalKnowledgeRuntime) session).getProcessRuntime()).getTimerManager();
assertNotNull(timerManager);
Collection<TimerInstance> timers = timerManager.getTimers();
assertNotNull(timers);
assertEquals(5, timers.size());
for (TimerInstance timerInstance : timers) {
assertTrue(committedProcessInstanceIds.contains(timerInstance.getProcessInstanceId()));
ksession.abortProcessInstance(timerInstance.getProcessInstanceId());
}
List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
assertEquals(0, tasks.size());
} catch (Exception e) {
e.printStackTrace();
fail("Exception thrown");
}
}
use of org.jbpm.process.instance.timer.TimerInstance in project jbpm by kiegroup.
the class TimerNodeInstance method createTimerInstance.
protected TimerInstance createTimerInstance(InternalKnowledgeRuntime kruntime) {
Timer timer = getTimerNode().getTimer();
TimerInstance timerInstance = new TimerInstance();
if (kruntime != null && kruntime.getEnvironment().get("jbpm.business.calendar") != null) {
BusinessCalendar businessCalendar = (BusinessCalendar) kruntime.getEnvironment().get("jbpm.business.calendar");
String delay = resolveVariable(timer.getDelay());
timerInstance.setDelay(businessCalendar.calculateBusinessTimeAsDuration(delay));
if (timer.getPeriod() == null) {
timerInstance.setPeriod(0);
} else {
String period = resolveVariable(timer.getPeriod());
timerInstance.setPeriod(businessCalendar.calculateBusinessTimeAsDuration(period));
}
} else {
configureTimerInstance(timer, timerInstance);
}
timerInstance.setTimerId(timer.getId());
return timerInstance;
}
use of org.jbpm.process.instance.timer.TimerInstance in project jbpm by kiegroup.
the class StateBasedNodeInstance method createTimerInstance.
protected TimerInstance createTimerInstance(Timer timer) {
TimerInstance timerInstance = new TimerInstance();
KieRuntime kruntime = getProcessInstance().getKnowledgeRuntime();
if (kruntime != null && kruntime.getEnvironment().get("jbpm.business.calendar") != null) {
BusinessCalendar businessCalendar = (BusinessCalendar) kruntime.getEnvironment().get("jbpm.business.calendar");
String delay = null;
switch(timer.getTimeType()) {
case Timer.TIME_CYCLE:
if (CronExpression.isValidExpression(timer.getDelay())) {
timerInstance.setCronExpression(timer.getDelay());
} else {
String tempDelay = resolveVariable(timer.getDelay());
String tempPeriod = resolveVariable(timer.getPeriod());
if (DateTimeUtils.isRepeatable(tempDelay)) {
String[] values = DateTimeUtils.parseISORepeatable(tempDelay);
String tempRepeatLimit = values[0];
tempDelay = values[1];
tempPeriod = values[2];
if (!tempRepeatLimit.isEmpty()) {
try {
int repeatLimit = Integer.parseInt(tempRepeatLimit);
if (repeatLimit > -1) {
timerInstance.setRepeatLimit(repeatLimit + 1);
}
} catch (NumberFormatException e) {
// ignore
}
}
}
timerInstance.setDelay(businessCalendar.calculateBusinessTimeAsDuration(tempDelay));
if (tempPeriod == null) {
timerInstance.setPeriod(0);
} else {
timerInstance.setPeriod(businessCalendar.calculateBusinessTimeAsDuration(tempPeriod));
}
}
break;
case Timer.TIME_DURATION:
delay = resolveVariable(timer.getDelay());
timerInstance.setDelay(businessCalendar.calculateBusinessTimeAsDuration(delay));
timerInstance.setPeriod(0);
break;
case Timer.TIME_DATE:
// even though calendar is available concrete date was provided so it shall be used
configureTimerInstance(timer, timerInstance);
default:
break;
}
} else {
configureTimerInstance(timer, timerInstance);
}
timerInstance.setTimerId(timer.getId());
return timerInstance;
}
use of org.jbpm.process.instance.timer.TimerInstance in project jbpm by kiegroup.
the class StateBasedNodeInstance method internalTrigger.
public void internalTrigger(NodeInstance from, String type) {
super.internalTrigger(from, type);
// if node instance was cancelled, abort
if (getNodeInstanceContainer().getNodeInstance(getId()) == null) {
return;
}
// activate timers
Map<Timer, DroolsAction> timers = getEventBasedNode().getTimers();
if (timers != null) {
addTimerListener();
timerInstances = new ArrayList<Long>(timers.size());
TimerManager timerManager = ((InternalProcessRuntime) getProcessInstance().getKnowledgeRuntime().getProcessRuntime()).getTimerManager();
for (Timer timer : timers.keySet()) {
TimerInstance timerInstance = createTimerInstance(timer);
timerManager.registerTimer(timerInstance, (ProcessInstance) getProcessInstance());
timerInstances.add(timerInstance.getId());
}
}
if (getEventBasedNode().getBoundaryEvents() != null) {
for (String name : getEventBasedNode().getBoundaryEvents()) {
boolean isActive = ((InternalAgenda) getProcessInstance().getKnowledgeRuntime().getAgenda()).isRuleActiveInRuleFlowGroup("DROOLS_SYSTEM", name, getProcessInstance().getId());
if (isActive) {
getProcessInstance().getKnowledgeRuntime().signalEvent(name, null);
} else {
addActivationListener();
}
}
}
((WorkflowProcessInstanceImpl) getProcessInstance()).addActivatingNodeId((String) getNode().getMetaData().get("UniqueId"));
}
Aggregations