0

.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 が返されますが、タイムスタンプが更新されていないかのように、print into ルールは常に 0 を返します)。

4

1 に答える 1

1

使用する場合

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

宣言では、 time と呼ばれるフィールドに時間が含まれていることをコンパイラに通知します。エンジンが時間を設定する必要があることを意味するものではありません。挿入の前にこれを行う必要があります。もちろん、疑似時計を使用して適切な時刻を取得することもできます。

宣言からこれを省略することによってのみ、Drools によって完全に管理されるフィールドでタイムスタンプの自動設定を実現できます。

于 2014-01-22T16:58:06.377 に答える