Ejemplo n.º 1
0
 /**
  * @param TaskListPosition $parentTaskListPosition
  * @param array $processDefinition
  * @param bool $syncLogMessages
  * @param string $target
  * @param WorkflowMessage $previousMessage
  * @throws \InvalidArgumentException
  * @return StartSubProcess
  */
 public static function at(TaskListPosition $parentTaskListPosition, array $processDefinition, $syncLogMessages, $target, WorkflowMessage $previousMessage = null)
 {
     if (!is_bool($syncLogMessages)) {
         throw new \InvalidArgumentException("Argument syncLogMessages must be of type boolean");
     }
     if (!is_string($target)) {
         throw new \InvalidArgumentException("Target must be string");
     }
     if (empty($target)) {
         throw new \InvalidArgumentException('Target must be a non empty string');
     }
     $previousMessageArrayOrNull = is_null($previousMessage) ? null : $previousMessage->toServiceBusMessage()->toArray();
     $payload = ['parent_task_list_position' => $parentTaskListPosition->toString(), 'sync_log_messages' => $syncLogMessages, 'sub_process_definition' => $processDefinition, 'previous_message' => $previousMessageArrayOrNull, 'origin' => $parentTaskListPosition->taskListId()->nodeName()->toString(), 'target' => $target];
     return new self(self::MSG_NAME, $payload);
 }
Ejemplo n.º 2
0
 /**
  * @param TaskListPosition $position
  * @return bool
  */
 public function equals(TaskListPosition $position)
 {
     return $this->taskListId()->equals($position->taskListId()) && $this->position() === $position->position();
 }
Ejemplo n.º 3
0
 /**
  * @param TaskListPosition $taskListPosition
  * @param WorkflowMessage|LogMessage $lastAnswer
  * @throws \RuntimeException If process cannot be found
  * @throws \Exception If error occurs during processing
  */
 private function continueProcessAt(TaskListPosition $taskListPosition, $lastAnswer)
 {
     $process = $this->processRepository->get($taskListPosition->taskListId()->processId());
     if (is_null($process)) {
         throw new \RuntimeException(sprintf("Last received message %s (%s) contains unknown processId. A process with id %s cannot be found!", $lastAnswer->getMessageName(), $lastAnswer->uuid()->toString(), $taskListPosition->taskListId()->processId()->toString()));
     }
     $this->beginTransaction();
     try {
         $process->receiveMessage($lastAnswer, $this->workflowEngine);
         $this->commitTransaction();
     } catch (\Exception $ex) {
         $this->rollbackTransaction();
         throw $ex;
     }
     if ($process->isFinished()) {
         $this->processorEventQueue->enqueue($this->events()->getNewActionEvent('process_did_finish', $this, ['process_id' => $process->processId()->toString(), 'finished_at' => $lastAnswer->createdAt()->format(\DateTime::ISO8601), 'succeed' => $process->isSuccessfulDone()]));
     }
     if ($process->isSubProcess() && $process->isFinished()) {
         if ($process->isSuccessfulDone()) {
             $this->informParentProcessAboutSubProcess($process, true, $lastAnswer);
         } else {
             if (!$lastAnswer instanceof LogMessage) {
                 $lastAnswer = LogMessage::logException(new \RuntimeException("Sub process failed but last message was not a LogMessage"), $process->parentTaskListPosition());
             }
             if (!$lastAnswer->isError()) {
                 $lastAnswer = LogMessage::logErrorMsg($lastAnswer->technicalMsg(), $lastAnswer);
             }
             $this->informParentProcessAboutSubProcess($process, false, $lastAnswer);
         }
     }
 }
 /**
  * @param TaskListPosition $taskListPosition
  */
 private function setTaskListPosition(TaskListPosition $taskListPosition)
 {
     $this->taskListPosition = $taskListPosition;
     $this->setProcessId($taskListPosition->taskListId()->processId());
 }
Ejemplo n.º 5
0
 /**
  * @param Task $task
  * @param TaskListPosition $taskListPosition
  * @param WorkflowMessage $workflowMessage
  * @return LogMessage
  */
 public static function logWrongMessageReceivedFor(Task $task, TaskListPosition $taskListPosition, WorkflowMessage $workflowMessage)
 {
     return new self($taskListPosition->taskListId()->nodeName()->toString(), $taskListPosition, sprintf("Process %s received wrong message with name %s for task %s at position %d", $taskListPosition->taskListId()->processId()->toString(), $workflowMessage->messageName(), get_class($task), $taskListPosition->position()), self::ERROR_WRONG_MESSAGE_RECEIVED, array('process_id' => $taskListPosition->taskListId()->processId()->toString(), 'task_list_position' => $taskListPosition->position(), 'task_class' => get_class($task), 'task_as_json' => json_encode($task->getArrayCopy()), 'message_name' => $workflowMessage->messageName()));
 }
Ejemplo n.º 6
0
 public static function at(TaskListPosition $taskListPosition, array $payload = array())
 {
     $payload['taskListPosition'] = $taskListPosition->toString();
     return parent::occur($taskListPosition->taskListId()->processId()->toString(), $payload);
 }