我正在尝试向我的父工作流程发出信号以更新其状态变量。父工作流 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/