private boolean executeBody(final XpdlExecution xpdlExecution) { if (this.bodyStartAutomatically()) { final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo( xpdlExecution.getXpdlInstance().getPackageDefinitionUUID(), xpdlExecution.getXpdlInstance().getProcessDefinitionUUID(), xpdlExecution.getXpdlInstance().getUUID(), xpdlExecution.getCurrentActivityInstanceUUID(), this.getActivityType(), this.getActivityId(), xpdlExecution.getIterationId(), xpdlExecution.getActivityInstanceId(), xpdlExecution.getScopeVariables()); ServiceEnvTool.getRecorder().recordBodyStarted(activityInstanceCurrentInfo); } return this.executeBusinessLogic(xpdlExecution); }
protected void executeActivityInstance(final Execution internalExecution) { final boolean canContinue = executeBody(internalExecution); if (canContinue) { end(internalExecution); } else { internalExecution.waitForSignal(); } }
protected void end(XpdlExecution xpdlExecution) { EnvTool.getRecorder().recordBodyEnded(this, xpdlExecution); if (!XpdlExecution.MAIN_INSTANCE_NAME.equals(xpdlExecution.getActivityInstanceId())) { // TODO: check variable values for transition conditions XpdlExecution activityInstanceExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); activityInstanceExecution.end(); XpdlExecution parent = activityInstanceExecution.getParent(); parent.removeExecution(activityInstanceExecution); signal(parent, ACT_INSTANCE_FINISHED, null); } else { executeSplit(xpdlExecution, true); } }
private boolean executeBody(XpdlExecution execution) { if (bodyStartAutomatically()) { EnvTool.getRecorder().recordBodyStarted(this, execution); } return executeBusinessLogic(execution); }
public void finish(String userId, boolean assignTask) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Finishing task : " + taskUUID + " on activity " + activityId); } final Recorder recorder = EnvTool.getRecorder(); if (assignTask) { this.userId = userId; recorder.recordTaskAssigned(this, userId, candidates, userId); } this.state = TaskState.FINISHED; recorder.recordTaskFinished(this, EnvTool.getUserId()); HookExecutor.executeHooks(activityDef.getJavaHooks(), xpdlExecution, activityId, JavaHook.Type.taskOnFinish); activityDef.signal(xpdlExecution, AbstractActivity.BODY_FINISHED, null); this.xpdlExecution = null; }
final InternalActivityDefinition activity = execution.getNode(); if (AbstractActivity.BODY_FINISHED.equals(signal)) { end(internalExecution); } else if (AbstractActivity.ACT_INSTANCE_FINISHED.equals(signal)) { if (activity.getMultiInstantiationDefinition() != null || activity.getMultipleInstancesInstantiator() != null) { removeChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false); final int maxIterations = internalExecution.getWaitingForActivityInstanceNb(); if (0 < maxIterations && maxIterations <= internalExecution.getActivityInstanceNb()) { endChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false); executeActivityInstance(internalExecution); } else if (EventConstants.DEADLINE.equals(signal)) { final Long id = (Long) parameters.get("id"); DeadlineDefinition deadline = null; if (id != null) { deadline = getMatchingDeadline(id, activity.getDeadlines()); } else { final String className = (String) parameters.get("className"); deadline = getCompatibleDeadline(className, activity.getDeadlines()); destroyEvents(internalExecution); if (activity.getMultiInstantiationDefinition() != null || activity.getMultipleInstancesInstantiator() != null) { if (internalExecution.getParent() != null) {
joinOK = this.executeJoin(xpdlExecution); if (joinOK) { if (AbstractActivity.LOG.isLoggable(Level.FINE)) { AbstractActivity.cancelJoinXORIncomingTransitions(xpdlExecution); this.createNewIteration(xpdlExecution); int childId = 0; for (final Object value : actInstDescr.getVariableValues()) { XpdlExecution childExec = this.createChildExecution(xpdlExecution, childId); childExec = (XpdlExecution) childExec.createScope(xpdlExecution.getNode()); this.executeActivityInstance(childExec); childId++; this.executeActivityInstance(xpdlExecution);
protected void end(final XpdlExecution xpdlExecution) { final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo( xpdlExecution.getXpdlInstance().getPackageDefinitionUUID(), xpdlExecution.getXpdlInstance().getProcessDefinitionUUID(), xpdlExecution.getXpdlInstance().getUUID(), xpdlExecution.getCurrentActivityInstanceUUID(), this.getActivityType(), this.getActivityId(), xpdlExecution.getIterationId(), xpdlExecution.getActivityInstanceId(), xpdlExecution.getScopeVariables()); ServiceEnvTool.getRecorder().recordBodyEnded(activityInstanceCurrentInfo); if (!XpdlExecution.MAIN_INSTANCE_NAME.equals(xpdlExecution.getActivityInstanceId())) { final XpdlExecution activityInstanceExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); activityInstanceExecution.end(); final XpdlExecution parent = activityInstanceExecution.getParent(); parent.removeExecution(activityInstanceExecution); this.signal(parent, AbstractActivity.ACT_INSTANCE_FINISHED, null); } else { this.executeSplit(xpdlExecution, true); } }
protected void executeActivityInstance(final XpdlExecution xpdlExecution) { xpdlExecution.setCurrentActivityInstanceUUID( ServiceEnvTool.getUUIDGenerator(). getActivityInstanceUUID(xpdlExecution.getXpdlInstance().getUUID(), this.activityId)); final Recorder recorder = ServiceEnvTool.getRecorder(); final XpdlInstance xpdlInstance = xpdlExecution.getXpdlInstance(); final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo( xpdlInstance.getPackageDefinitionUUID(), xpdlInstance.getProcessDefinitionUUID(), xpdlInstance.getUUID(), xpdlExecution.getCurrentActivityInstanceUUID(), this.getActivityType(), this.getActivityId(), xpdlExecution.getIterationId(), xpdlExecution.getActivityInstanceId(), xpdlExecution.getScopeVariables()); recorder.recordEnterActivity(activityInstanceCurrentInfo); final boolean canContinue = this.executeBody(xpdlExecution); if (canContinue) { this.end(xpdlExecution); } else { xpdlExecution.waitForSignal(); } }
cancelJoinXORIncomingTransitions(execution); final MultiInstantiationDefinition instantiator = activity.getMultipleInstancesInstantiator(); if (multiInstantiator != null || instantiator != null) { instantiateMultiInstanceActivity(execution); } else { if (ActivityUtil.evaluateLoopCondition(activity, execution)) { final Execution newExecution = execution.createChildExecution(execution.getNode().getName()); initializeActivityInstance(newExecution, null); startActivityInstance(newExecution); } else { terminateInstanceIfNoOutgoingTransitions(execution); executeSplit(execution, false); initializeActivityInstance(newExecution, null); startActivityInstance(newExecution);
signal(parent, AbstractActivity.ACT_INSTANCE_FINISHED, null); if (!internalExecution.isFinished()) { destroyEvents(internalExecution); parent.removeExecution(internalExecution); execute(parent, false); } else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true);
final List<Map<String, Object>> contexts = getContextsFromMultiInstantiator(execution, activity, instantiator); execution.setWaitingForActivityInstanceNb(contexts.size()); int childId = 0; final Execution childExec = createChildExecution(execution, childId); initializeActivityInstance(childExec, variables); activitiesToStart.add(childExec); } catch (final StaleStateException sse) { putActivityInFailedStateIfNecessary(recorder, caughtException, childExec); caughtException = null; final Execution childExec = createChildExecution(execution, childId); Variable multiInstVar = null; try { initializeActivityInstance(childExec, variables); activitiesToStart.add(childExec); } catch (final RuntimeException e) { putActivityInFailedStateIfNecessary(recorder, caughtException, childExec); caughtException = null; final List<UnRollbackableException> unrollBackableExceptions = startActivityInstances(activitiesToStart); if (!unrollBackableExceptions.isEmpty()) { throw unrollBackableExceptions.get(0);// throw the first exception
public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) { XpdlExecution xpdlExecution = (XpdlExecution) execution; if (BODY_FINISHED.equals(signal)) { end(xpdlExecution); } else if (ACT_INSTANCE_FINISHED.equals(signal)) { xpdlExecution.setWaitingForActivityInstanceNb(xpdlExecution.getWaitingForActivityInstanceNb() - 1); if (xpdlExecution.getWaitingForActivityInstanceNb() == 0) { // TODO: cancel remaining activity instances executeSplit(xpdlExecution, false); } } else if (signal != null && deadlines != null) { for (String deadline : deadlines) { if (deadline.equals(signal)) { Authentication.setUserId("SYSTEM"); // By default, a deadline does not propagate execution xpdlExecution.waitForSignal(); String activityId = xpdlExecution.getNode().getName(); JavaHook javaHook = new JavaHook(signal, JavaHook.Type.onDeadline, true); HookExecutor.executeHook(xpdlExecution, activityId, javaHook); return; } } } }
endMultiInstantiation(internalExecution); } else if (activity.isInALoop()) { endLoop(internalExecution); } else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true);
List<Transition> transitionsToTake = new ArrayList<Transition>(); for (Transition t : transitions) { if (evaluateTransition((TransitionImpl) t, xpdlExecution)) { transitionsToTake.add(t); XpdlExecution childExecution = createChildExecution(xpdlExecution, childId++); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Execution " + childExecution.getName() + "is taking transition " + t);
protected void skip(final Execution internalExecution) { final ActivityDefinition activity = internalExecution.getNode(); if (activity.getDynamicExecutionSummary() != null) { try { if (GroovyExpression.isGroovyExpression(activity.getDynamicExecutionSummary())) { final Object dynamicExecutionSummary = GroovyUtil.evaluate(activity.getDynamicExecutionSummary(), null, internalExecution.getActivityInstanceUUID(), false, false); if (dynamicExecutionSummary != null) { internalExecution.getActivityInstance().setDynamicExecutionSummary(dynamicExecutionSummary.toString()); } } else { internalExecution.getActivityInstance().setDynamicExecutionSummary(activity.getDynamicExecutionSummary()); } } catch (final Exception e) { throw new BonitaWrapperException(new BonitaRuntimeException("Error while ending execution: " + activity.getDynamicExecutionSummary(), e)); } } if (activity.getMultiInstantiationDefinition() != null || activity.getMultipleInstancesInstantiator() != null) { removeChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false); } else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true); } }
destroyEvents(execution); destroyEvents(internalExecution); signal(parent, AbstractActivity.ACT_INSTANCE_FINISHED, null);
private void startActivityInstance(final Execution internalExecution) { final InternalActivityDefinition activity = internalExecution.getNode(); final ActivityInstanceUUID activityUUID = internalExecution.getActivityInstanceUUID(); try { initializeEvents(internalExecution); } catch (final GroovyException e) { final String message = "Error while initializing events: "; throw new BonitaWrapperException(new BonitaRuntimeException(message, e)); } if (activity.isAsynchronous()) { final EventService eventService = EnvTool.getEventService(); String uuid = internalExecution.getEventUUID(); if (uuid == null) { uuid = UUID.randomUUID().toString(); } final String eventName = BonitaConstants.ASYNC_EVENT_PREFIX + activityUUID; internalExecution.setEventUUID(uuid); internalExecution.lock("async continuation " + eventName); final Job async = JobBuilder.asyncJob(eventName, internalExecution.getInstance().getRootInstanceUUID(), uuid, internalExecution.getInstance().getProcessInstanceUUID()); eventService.storeJob(async); } else { executeActivityInstance(internalExecution); } }
if (instance.getTransitionStatus(tr).getState().equals(TransitionState.READY)) { final AbstractActivity currentActivity = (AbstractActivity) currentNode.getBehaviour(); final List<IterationDescriptor> itDescs = currentActivity.getIterationDescriptors(); if (itDescs != null && !itDescs.isEmpty()) { for (final IterationDescriptor itDesc : itDescs) { AbstractActivity.cancelJoinXORIncomingTransitions(instance, sourceNode, initialNode);