【发布时间】:2019-12-21 04:13:03
【问题描述】:
我创建了一个自定义服务,我想在节点启动时运行它,如果该帐户不存在,则创建一个默认帐户。
我的班级:
import com.r3.corda.lib.accounts.workflows.services.AccountService
import com.r3.corda.lib.accounts.workflows.services.KeyManagementBackedAccountService
import net.corda.core.node.AppServiceHub
import net.corda.core.node.services.CordaService
import net.corda.core.serialization.SingletonSerializeAsToken
@CordaService
class MyIdentityService(private val serviceHub: AppServiceHub) : SingletonSerializeAsToken() {
init {
val numberOfResults: Int = serviceHub.cordaService(KeyManagementBackedAccountService::class.java).accountInfo("acctName").size
when(numberOfResults){
0 -> { println("Identity service account does not exist, account is being created...")
serviceHub.cordaService(KeyManagementBackedAccountService::class.java).createAccount("acctName")
println("Identity service account created.")
}
else -> println("Identity service account already exists.")
}
}
}
节点启动过程中的错误日志:
Identity service account does not exist, account is being created...
[ERROR] 04:53:44+0100 [main] internal.Node. - Corda service com.example.flows.MyIdentityService failed to instantiate.
Reason was: null [errorCode=1gal9sv, moreInformationAt=https://errors.corda.net/OS/4.3-RC01/1gal9sv]
错误日志对于查找根本原因没有多大帮助。
我的服务定义有问题吗?
有没有人在使用自定义服务时遇到过类似的错误?
【问题讨论】:
-
KeyManagementBackedAccountService.createAccount内部发生错误。在此函数中放置断点并使用 Intellij 启用远程调试。要启用远程调试,您必须在 Intellij 中创建Remote Debugging配置并使用以下命令启动节点:docs.corda.net/node-commandline.html#enabling-remote-debugging,一旦节点使用该命令启动;点击配置旁边的 bug 图标,Intellij 将附加到节点的 Java 进程,您可以开始跟踪 Intellij 内部正在运行的代码。 -
感谢@AdelRustum 的建议。我会试一试并报告。