堆栈溢出上有一个question,但在我的示例中,我从控制台运行节点:deployNodes,runnodes。所以没有StartedMockNode类可以使用transaction{}函数。
它有什么问题,我怎么能修好它?
下面是引发异常的方法
serviceHub.withEntityManager {
persist(callbackData)
}发布于 2019-07-04 15:21:13
和海克一起在斯拉克上进行了调试。
DB事务由corda处理。这些事务只在两个点生成。在节点启动期间,corda服务可以调用数据库查询和插入以及流的内部。
在这个场景中,数据库是从节点启动外部访问的,而在流调用期间不是这样。
为了避免这种情况,需要创建一个处理导致错误的db操作的新流。db操作仍然可以保存在corda服务中,但必须从流中调用。
此流程不需要响应程序。应该用@StartableByService对其进行注释,而不应该需要@InitiatingFlow (需要对此进行双重检查)。call的内容只需调用db操作并将结果返回给调用者。
TLDR -所有db操作必须在流内部或节点启动期间调用。
https://stackoverflow.com/questions/56890476
复制相似问题