java - SWF : How can I signal the parent workflow from the child workflow?

标签 java amazon-web-services amazon-swf

我正在尝试向我的父工作流程发出信号以更新其状态变量。父工作流 ID 传递给子工作流的 execute 方法。

@Autowired
private AmazonSimpleWorkflowClient swfClient;
@Autowired
private String swfDomain;

private ParentWorkflowClientExternalFactory clientExternalFactory = new ParentWorkflowClientExternalFactoryImpl(swfClient, swfDomain);

@Override
public Promise<String> childActivityMethod(String parentWorkflowId) {
    ParentWorkflowClientExternal clientExternal = clientExternalFactory.getClient(parentWorkflowId);
    clientExternal.updateState(...);
}

但是,这会在 SWF 代码中引发 NullPointerException(AmazonSimpleWorkflow 为 null):

["java.lang.NullPointerException",{"cause":null,"stackTrace":[{"methodName":"signalWorkflowExecution","fileName":"GenericWorkflowClientExternalImpl.java","lineNumber":87,"className":"com.amazonaws.services.simpleworkflow.flow.worker.GenericWorkflowClientExternalImpl","nativeMethod":false},{"methodName":"signalWorkflowExecution","fileName":"DynamicWorkflowClientExternalImpl.java","lineNumber":167,"className":"com.amazonaws.services.simpleworkflow.flow.DynamicWorkflowClientExternalImpl","nativeMethod":false},...

当我初始化不带参数的 ClientExternalFactory 时:

private ParentWorkflowClientExternalFactory clientExternalFactory = new ParentWorkflowClientExternalFactoryImpl();

抛出的异常是: 必需的属性 genericClient 为 null。这可能是由于通过默认构造函数而不是接受服务和域参数的构造函数实例化工厂造成的。

ParentWorkflow#updateState 执行以下操作:

private MyWorkflowState state;

// This method has @Signal in the interface.
@Override
public void updateState(MyWorkflowState newState) {
    state = newState;
}

有什么建议吗?

最佳答案

工作流界面生成两种类型的客户端。内部和外部的。内部代码预计在工作流程代码内使用,外部代码在工作流程之外使用(例如从 Web 服务器)。 您正在尝试在不受支持的工作流程中使用外部客户端。请改用内部客户端(使用 ParentWorkflowClientFactory 创建)。请参阅Flow Development Guide了解更多信息。

关于java - SWF : How can I signal the parent workflow from the child workflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50050792/

相关文章:

amazon-web-services - 供 Amazon SWF 决策者检查事件任务状态的高级 PHP 库

java - 有没有办法在另一个EMR作业中调用EMR群集的JobFlowId?

java - 在 Java 中使用指定的开始和结束索引查找数组中的最大整数,**递归**

Java:没有 'synchronized'的内存同步什么时候发生?

java - 动态以格式化表格式打印HashMap

amazon-web-services - Serverless框架-如何将模块资源合并到云形成中

python - 在内存中SQLite3共享数据库python

amazon-web-services - 云信息错误:Invalid availability zone: [ap-southeast-2] (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue

amazon-web-services - 在 Amazon SWF 中,我可以滥用决策任务来实际执行工作吗

java - 从 Tomcat 启动时读取用户输入