public boolean execute(ProcessInstance processInstance) { log.debug("{}",this); // Most of the work is actually done in the executor. It loads the relevant handler and lets it execute. if (getTimeoutValue() > -1) { DeferredEvent deferredEvent = new DeferredEvent(); deferredEvent.setProcessDefinitionName(getOwnerProcess().getName()); deferredEvent.setTaskId(getTaskId()); deferredEvent.setProcessInstance(processInstance); long now = new Date().getTime(); deferredEvent.setCreated(now); deferredEvent.setEventType(EventType.DEFERRED); deferredEvent.setComment(trimComment(this.toString())); deferredEvent.setFire(now+getTimeoutValue()); processInstance.getDeferredEvents().add(deferredEvent); processInstance.setDeferredEvent(deferredEvent); } return true; }
public String toString() { final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE; final StringBuilder buffer = new StringBuilder(); append(null, buffer, strategy); return buffer.toString(); }
public boolean equals(Object object) { final EqualsStrategy strategy = JAXBEqualsStrategy.INSTANCE; return equals(null, null, object, strategy); }
@Transactional public int clearDeferredEvents() { Query query = m_entityManager.createNamedQuery("clearDeferredEvents"); @SuppressWarnings("unchecked") List<DeferredEvent> result = query.getResultList(); int ret = result.size(); log.debug("#found {} deferred events",result.size()); for (DeferredEvent deferredEvent:result) { log.debug("#deferred pid: {} processName: {} eventType: {} fire: {} now: {} ",deferredEvent.getProcessInstance().getId(), deferredEvent.getProcessDefinitionName(), deferredEvent.getEventType(), deferredEvent.getFire(),new Date().getTime()); m_entityManager.remove(deferredEvent); } m_entityManager.flush(); return ret; }
@Transactional public DeferredEvent removeDeferredEvent(ProcessInstance processInstance, TaskBase task) { List<DeferredEvent> deferredEvents = processInstance.getDeferredEvents(); for (DeferredEvent deferredEvent: deferredEvents) { if (deferredEvent.getEventType() != EventType.DONE && deferredEvent.getTaskId().longValue() == task.getTaskId() && task.getProcessDefinitionName().equals(deferredEvent.getProcessDefinitionName())) { log.debug("killed deferred event processId {} taskId {} status {} {}", deferredEvent.getProcessInstance().getId(), deferredEvent.getId(), deferredEvent.getEventType() ,deferredEvent.getComment() ); deferredEvent.setEventType(EventType.DONE); return deferredEvent; } } log.debug("failed to find deferred event processId {} {} taskId {}", processInstance.getId(), task.getProcessDefinitionName(), task.getTaskId()); return null; }
@Transactional public List<DeferredEvent> getDeferredEvents() { if (log.isDebugEnabled()) { Query query = m_entityManager.createNamedQuery("DeferredEventsDebug"); @SuppressWarnings("unchecked") List<DeferredEvent> result = query.getResultList(); log.debug("#found {} deferred events",result.size()); for (DeferredEvent deferredEvent:result) { log.debug("#deferred event: {} fire: {} now: {} created: {}",deferredEvent.getEventType(), deferredEvent.getFire(),new Date().getTime(),deferredEvent.getCreated()); } } long now = new Date().getTime(); Query query = m_entityManager.createNamedQuery("DeferredEvents").setParameter("rightNow", now); @SuppressWarnings("unchecked") List<DeferredEvent> result = query.getResultList(); log.debug("found {} deferred events",result.size()); return result; }
public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { theId = (true?this.getId(): 0L); strategy.appendField(locator, this, "id", buffer, theId); theProcessDefinitionName = this.getProcessDefinitionName(); strategy.appendField(locator, this, "processDefinitionName", buffer, theProcessDefinitionName); theTaskId = this.getTaskId(); strategy.appendField(locator, this, "taskId", buffer, theTaskId); theEventType = this.getEventType(); strategy.appendField(locator, this, "eventType", buffer, theEventType); theCreated = (true?this.getCreated(): 0L); strategy.appendField(locator, this, "created", buffer, theCreated); theFire = this.getFire(); strategy.appendField(locator, this, "fire", buffer, theFire); theProcessInstance = this.getProcessInstance(); strategy.appendField(locator, this, "processInstance", buffer, theProcessInstance); theComment = this.getComment(); strategy.appendField(locator, this, "comment", buffer, theComment);
sibling.getStatus() != TaskStatus.DONE) { DeferredEvent deferredEvent = new DeferredEvent(); deferredEvent.setEventType(EventType.FORCE_ABORT); sibling.setStatus(TaskStatus.ABORTING); deferredEvent.setProcessInstance(sibling); deferredEvent.setComment("aborting sibling"); sibling.getDeferredEvents().add(deferredEvent); DeferredEvent deferredEvent = new DeferredEvent(); deferredEvent.setEventType(EventType.SUBPROCESS_END); deferredEvent.setProcessInstance(parent); parent.getDeferredEvents().add(deferredEvent); deferredEvent.setComment("process instance: "+processInstance.getId());
/** * Sets the value of the created property. * */ public void setCreated(long value) { getMetadata().removeUnknown("created"); if (m_validationSession!= null) { m_validationSession.set(this, "created", value, created); } this.created = value; if (m_validationSession!= null) { m_validationSession.invokeListeners(this, "created", value, created); } }
/** * Create an instance of {@link DeferredEvent } * */ public DeferredEvent createDeferredEvent() { return new DeferredEvent(); }
public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { strategy.appendStart(locator, this, buffer); appendFields(locator, buffer, strategy); strategy.appendEnd(locator, this, buffer); return buffer; }
public void doAction() { getWorkflowManager().executeDeferredEvent(finalDeferredEvent.getId()); }}); if (lockTemplate.doAction()) {
lhsId = (true?this.getId(): 0L); long rhsId; rhsId = (true?that.getId(): 0L); if (!strategy.equals(LocatorUtils.property(thisLocator, "id", lhsId), LocatorUtils.property(thatLocator, "id", rhsId), lhsId, rhsId)) { return false; lhsProcessDefinitionName = this.getProcessDefinitionName(); String rhsProcessDefinitionName; rhsProcessDefinitionName = that.getProcessDefinitionName(); if (!strategy.equals(LocatorUtils.property(thisLocator, "processDefinitionName", lhsProcessDefinitionName), LocatorUtils.property(thatLocator, "processDefinitionName", rhsProcessDefinitionName), lhsProcessDefinitionName, rhsProcessDefinitionName)) { return false; lhsTaskId = this.getTaskId(); Long rhsTaskId; rhsTaskId = that.getTaskId(); if (!strategy.equals(LocatorUtils.property(thisLocator, "taskId", lhsTaskId), LocatorUtils.property(thatLocator, "taskId", rhsTaskId), lhsTaskId, rhsTaskId)) { return false; lhsEventType = this.getEventType(); EventType rhsEventType; rhsEventType = that.getEventType(); if (!strategy.equals(LocatorUtils.property(thisLocator, "eventType", lhsEventType), LocatorUtils.property(thatLocator, "eventType", rhsEventType), lhsEventType, rhsEventType)) { return false; lhsCreated = (true?this.getCreated(): 0L); long rhsCreated; rhsCreated = (true?that.getCreated(): 0L); if (!strategy.equals(LocatorUtils.property(thisLocator, "created", lhsCreated), LocatorUtils.property(thatLocator, "created", rhsCreated), lhsCreated, rhsCreated)) { return false;
ret.append(sb); ret.append("EVENT: "); ret.append(deferredEvent.getId()); ret.append(" "); ret.append(deferredEvent.getEventType()); ret.append(" "); ret.append(deferredEvent.getComment()); ret.append(" process:"); ret.append(deferredEvent.getProcessDefinitionName()); ret.append(" processInstanceId:"); ret.append(deferredEvent.getProcessInstance().getId()); ret.append(" taskId:"); ret.append(deferredEvent.getTaskId()); ret.append("\n");
/** * Sets the value of the id property. * */ public void setId(long value) { getMetadata().removeUnknown("id"); if (m_validationSession!= null) { m_validationSession.set(this, "id", value, id); } this.id = value; if (m_validationSession!= null) { m_validationSession.invokeListeners(this, "id", value, id); } }
theId = (true?this.getId(): 0L); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "id", theId), currentHashCode, theId); theProcessDefinitionName = this.getProcessDefinitionName(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "processDefinitionName", theProcessDefinitionName), currentHashCode, theProcessDefinitionName); theTaskId = this.getTaskId(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "taskId", theTaskId), currentHashCode, theTaskId); theEventType = this.getEventType(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "eventType", theEventType), currentHashCode, theEventType); theCreated = (true?this.getCreated(): 0L); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "created", theCreated), currentHashCode, theCreated); theFire = this.getFire(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "fire", theFire), currentHashCode, theFire); theProcessInstance = this.getProcessInstance(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "processInstance", theProcessInstance), currentHashCode, theProcessInstance); theComment = this.getComment(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "comment", theComment), currentHashCode, theComment);
if (tb instanceof TaskTry) { TaskTry taskTry = (TaskTry) tb; DeferredEvent deferredEvent = new DeferredEvent(); deferredEvent.setProcessDefinitionName(taskTry.getProcessDefinitionName()); deferredEvent.setTaskId(taskTry.getTaskId()); deferredEvent.setProcessInstance(processInstance); long now = new Date().getTime(); deferredEvent.setCreated(now); deferredEvent.setEventType(EventType.DEFERRED); deferredEvent.setFire(now+taskTry.getTimeoutValue()); deferredEvent.setComment(trimComment(taskTry.toString())); processInstance.getDeferredEvents().add(deferredEvent); processInstance.setDeferredEvent(deferredEvent); log.debug("recreating new deferred event for timeout: fire: {}",deferredEvent.getFire());
@Transactional public void executeDeferredEvent(long deferredEventId) { DeferredEvent deferredEvent = getWorkflowDAO().findDeferredEvent(deferredEventId); log.debug("fired deferred event {} for {} {}",deferredEvent.getEventType(),deferredEvent.getProcessInstance().getId(),deferredEvent.getComment()); ProcessInstance processInstance = deferredEvent.getProcessInstance(); switch (deferredEvent.getEventType()) { case DEFERRED: ProcessInstanceUtils.clearQueue(processInstance, TaskStatus.TIMEOUT); lastAudit.setComment(trimComment(lastAudit.getComment()+" Timed out at "+now)); processInstance.setProcessDefinitionName(deferredEvent.getProcessDefinitionName()); processInstance.setTaskId(deferredEvent.getTaskId()); break; case FORCE_ABORT: log.error("Unexpected event type {} (ignoring)",deferredEvent.getEventType()); return; deferredEvent.setEventType(EventType.DONE);
/** * Sets the value of the comment property. * * @param value * allowed object is * {@link String } * */ public void setComment(String value) { getMetadata().removeUnknown("comment"); if (m_validationSession!= null) { m_validationSession.set(this, "comment", value, comment); } this.comment = value; if (m_validationSession!= null) { m_validationSession.invokeListeners(this, "comment", value, comment); } }
/** * Sets the value of the fire property. * * @param value * allowed object is * {@link Long } * */ public void setFire(Long value) { getMetadata().removeUnknown("fire"); if (m_validationSession!= null) { m_validationSession.set(this, "fire", value, fire); } this.fire = value; if (m_validationSession!= null) { m_validationSession.invokeListeners(this, "fire", value, fire); } }