public ProcessJobContext(final TimerInstance timer, final Trigger trigger, final Long processInstanceId, final InternalKnowledgeRuntime kruntime) { this.timer = timer; this.trigger = trigger; this.processInstanceId = processInstanceId; this.kruntime = kruntime; this.sessionId = timer.getSessionId(); this.newTimer = true; }
protected TimerInstance rescheduleTimer(TimerInstance timer, TimerManager tm) { logger.debug("Found timer {} that is going to be canceled", timer); tm.cancelTimer(timer.getTimerId()); logger.debug("Timer {} canceled successfully", timer); TimerInstance newTimer = new TimerInstance(); if (delay != 0) { newTimer.setDelay(calculateDelay(delay, timer)); } newTimer.setPeriod(period); newTimer.setRepeatLimit(repeatLimit); newTimer.setTimerId(timer.getTimerId()); return newTimer; } }
protected long calculateDelay(long delay, TimerInstance timer) { long diff = System.currentTimeMillis() - timer.getActivated().getTime(); return delay * 1000 - diff; }
public static JBPMMessages.ProcessTimer.TimerInstance writeTimer(MarshallerWriteContext context, TimerInstance timer) { Builder _timer = JBPMMessages.ProcessTimer.TimerInstance.newBuilder() .setId( timer.getId() ) .setTimerId( timer.getTimerId() ) .setSessionId( timer.getSessionId() ) .setDelay( timer.getDelay() ) .setPeriod( timer.getPeriod() ) .setProcessInstanceId( timer.getProcessInstanceId() ) .setActivatedTime( timer.getActivated().getTime() ) .setRepeatLimit(timer.getRepeatLimit()); Date lastTriggered = timer.getLastTriggered(); if ( lastTriggered != null ) { _timer.setLastTriggered( lastTriggered.getTime() ); } return _timer.build(); }
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() ) ); } timer.setRepeatLimit(_timer.getRepeatLimit()); return timer; }
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 internalTrigger(NodeInstance from, String type) { if (!org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) { throw new IllegalArgumentException( "A TimerNode only accepts default incoming connections!"); } InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime(); timerInstance = createTimerInstance(kruntime); if (getTimerInstances() == null) { addTimerListener(); } ((InternalProcessRuntime)kruntime.getProcessRuntime()) .getTimerManager().registerTimer(timerInstance, (ProcessInstance) getProcessInstance()); timerId = timerInstance.getId(); }
private void initTimer(InternalKnowledgeRuntime kruntime) { for (StartNode startNode : startNodes) { if (startNode != null && startNode.getTimer() != null) { TimerInstance timerInstance = null; if (startNode.getTimer().getDelay() != null && CronExpression.isValidExpression(startNode.getTimer().getDelay())) { timerInstance = new TimerInstance(); timerInstance.setCronExpression(startNode.getTimer().getDelay()); } else { timerInstance = createTimerInstance(startNode.getTimer(), kruntime); } timerManager.registerTimer(timerInstance, processId, null); } } }
public void signalEvent(String type, Object event) { if ("timerTriggered".equals(type)) { TimerInstance timer = (TimerInstance) event; logger.info("Timer {} triggered", timer.getId()); counter++; } } };
private void cancelTimers() { // deactivate still active timers if (timerInstances != null) { TimerManager timerManager = ((InternalProcessRuntime) getProcessInstance().getKnowledgeRuntime().getProcessRuntime()).getTimerManager(); for (Long id: timerInstances) { timerManager.cancelTimer(id); } } }
protected Long getProcessInstancId(JobContext jobContext) { if (jobContext instanceof ProcessJobContext) { return ((ProcessJobContext) jobContext).getProcessInstanceId(); } else if(jobContext instanceof NamedJobContext){ return ((NamedJobContext)jobContext).getProcessInstanceId(); } else { return null; } } }
public long getSessionId() { if (this.getTimerJobInstance() != null) { JobContext ctx = this.getTimerJobInstance().getJobContext(); if (ctx instanceof SelfRemovalJobContext) { ctx = ((SelfRemovalJobContext) ctx).getJobContext(); } if (ctx instanceof ProcessJobContext) { return ((ProcessJobContext)ctx).getSessionId(); } } return -1; }
public void writeProcessTimers(MarshallerWriteContext outCtx) throws IOException { outCtx.writersByClass.put( ProcessJobContext.class, new TimerManager.ProcessTimerOutputMarshaller() ); outCtx.writersByClass.put( StartProcessJobContext.class, new TimerManager.ProcessTimerOutputMarshaller() ); ProtobufMessages.ProcessData.Builder _pdata = (ProtobufMessages.ProcessData.Builder) outCtx.parameterObject; TimerManager timerManager = ((InternalProcessRuntime) ((InternalWorkingMemory) outCtx.wm).getProcessRuntime()).getTimerManager(); long timerId = timerManager.internalGetTimerId(); _pdata.setExtension( JBPMMessages.timerId, timerId ); }
public void readProcessTimers(MarshallerReaderContext inCtx) throws IOException, ClassNotFoundException { inCtx.readersByInt.put( ProtobufMessages.Timers.TimerType.PROCESS_VALUE, new TimerManager.ProcessTimerInputMarshaller() ); ProtobufMessages.ProcessData _pdata = (ProtobufMessages.ProcessData) inCtx.parameterObject; TimerManager timerManager = ((InternalProcessRuntime) ((InternalWorkingMemory) inCtx.wm).getProcessRuntime()).getTimerManager(); timerManager.internalSetTimerId( _pdata.getExtension( JBPMMessages.timerId ) ); // // int token; // while ( (token = inCtx.readShort()) != PersisterEnums.END ) { // switch ( token ) { // case PersisterEnums.TIMER : { // TimerInstance timer = readTimer( inCtx ); // timerManager.internalAddTimer( timer ); // break; // } // case PersisterEnums.DEFAULT_TIMER : { // InputMarshaller.readTimer( inCtx ); // break; // } // } // } }
public void cancelTimer(long timerId) { try { kruntime.startOperation(); TimerInstance timer = timers.remove(timerId); if (timer != null) { timerService.removeJob(timer.getJobHandle()); } } finally { kruntime.endOperation(); } }
public void dispose() { this.processEventSupport.reset(); this.timerManager.dispose(); kruntime = null; }
public ExecutableRunner getRunner( JobContext jobContext ) { JobContext ctxorig = jobContext; if (ctxorig instanceof SelfRemovalJobContext) { ctxorig = ((SelfRemovalJobContext) ctxorig).getJobContext(); } ProcessJobContext ctx = null; if (ctxorig instanceof ProcessJobContext) { ctx = (ProcessJobContext) ctxorig; } else if(ctxorig instanceof NamedJobContext){ return getRunner( ((NamedJobContext)ctxorig).getProcessInstanceId(), ctx ); } else { return getRunner(); } return getRunner( ctx.getProcessInstanceId(), ctx ); }
public ProcessJobContext(final TimerInstance timer, final Trigger trigger, final Long processInstanceId, final InternalKnowledgeRuntime kruntime, boolean newTimer) { this.timer = timer; this.trigger = trigger; this.processInstanceId = processInstanceId; this.kruntime = kruntime; this.sessionId = timer.getSessionId(); this.newTimer = newTimer; }