Дождитесь сигнала о начале активности (рабочий процесс Amazon)

Я создал рабочий процесс, используя платформу потока Java, предоставленную AWS. Я создал 4 деятельности. Первое действие дождитесь начала сигнала. Затем все действия выполняются синхронно с использованием объекта Promise ‹>. Код реализации рабочего процесса следующий:

public class PaginationWorkflowImpl implements PaginationWorkflow 
{  
private ManualUploadClient operations0 = new ManualUploadClientImpl();
   private DownloadActivityClient operations1 = new DownloadActivityClientImpl();
   private ConvertActivityClient operations2 = new ConvertActivityClientImpl();
   private UploadActivityClient operations3 = new UploadActivityClientImpl();
   final Settable<String> result = new Settable<String>();

   public void paginate() 
   {
     Promise<String> UDone = operations0.Upload(result);
     Promise<String> dnDone = operations1.s3Download(UDone);
     Promise<String> convDone = operations2.pdfToTiff(dnDone);
     operations3.s3Upload(convDone);
   }

   @Override
   public void signal1(String data)  {
      // result.set(data);
       //result.Void();
       Promise<String> ready = Promise.asPromise("ready");
       result.chain(ready);
   }


}

Здесь активность Загрузить ожидает, пока результат объекта будет в состоянии готовности. Поэтому, когда я сигнализирую о рабочем процессе, запускается метод signal1 и переводит объект в состояние готовности. Но как только я сигнализирую о рабочем процессе, выполнение рабочего процесса прекращается.

Я использую nodejs aws api, чтобы сигнализировать о рабочем процессе. Ниже приведен код для того же-

var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: '', secretAccessKey: ''});
AWS.config.update({region: 'us-east-1'});

var swf = new AWS.SWF();
var params = {
  domain: 'HWdemo2', /* required */
  signalName: 'signal1', /* required */
  workflowId: 'PaginationWorkflow', /* required */
  //input: 'true'
  //runId: 'STRING_VALUE'
};
swf.signalWorkflowExecution(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

И ошибка, которую я показываю в консоли событий рабочего процесса AWS для сбоя выполнения, следующая:

["java.util.concurrent.CancellationException", {
  "cause": ["java.lang.NullPointerException", {
    "cause": null,
    "stackTrace": [{
      "methodName": "<init>",
      "fileName": null,
      "lineNumber": -1,
      "className": "java.io.StringReader",
      "nativeMethod": false
    }, {
      "methodName": "createParser",
      "fileName": "JsonFactory.java",
      "lineNumber": 835,
      "className": "com.fasterxml.jackson.core.JsonFactory",
      "nativeMethod": false
    }, {
      "methodName": "readValue",
      "fileName": "ObjectMapper.java",
      "lineNumber": 2098,
      "className": "com.fasterxml.jackson.databind.ObjectMapper",
      "nativeMethod": false
    }, {
      "methodName": "fromData",
      "fileName": "JsonDataConverter.java",
      "lineNumber": 96,
      "className": "com.amazonaws.services.simpleworkflow.flow.JsonDataConverter",
      "nativeMethod": false
    }, {
      "methodName": "signalRecieved",
      "fileName": "POJOWorkflowDefinition.java",
      "lineNumber": 111,
      "className": "com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition",
      "nativeMethod": false
    }, {
      "methodName": "doExecute",
      "fileName": "AsyncDecider.java",
      "lineNumber": 417,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider$1",
      "nativeMethod": false
    }, {
      "methodName": "",
      "fileName": "",
      "lineNumber": 0,
      "className": "--- continuation ---",
      "nativeMethod": false
    }, {
      "methodName": "handleWorkflowExecutionSignaled",
      "fileName": "AsyncDecider.java",
      "lineNumber": 413,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider",
      "nativeMethod": false
    }, {
      "methodName": "processEvent",
      "fileName": "AsyncDecider.java",
      "lineNumber": 251,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider",
      "nativeMethod": false
    }, {
      "methodName": "decide",
      "fileName": "AsyncDecider.java",
      "lineNumber": 496,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider",
      "nativeMethod": false
    }, {
      "methodName": "handleDecisionTask",
      "fileName": "AsyncDecisionTaskHandler.java",
      "lineNumber": 50,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecisionTaskHandler",
      "nativeMethod": false
    }, {
      "methodName": "pollAndProcessSingleTask",
      "fileName": "DecisionTaskPoller.java",
      "lineNumber": 201,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.DecisionTaskPoller",
      "nativeMethod": false
    }, {
      "methodName": "run",
      "fileName": "GenericWorker.java",
      "lineNumber": 94,
      "className": "com.amazonaws.services.simpleworkflow.flow.worker.GenericWorker$PollServiceTask",
      "nativeMethod": false
    }, {
      "methodName": "runWorker",
      "fileName": null,
      "lineNumber": -1,
      "className": "java.util.concurrent.ThreadPoolExecutor",
      "nativeMethod": false
    }, {
      "methodName": "run",
      "fileName": null,
      "lineNumber": -1,
      "className": "java.util.concurrent.ThreadPoolExecutor$Worker",
      "nativeMethod": false
    }, {
      "methodName": "run",
      "fileName": null,
      "lineNumber": -1,
      "className": "java.lang.Thread",
      "nativeMethod": false
    }],
    "message": null,
    "localizedMessage": null,
    "suppressed": ["[Ljava.lang.Throwable;", []]
  }],
  "stackTrace": [{
    "methodName": "execute",
    "fileName": "POJOWorkflowDefinition.java",
    "lineNumber": 66,
    "className": "com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition",
    "nativeMethod": false
  }, {
    "methodName": "doAsync",
    "fileName": "AsyncDecider.java",
    "lineNumber": 70,
    "className": "com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider$WorkflowExecuteAsyncScope",
    "nativeMethod": false
  }],
  "message": null,
  "localizedMessage": null,
  "suppressed": ["[Ljava.lang.Throwable;", []]
}]

Может ли кто-нибудь помочь мне с этой ошибкой, заранее большое спасибо.


person user3778220    schedule 30.03.2015    source источник


Ответы (2)


По умолчанию выполнение рабочего процесса не выполняется, если не удается десериализовать аргументы сигнала. По умолчанию JsonDataConverter используется решателем рабочего процесса, который реализован поверх Jackson. Он ожидает документ JSON в определенном формате. Самый простой способ изучить этот формат - отправить сигнал с помощью сгенерированного интерфейса Java и просмотреть историю рабочего процесса. Затем вы можете просто воспроизвести его в своем коде JavaScript.

person Maxim Fateev    schedule 30.03.2015
comment
Спасибо Максиму за ответ, я также использовал java sdk для отправки сигнала, тогда это была та же проблема с ошибкой выполнения рабочего процесса. Ошибка была com.amazonaws.services.simpleworkflow.flow.DataConverterException, {cause: [com.fasterxml.jackson.core.JsonParseException]} Не могли бы вы указать на некоторые документы или ссылки, которые могут быть полезны. Спасибо - person user3778220; 31.03.2015
comment
Каково было содержание сигнального поля, как оно появилось в истории? - person Maxim Fateev; 01.04.2015
comment
Содержание сигнала из истории рабочего процесса следующее - {EventTimestamp: Fri Apr 03 15:33:26 IST 2015, EventType: WorkflowExecutionSignaled, EventId: 5, WorkflowExecutionSignaledEventAttributes: {SignalName: signal1, Input: data, ExternalInitiatedEventId: 0},}, - person user3778220; 03.04.2015

Рабочий процесс ожидает ввода массива объектов, которые можно преобразовать в строку как json.

person Rohit    schedule 31.03.2015