2014-02-26 40 views
0

我是Drools融合中的新人。我想用以下条件编写规则。如何在滑动窗口中编写drools规则以满足以下条件?

  1. 事件数据定期发送到两个属性名为“eventId”和“state”的drools引擎。 例如: - "data":{"eventId":"evet123","state":1}
  2. 当第一次事件发生时,它将存储在工作记忆中。
  3. 在第一个事件之后,无论事件的状态如何检查以前的事件,以及前一个事件的状态是1,当前的事件状态是2,那么在那种情况下执行一些功能。并且当前事件被工作记忆中的先前事件替代。

例如: - 如果(以前的事件状态为1 --->当前事件状态是2时),然后调用函数

注: - 事件ID不是唯一的。它可能与以前的事件相同或不同。

(可根据滑动在此之情况窗口使用长度,但我不kknow如何将此转化REQ中的规则。)

请任何专家的Drools引导我在这个问题上。

+0

并与国家== 2中的数据保持在工作记忆,无限?你是否希望这种情况发生在每对状态== 1/2,无论eventId是什么? - 您是否有任何规则代码 - 您到目前为止尝试了哪些? – laune

+0

啊,是的,你不能用另一个取代一个事实,但你可以收回一个事实。 – laune

+0

1.假设第一个事件的状态为1,第二个事件的状态为2,则满足规则条件。此规则仅适用于相同的eventID。当此规则满足第一个事件放弃并且第二个事件现在成为第一个时,现在具有相同ID的新事件将与该新的第一个eventId进行比较。 – Raj

回答

0

无论你说什么,但你的描述是事件的一个奇怪的顺序:第一事件具有状态1,及以后的事件有状态2.

rule match12 
when 
    $e1: Event($id: id, state == 1) 
    $e2: Event(id == $id, state == 2) 
then 
    retract($e1); 
    modify($e2){ setState(1) } 
end 
+0

谢谢@laune。这对我有帮助。我还有其他一个难题,就是看那个。 http://stackoverflow.com/questions/22063409/how-to-access-drools-window-value – Raj