2014-01-22 1 views
0

я объявил событие по .drl синтаксисом:Drools Fusion. Обновите @timestamp. Почему я не могу получить правильное значение из поля timestamp?

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

Если вы используете

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

в заявляют, информирует компилятор, что ваше поле, называемое время содержит время. Он не подразумевает, что Двигатель должен установить время - вам нужно сделать это до вставки. Вы можете, конечно, использовать псевдо-часы, чтобы получить подходящее время.

Только опустив это из объявления, вы достигнете автоматической настройки метки времени в поле, полностью управляемом Drools.

+0

Ok.so, если я хочу автоматически установить временную метку, и я хочу получить ее из правил, я не могу этого сделать ... правильно? – padibro

+0

Но если я хочу установить вручную метку времени как fileld (см. Http://goo.gl/cQzNwx), я получаю «NullPointerException», – padibro