预定活动永远不会运行

时间:2018-06-26 11:06:22

标签: corda

我对SchedulableState的定义如下:

class MySchedulableState() : SchedulableState {
    override val participants = listOf<Party>()

    val nextActivityTime = Instant.ofEpochMilli(Instant.now().toEpochMilli() + 100)

    override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
        return ScheduledActivity(flowLogicRefFactory.create("com.template.ScheduledFlow", thisStateRef), nextActivityTime)
    }
}

但是,当我在流中创建此状态时,计划的活动永远不会运行。什么

1 个答案:

答案 0 :(得分:1)

问题在于,每次从库中提取状态时,您的节点都会使用状态的构造函数来重新创建状态。作为构造状态的一部分,Instant.now()被再次调用并分配给nextActivityTime,将计划的事件推向未来。

相反,您应按以下方式定义SchedulableState

class MySchedulableState(val now: Instant) : SchedulableState {
    override val participants = listOf<Party>()

    val nextActivityTime = Instant.ofEpochMilli(now.toEpochMilli() + 100)

    override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
        return ScheduledActivity(flowLogicRefFactory.create("com.template.ScheduledFlow", thisStateRef), nextActivityTime)
    }
}

请注意我们如何在构造函数中传递当前时间。每次重构状态时,该值都不会更改(请注意,它必须是val才能确保被序列化)。