2014-01-22 27 views
0

我宣佈.drl語法事件:Drools融合。更新@時間戳。爲什麼我不能從時間戳字段檢索正確的值?

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,就好像時間戳沒有更新一樣)。

回答

1

如果您在聲明USE

@timestamp(time) // this class member contains the timestamp 

,它會通知你的領域調用時,編譯器包含了時間。它確實是而不是意味着引擎應該設置時間 - 在插入之前您必須執行此操作。當然,您可以使用僞時鐘來獲得合適的時間。

只有通過從聲明中省略此項,您才能完全由Drools管理的字段中實現時間戳的自動設置。

+0

Ok.so如果我想自動設置時間戳,我想從規則中檢索它,我不能這樣做......對吧? – padibro

+0

但是,如果我想手動設置時間戳爲fileld(請參閱http://goo.gl/cQzNwx)我得到一個「NullPointerException」 – padibro