在Corda flow中,java.lang.IllegalStateException:在同一个InitiatingFlow中尝试initiateFlow()两次

在Corda flow中,java.lang.IllegalStateException:在同一个InitiatingFlow中尝试initiateFlow()两次,corda,Corda,我有以下Corda flow,其中我传入了一个参与方的列表,并尝试与每个参与方启动flow会话: @InitiatingFlow @StartableByRPC class MyFlow(val parties: List<Party>) : FlowLogic<Unit>() { @Suspendable override fun call() { // Flow logic. val flowSessions = pa

我有以下Corda flow,其中我传入了一个
参与方的列表,并尝试与每个参与方启动flow会话:

@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.
    }
}
@InitiatingFlow
@星表
类MyFlow(valparties:List):FlowLogic(){
@暂停
覆盖有趣的调用(){
//流逻辑。
val flowSessions=parties.forEach{party->
发起人(聚会)
}
//流逻辑。
}
}
但是,当我调用它时,我得到以下异常:

java.lang.IllegalStateException:尝试在中启动两次流() 相同的InitiatingFlow com.template。TwoTransactionsFlow@1ba8d137对于 同一方O=PartyB,L=London,C=GB。此文档中不支持此操作 科尔达的版本。或者,您可以通过调用 @InitiatingFlow子流中的initiateFlow()


此异常的原因是什么?

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

你应该:

  • 与给定参与方重复使用现有会话(即,使用
    PartyA
    创建单个
    FlowSession
    ,并使用相同的FlowSession发送
    PartyA
    信息两次)
  • 将子流导入另一个
    @initialingflow
    并在那里创建
    流会话
    (每个
    @initialingflow
    及其内联子流共享相同的流上下文)