我们一直遵循模板(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项目中,因此如果我们遵循模板,它就不会真正起作用。是否存在变通方法,或者我们没有正确连接依赖项?
答案 0 :(得分:0)
对于此用例,有一种特殊的FlowLogicRefFactory.create
方法。
您正在使用fun create(flowClass: Class<out FlowLogic<*>>, vararg args: Any?): FlowLogicRef
,这需要FlowLogic
类。
相反,您可以使用fun create(flowClassName: String, vararg args: Any?): FlowLogicRef
,它采用完全限定的类名。