Beispiel #1
0
 /**
  * {@inheritdoc}
  */
 public function scheduleJob(UUID $executionId, $handlerType, $data, \DateTimeInterface $runAt = NULL)
 {
     $id = UUID::createRandom();
     $handlerType = (string) $handlerType;
     $job = new Job($id, $executionId, $handlerType, $data);
     $job->setRunAt($runAt);
     $time = $job->getRunAt();
     if ($time !== NULL) {
         $time = $time->getTimestamp();
     }
     $this->engine->getConnection()->insert('#__bpmn_job', ['id' => $job->getId(), 'execution_id' => $job->getExecutionId(), 'handler_type' => $job->getHandlerType(), 'handler_data' => new BinaryData(serialize($job->getHandlerData())), 'created_at' => time(), 'run_at' => $time]);
     $this->engine->info('Created job <{job}> of type "{handler}" targeting execution <{execution}>', ['job' => (string) $job->getId(), 'handler' => $handlerType, 'execution' => (string) $executionId]);
     return $this->scheduledJobs[] = $job;
 }
Beispiel #2
0
 protected function unserializeJob(array $row)
 {
     $job = new Job($row['id'], $row['execution_id'], $row['handler_type'], unserialize(BinaryData::decode($row['handler_data'])), new \DateTimeImmutable('@' . $row['created_at']), $row['retries'], $row['lock_owner']);
     $job->setExternalId($row['external_id']);
     if ($row['scheduled_at'] !== NULL) {
         $job->setScheduledAt(new \DateTimeImmutable('@' . $row['scheduled_at'], new \DateTimeZone('UTC')));
     }
     if ($row['run_at'] !== NULL) {
         $job->setRunAt(new \DateTimeImmutable('@' . $row['run_at'], new \DateTimeZone('UTC')));
     }
     if ($row['locked_at'] !== NULL) {
         $job->setLockedAt(new \DateTimeImmutable('@' . $row['locked_at'], new \DateTimeZone('UTC')));
     }
     $job->setExceptionType($row['exception_type']);
     $job->setExceptionMessage($row['exception_message']);
     if ($row['exception_data'] !== NULL) {
         $job->setExceptionData(unserialize(BinaryData::decode($row['exception_data'])));
     }
     $locked = false;
     if ($row['lock_owner'] !== NULL && $row['locked_at'] !== NULL) {
         if ($row['locked_at'] > time() - $this->engine->getJobExecutor()->getLockTimeout()) {
             $locked = true;
         }
     }
     $job->setLocked($locked);
     return $job;
 }