从终端运行节点时,获取“ java.lang.IllegalStateException:正在期望在当前链上找到事务集”

时间:2019-07-04 14:56:37

标签: jpa corda

stackoverflow上有一个question,但是在我的情况下,我从控制台运行节点:deployNodesrunnodes。因此,没有StartedMockNode类可以使用transaction{}函数

它有什么问题,我该如何解决?

这是引发异常的方法

serviceHub.withEntityManager {
    persist(callbackData)
}

1 个答案:

答案 0 :(得分:0)

通过Hayk在Slack上进行调试。

DB事务由Corda处理。这些交易仅在两个点生成。在节点启动期间,corda服务可以调用数据库查询,插入以及流内部。

在这种情况下,正在从节点启动外部访问数据库,而不是在流程调用期间访问数据库。

为避免这种情况,需要创建一个新流程来处理导致错误的数据库操作。 db操作仍可以保留在corda服务内部,但是必须从流中调用它。必须

此流程不需要响应者。它应该用@StartableByService注释,并且不需要@InitiatingFlow(需要仔细检查那个)。 call的内容仅调用db操作并将结果返回给调用方。

TLDR-所有数据库操作都必须从流内部或在节点启动期间调用。