2015-03-30 5 views
0

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

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 событий рабочего процесса консоли для выполнения потерпеть неудачу following-

["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;", []] 
 
}]

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

ответ

0

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

+0

Спасибо Максиму за ответ, я также использовал java sdk для отправки сигнала, тогда это была та же проблема с выполнением рабочего процесса. Ошибка была «com.amazonaws.services.simpleworkflow.flow.DataConverterException», {"cause": ["com.fasterxml.jackson.core.JsonParseException"]} «Не могли бы вы указать на некоторые документы или ссылки, которые могут быть – user3778220

+0

Что было в сигнальном поле, как оно появилось в истории? –

+0

Ниже приведено содержание сигнала из истории рабочего процесса - { EventTimestamp: Пт Апр 03 15:33:26 IST 2015, EventType: WorkflowExecutionSignaled, EventId : 5, WorkflowExecutionSignaledEventAttributes: { SignalName: SIGNAL1, Входные данные:, ExternalInitiatedEventId: 0 }, }, – user3778220

0

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

Смежные вопросы