如何在ScheduableState / ScheduableFlow的单独CorDapps中连接状态和流

时间:2018-04-20 06:05:57

标签: corda

我们一直遵循模板(Corda v1.0以后)中的相同框架,在我们的开发工作中将ContractAndStates和Flow分成2个CorDapps,但在使用SchedulableFlow时遇到了一些问题。由于依赖性,似乎SchedulableState和SchedulableFlow需要在同一个CorDapp中。我们遵循心跳CorDapp示例来创建我们的ScheduabeState以启动循环流(https://github.com/joeldudleyr3/heartbeat)。

override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
   // A heartbeat will be emitted every second.
   // We get the time when the scheduled activity will occur in the constructor rather than in this method. This is
   // because calling Instant.now() in nextScheduledActivity returns the time at which the function is called, rather
   // than the time at which the state was created.
   return ScheduledActivity(flowLogicRefFactory.create(HeartbeatFlow::class.java, thisStateRef), nextActivityTime) 

由于ScheduableState中的这种依赖性(见上文),我们必须在与ContractAndState相同的CorDapp中创建流,我们决定不这样做。相反,我们的解决方法是在春天后端进行时间安排。

目前,要向流CorDapp添加依赖项,需要在build.gradle中添加Flow CorDapp项目,ContractAndState。要使ContractAndState依赖于流,您不能将依赖项添加到其build.gradle中,否则它将创建循环引用。我们找到的唯一方法仍然是将ScheduableState所依赖的流添加到ContractAndState CorDapp项目中,因此如果我们遵循模板,它就不会真正起作用。是否存在变通方法,或者我们没有正确连接依赖项?

1 个答案:

答案 0 :(得分:0)

对于此用例,有一种特殊的FlowLogicRefFactory.create方法。

您正在使用fun create(flowClass: Class<out FlowLogic<*>>, vararg args: Any?): FlowLogicRef,这需要FlowLogic类。

相反,您可以使用fun create(flowClassName: String, vararg args: Any?): FlowLogicRef,它采用完全限定的类名。