我用.drl语法声明了这个事件:
declare Event
@role(event)
@timestamp(time)
time : long
end
所以我可以获得自动设置的“时间”字段。
在我的java规则中,我想检索“时间”:
when
Event($tsmp:time)
then
System.out.println($tsmp);
end
我总是打印“0”,虽然我推进了伪时钟
session.getClock().advanceTime(10, TimeUnit.MILLISECONDS);
(如果在我尝试从时钟中检索currentTime
之后,它返回10,但是打印到规则总是返回0,就像时间戳没有更新一样。)
答案 0 :(得分:1)
如果您使用
@timestamp(time) // this class member contains the timestamp
在声明中,它通知编译器您的字段称为time包含时间。 不暗示引擎应该设置时间 - 您必须在插入之前执行此操作。当然,您可以使用伪时钟来获得合适的时间。
只有在声明中省略这一点,您才能在完全由Drools管理的字段中实现时间戳的自动设置。