java - 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(...);
}
但是,这会引发NullPointerException
SWF 代码(AmazonSimpleWorkflow 为空):
["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();
抛出的异常是:The required property genericClient is null. It could be caused by instantiating the factory through the default constructor instead of the one that takes service and domain arguments.
ParentWorkflow#updateState
做这个:
private MyWorkflowState state;
// This method has @Signal in the interface.
@Override
public void updateState(MyWorkflowState newState) {
state = newState;
}
有什么建议吗?
解决方案
从工作流接口生成了两种类型的客户端。内部的和外部的。内部预计将在工作流代码中使用,而外部代码将在工作流之外使用(例如来自 Web 服务器)。您正在尝试在不受支持的工作流中使用外部客户端。请改用内部客户端(使用 ParentWorkflowClientFactory 创建)。有关详细信息,请参阅流程开发指南。
推荐阅读
- node.js - 客户端建立连接时 Socket.io 服务器没有响应
- python - 没有名为“bindsnet.network”的模块
- c# - .NET Core 3.1 中的 Cookie
- mysql - 如果第二个选择为空,如何忽略?
- java - 如何在 Maven 中停止所有这些详细的输出
- google-apps-script - 使用脚本在整个 Google Drive 文件夹、页眉、页脚、谷歌文档中查找和替换文本
- css - 在没有 Sass 的情况下更改 Bootstrap 4 排水沟
- electron - 尝试在解压后的 asar 中生成 exe 会导致 exe 被解压到临时目录?
- influxdb - 在 influxdb 子查询数据上结合 LAST 和 Cumulative SUM
- r - R中的汇总表