在Corda流中,java.lang.IllegalStateException:尝试在同一InitiatingFlow中两次两次初始化itikFlow()

时间:2018-10-08 15:54:15

标签: corda

我有以下Corda流,我在其中传递了Party列表,并尝试与每个流会话发起流会话:

@InitiatingFlow
@StartableByRPC
class MyFlow(val parties: List<Party>) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        // Flow logic.

        val flowSessions = parties.forEach { party ->
            initiateFlow(party)
        }

        // Flow logic.
    }
}

但是,当我调用它时,出现以下异常:

  

java.lang.IllegalStateException:尝试在两次中初始化InitialFlow()   相同的InitiatingFlow com.template.TwoTransactionsFlow@1ba8d137   同一方O = PartyB,L =伦敦,C = GB。这不被支持   版本的Corda。或者,您可以通过调用以下命令来启动新流程   @InitiatingFlow子流中的initializeFlow()。

此异常的原因是什么?

1 个答案:

答案 0 :(得分:1)

此异常表示您已尝试在同一流上下文中与同一方发起两次流会话,在这种情况下,因为要传递到流中的parties列表包含重复项。这是不允许的。

您应该:

  1. 重新使用与给定方的现有会话(即与FlowSession创建一个PartyA,并使用同一流程会话两次发送PartyA信息)
  2. 子流到另一个@InitiatingFlow中并在其中创建FlowSession(每个@InitiatingFlow及其内联子流共享相同的流上下文)