【发布时间】:2018-10-16 23:04:29
【问题描述】:
是否可以在运行时更新/修改 Corda 服务对象(单例)的方法(行为)?例如:
如下图所示,Corda 服务对象中有一个函数,它跟踪库更新,对状态数据进行一些处理,然后对外部系统进行 API 调用。在某些时候,处理状态数据的逻辑可能会发生变化,并且希望在运行时修改行为而不重新启动我的 Corda 节点。
Corda 服务是正确的做法吗? Java 工具 API 或 Java Assist 或任何其他字节码重写工具可能会有所帮助吗?
private fun trackVaultAndUpdateExternalSystem() {
val ourIdentity = ourIdentity()
serviceHub.vaultService.trackBy<State>().updates.subscribe { update: Vault.Update<State> ->
update.produced.forEach { message: StateAndRef<State> ->
val state = message.state.data
if (state.recipient == ourIdentity) {
// do some processing and then make an API call to the external system
}
}
}
【问题讨论】:
-
为什么要在运行时改变它?
-
运行时我的意思是不停止corda节点,然后更新corda服务对象并重新启动节点。比如动态更新逻辑而不重新启动corda节点。我猜整个服务对象只能有一个实例。
标签: corda