protected void updateAsyncAfterTargetConfiguration(AsyncContinuationConfiguration currentConfiguration) { ActivityImpl targetActivity = (ActivityImpl) targetScope; List<PvmTransition> outgoingTransitions = targetActivity.getOutgoingTransitions(); AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration(); if (outgoingTransitions.isEmpty()) { targetConfiguration.setAtomicOperation(PvmAtomicOperation.ACTIVITY_END.getCanonicalName()); } else { targetConfiguration.setAtomicOperation(PvmAtomicOperation.TRANSITION_NOTIFY_LISTENER_TAKE.getCanonicalName()); if (outgoingTransitions.size() == 1) { targetConfiguration.setTransitionId(outgoingTransitions.get(0).getId()); } else { TransitionImpl matchingTargetTransition = null; String currentTransitionId = currentConfiguration.getTransitionId(); if (currentTransitionId != null) { matchingTargetTransition = targetActivity.findOutgoingTransition(currentTransitionId); } if (matchingTargetTransition != null) { targetConfiguration.setTransitionId(matchingTargetTransition.getId()); } else { // should not happen since it is avoided by validation throw new ProcessEngineException("Cannot determine matching outgoing sequence flow"); } } } jobEntity.setJobHandlerConfiguration(targetConfiguration); }
protected void updateAsyncAfterTargetConfiguration(AsyncContinuationConfiguration currentConfiguration) { ActivityImpl targetActivity = (ActivityImpl) targetScope; List<PvmTransition> outgoingTransitions = targetActivity.getOutgoingTransitions(); AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration(); if (outgoingTransitions.isEmpty()) { targetConfiguration.setAtomicOperation(PvmAtomicOperation.ACTIVITY_END.getCanonicalName()); } else { targetConfiguration.setAtomicOperation(PvmAtomicOperation.TRANSITION_NOTIFY_LISTENER_TAKE.getCanonicalName()); if (outgoingTransitions.size() == 1) { targetConfiguration.setTransitionId(outgoingTransitions.get(0).getId()); } else { TransitionImpl matchingTargetTransition = null; String currentTransitionId = currentConfiguration.getTransitionId(); if (currentTransitionId != null) { matchingTargetTransition = targetActivity.findOutgoingTransition(currentTransitionId); } if (matchingTargetTransition != null) { targetConfiguration.setTransitionId(matchingTargetTransition.getId()); } else { // should not happen since it is avoided by validation throw new ProcessEngineException("Cannot determine matching outgoing sequence flow"); } } } jobEntity.setJobHandlerConfiguration(targetConfiguration); }
@Override public void validate(MigratingTransitionInstance migratingInstance, MigratingProcessInstance migratingProcessInstance, MigratingTransitionInstanceValidationReportImpl instanceReport) { ActivityImpl targetActivity = (ActivityImpl) migratingInstance.getTargetScope(); if (targetActivity != null && migratingInstance.isAsyncAfter()) { MigratingJobInstance jobInstance = migratingInstance.getJobInstance(); AsyncContinuationConfiguration config = (AsyncContinuationConfiguration) jobInstance.getJobEntity().getJobHandlerConfiguration(); String sourceTransitionId = config.getTransitionId(); if (targetActivity.getOutgoingTransitions().size() > 1) { if (sourceTransitionId == null) { instanceReport.addFailure("Transition instance is assigned to no sequence flow" + " and target activity has more than one outgoing sequence flow"); } else { TransitionImpl matchingOutgoingTransition = targetActivity.findOutgoingTransition(sourceTransitionId); if (matchingOutgoingTransition == null) { instanceReport.addFailure("Transition instance is assigned to a sequence flow" + " that cannot be matched in the target activity"); } } } } }
protected void updateAsyncAfterTargetConfiguration(AsyncContinuationConfiguration currentConfiguration) { ActivityImpl targetActivity = (ActivityImpl) targetScope; List<PvmTransition> outgoingTransitions = targetActivity.getOutgoingTransitions(); AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration(); if (outgoingTransitions.isEmpty()) { targetConfiguration.setAtomicOperation(PvmAtomicOperation.ACTIVITY_END.getCanonicalName()); } else { targetConfiguration.setAtomicOperation(PvmAtomicOperation.TRANSITION_NOTIFY_LISTENER_TAKE.getCanonicalName()); if (outgoingTransitions.size() == 1) { targetConfiguration.setTransitionId(outgoingTransitions.get(0).getId()); } else { TransitionImpl matchingTargetTransition = null; String currentTransitionId = currentConfiguration.getTransitionId(); if (currentTransitionId != null) { matchingTargetTransition = targetActivity.findOutgoingTransition(currentTransitionId); } if (matchingTargetTransition != null) { targetConfiguration.setTransitionId(matchingTargetTransition.getId()); } else { // should not happen since it is avoided by validation throw new ProcessEngineException("Cannot determine matching outgoing sequence flow"); } } } jobEntity.setJobHandlerConfiguration(targetConfiguration); }
@Override public void validate(MigratingTransitionInstance migratingInstance, MigratingProcessInstance migratingProcessInstance, MigratingTransitionInstanceValidationReportImpl instanceReport) { ActivityImpl targetActivity = (ActivityImpl) migratingInstance.getTargetScope(); if (targetActivity != null && migratingInstance.isAsyncAfter()) { MigratingJobInstance jobInstance = migratingInstance.getJobInstance(); AsyncContinuationConfiguration config = (AsyncContinuationConfiguration) jobInstance.getJobEntity().getJobHandlerConfiguration(); String sourceTransitionId = config.getTransitionId(); if (targetActivity.getOutgoingTransitions().size() > 1) { if (sourceTransitionId == null) { instanceReport.addFailure("Transition instance is assigned to no sequence flow" + " and target activity has more than one outgoing sequence flow"); } else { TransitionImpl matchingOutgoingTransition = targetActivity.findOutgoingTransition(sourceTransitionId); if (matchingOutgoingTransition == null) { instanceReport.addFailure("Transition instance is assigned to a sequence flow" + " that cannot be matched in the target activity"); } } } } }
@Override public void execute(AsyncContinuationConfiguration configuration, ExecutionEntity execution, CommandContext commandContext, String tenantId) { LegacyBehavior.repairMultiInstanceAsyncJob(execution); PvmAtomicOperation atomicOperation = findMatchingAtomicOperation(configuration.getAtomicOperation()); ensureNotNull("Cannot process job with configuration " + configuration, "atomicOperation", atomicOperation); // reset transition id. String transitionId = configuration.getTransitionId(); if (transitionId != null) { PvmActivity activity = execution.getActivity(); TransitionImpl transition = (TransitionImpl) activity.findOutgoingTransition(transitionId); execution.setTransition(transition); } Context.getCommandInvocationContext() .performOperation(atomicOperation, execution); }
@Override public void validate(MigratingTransitionInstance migratingInstance, MigratingProcessInstance migratingProcessInstance, MigratingTransitionInstanceValidationReportImpl instanceReport) { ActivityImpl targetActivity = (ActivityImpl) migratingInstance.getTargetScope(); if (targetActivity != null && migratingInstance.isAsyncAfter()) { MigratingJobInstance jobInstance = migratingInstance.getJobInstance(); AsyncContinuationConfiguration config = (AsyncContinuationConfiguration) jobInstance.getJobEntity().getJobHandlerConfiguration(); String sourceTransitionId = config.getTransitionId(); if (targetActivity.getOutgoingTransitions().size() > 1) { if (sourceTransitionId == null) { instanceReport.addFailure("Transition instance is assigned to no sequence flow" + " and target activity has more than one outgoing sequence flow"); } else { TransitionImpl matchingOutgoingTransition = targetActivity.findOutgoingTransition(sourceTransitionId); if (matchingOutgoingTransition == null) { instanceReport.addFailure("Transition instance is assigned to a sequence flow" + " that cannot be matched in the target activity"); } } } } }
@Override public void execute(AsyncContinuationConfiguration configuration, ExecutionEntity execution, CommandContext commandContext, String tenantId) { LegacyBehavior.repairMultiInstanceAsyncJob(execution); PvmAtomicOperation atomicOperation = findMatchingAtomicOperation(configuration.getAtomicOperation()); ensureNotNull("Cannot process job with configuration " + configuration, "atomicOperation", atomicOperation); // reset transition id. String transitionId = configuration.getTransitionId(); if (transitionId != null) { PvmActivity activity = execution.getActivity(); TransitionImpl transition = (TransitionImpl) activity.findOutgoingTransition(transitionId); execution.setTransition(transition); } Context.getCommandInvocationContext() .performOperation(atomicOperation, execution); }
@Override public void execute(AsyncContinuationConfiguration configuration, ExecutionEntity execution, CommandContext commandContext, String tenantId) { LegacyBehavior.repairMultiInstanceAsyncJob(execution); PvmAtomicOperation atomicOperation = findMatchingAtomicOperation(configuration.getAtomicOperation()); ensureNotNull("Cannot process job with configuration " + configuration, "atomicOperation", atomicOperation); // reset transition id. String transitionId = configuration.getTransitionId(); if (transitionId != null) { PvmActivity activity = execution.getActivity(); TransitionImpl transition = (TransitionImpl) activity.findOutgoingTransition(transitionId); execution.setTransition(transition); } Context.getCommandInvocationContext() .performOperation(atomicOperation, execution); }