stackoverflow上有一个question,但是在我的情况下,我从控制台运行节点:deployNodes
,runnodes
。因此,没有StartedMockNode
类可以使用transaction{}
函数
它有什么问题,我该如何解决?
这是引发异常的方法
serviceHub.withEntityManager {
persist(callbackData)
}
答案 0 :(得分:0)
通过Hayk在Slack上进行调试。
DB事务由Corda处理。这些交易仅在两个点生成。在节点启动期间,corda服务可以调用数据库查询,插入以及流内部。
在这种情况下,正在从节点启动外部访问数据库,而不是在流程调用期间访问数据库。
为避免这种情况,需要创建一个新流程来处理导致错误的数据库操作。 db操作仍可以保留在corda服务内部,但是必须从流中调用它。必须。
此流程不需要响应者。它应该用@StartableByService
注释,并且不需要@InitiatingFlow
(需要仔细检查那个)。 call
的内容仅调用db操作并将结果返回给调用方。
TLDR-所有数据库操作都必须从流内部或在节点启动期间调用。