public void internalAddTimer(final TimerInstance timer) { long delay; Date lastTriggered = timer.getLastTriggered(); if (lastTriggered == null) { Date activated = timer.getActivated(); Date now = new Date(); long timespan = now.getTime() - activated.getTime(); delay = timer.getDelay() - timespan; if (delay < 0) { delay = 0; } } else { Date now = new Date(); long timespan = now.getTime() - lastTriggered.getTime(); delay = timespan - timer.getPeriod(); if (delay < 0) { delay = 0; } } Trigger trigger = new IntervalTrigger(timerService.getCurrentTime(), null, null, -1, delay, timer.getPeriod(), null, null); ProcessJobContext ctx = new ProcessJobContext(timer, trigger, timer.getProcessInstanceId(), this.kruntime); JobHandle jobHandle = this.timerService.scheduleJob(processJob, ctx, trigger); timer.setJobHandle(jobHandle); timers.put(timer.getId(), timer); }
public void registerTimer(final TimerInstance timer, ProcessInstance processInstance) { try { kruntime.startOperation(); timer.setId(++timerId); timer.setProcessInstanceId(processInstance.getId()); timer.setSessionId(((KieSession) kruntime).getIdentifier()); timer.setActivated(new Date()); Trigger trigger = null; if (timer.getCronExpression() != null) { Date startTime = new Date(timerService.getCurrentTime() + 1000); trigger = new CronTrigger(timerService.getCurrentTime(), startTime, null, -1, timer.getCronExpression(), null, null); // cron timers are by nature repeatable timer.setPeriod(1); } else { trigger = new IntervalTrigger(timerService.getCurrentTime(), null, null, timer.getRepeatLimit(), timer.getDelay(), timer.getPeriod(), null, null); } ProcessJobContext ctx = new ProcessJobContext(timer, trigger, processInstance.getId(), this.kruntime); JobHandle jobHandle = this.timerService.scheduleJob(processJob, ctx, trigger); timer.setJobHandle(jobHandle); timers.put(timer.getId(), timer); } finally { kruntime.endOperation(); } }
public void deserialize(MarshallerReaderContext inCtx, Timer timer) throws ClassNotFoundException { JBPMMessages.ProcessTimer ptimer = timer.getExtension(JBPMMessages.procTimer); TimerService ts = inCtx.wm.getTimerService(); long processInstanceId = ptimer.getTimer().getProcessInstanceId(); Trigger trigger = ProtobufInputMarshaller.readTrigger(inCtx, ptimer.getTrigger()); TimerInstance timerInstance = ProtobufProcessMarshaller.readTimer(inCtx, ptimer.getTimer()); TimerManager tm = ((InternalProcessRuntime) inCtx.wm.getProcessRuntime()).getTimerManager(); // check if the timer instance is not already registered to avoid duplicated timers if (!tm.getTimerMap().containsKey(timerInstance.getId())) { ProcessJobContext pctx = new ProcessJobContext(timerInstance, trigger, processInstanceId, inCtx.wm.getKnowledgeRuntime(), false); Date date = trigger.hasNextFireTime(); if (date != null) { long then = date.getTime(); long now = pctx.getKnowledgeRuntime().getSessionClock().getCurrentTime(); // overdue timer if (then < now) { trigger = new OverdueTrigger(trigger, pctx.getKnowledgeRuntime()); } } JobHandle jobHandle = ts.scheduleJob(processJob, pctx, trigger); timerInstance.setJobHandle(jobHandle); pctx.setJobHandle(jobHandle); tm.getTimerMap().put(timerInstance.getId(), timerInstance); } } }
public void deserialize(MarshallerReaderContext inCtx, Timer timer) throws ClassNotFoundException { JBPMMessages.ProcessTimer ptimer = timer.getExtension(JBPMMessages.procTimer); TimerService ts = inCtx.wm.getTimerService(); long processInstanceId = ptimer.getTimer().getProcessInstanceId(); Trigger trigger = ProtobufInputMarshaller.readTrigger(inCtx, ptimer.getTrigger()); TimerInstance timerInstance = ProtobufProcessMarshaller.readTimer(inCtx, ptimer.getTimer()); TimerManager tm = ((InternalProcessRuntime) inCtx.wm.getProcessRuntime()).getTimerManager(); // check if the timer instance is not already registered to avoid duplicated timers if (!tm.getTimerMap().containsKey(timerInstance.getId())) { ProcessJobContext pctx = new ProcessJobContext(timerInstance, trigger, processInstanceId, inCtx.wm.getKnowledgeRuntime(), false); Date date = trigger.hasNextFireTime(); if (date != null) { long then = date.getTime(); long now = pctx.getKnowledgeRuntime().getSessionClock().getCurrentTime(); // overdue timer if (then < now) { trigger = new OverdueTrigger(trigger, pctx.getKnowledgeRuntime()); } } JobHandle jobHandle = ts.scheduleJob(processJob, pctx, trigger); timerInstance.setJobHandle(jobHandle); pctx.setJobHandle(jobHandle); tm.getTimerMap().put(timerInstance.getId(), timerInstance); } } }
public void registerTimer(final TimerInstance timer, ProcessInstance processInstance) { try { kruntime.startOperation(); timer.setId(++timerId); timer.setProcessInstanceId(processInstance.getId()); timer.setSessionId(((KieSession) kruntime).getIdentifier()); timer.setActivated(new Date()); Trigger trigger = null; if (timer.getCronExpression() != null) { Date startTime = new Date(timerService.getCurrentTime() + 1000); trigger = new CronTrigger(timerService.getCurrentTime(), startTime, null, -1, timer.getCronExpression(), null, null); // cron timers are by nature repeatable timer.setPeriod(1); } else { trigger = new IntervalTrigger(timerService.getCurrentTime(), null, null, timer.getRepeatLimit(), timer.getDelay(), timer.getPeriod(), null, null); } ProcessJobContext ctx = new ProcessJobContext(timer, trigger, processInstance.getId(), this.kruntime); JobHandle jobHandle = this.timerService.scheduleJob(processJob, ctx, trigger); timer.setJobHandle(jobHandle); timers.put(timer.getId(), timer); } finally { kruntime.endOperation(); } }
public void internalAddTimer(final TimerInstance timer) { long delay; Date lastTriggered = timer.getLastTriggered(); if (lastTriggered == null) { Date activated = timer.getActivated(); Date now = new Date(); long timespan = now.getTime() - activated.getTime(); delay = timer.getDelay() - timespan; if (delay < 0) { delay = 0; } } else { Date now = new Date(); long timespan = now.getTime() - lastTriggered.getTime(); delay = timespan - timer.getPeriod(); if (delay < 0) { delay = 0; } } Trigger trigger = new IntervalTrigger(timerService.getCurrentTime(), null, null, -1, delay, timer.getPeriod(), null, null); ProcessJobContext ctx = new ProcessJobContext(timer, trigger, timer.getProcessInstanceId(), this.kruntime); JobHandle jobHandle = this.timerService.scheduleJob(processJob, ctx, trigger); timer.setJobHandle(jobHandle); timers.put(timer.getId(), timer); }