2011-01-14 6 views
6

나는 마지막 발사 후 적어도 15 분이 경과 할 때까지 발사를 지연시키는 규칙을 쓰려고합니다. 그러나 Drools Fusion의 시간 연산자는 현재 시간과 관련하여 하나의 이벤트가 아니라 서로 관련하여 두 가지 이벤트에 대한 추론을 허용합니다.Drools Fusion에는 "지금"이라는 개념이 있습니까?

나는 이런 식으로 뭔가 싶습니다

rule "some rule" 
when 
    not LastFiredEvent(this before[0m, 15m] NOW) 
    … 

나는에 다른 규칙에서 사용할 수있는 (또한 이전의 하트 비트를 후퇴) 하트 비트 이벤트를 모든 초를 발생하고 삽입하는 규칙을 작성에 의존 한을 현재 시간으로 봉사하십시오.

나는 이것을 매우 우아하지 않다. 나는 뭔가를 놓치고 있습니까? 아니면 Drools Fusion이 정말로 이것에 대해 무언가를 가지고 있지 않습니까?

NB. 나는 이 아니며은 15 분의 배수로만 발사 될 수있는 규칙이나 규칙의 지연 발사를 찾고 있습니다. 지난 17 분 동안 아무 일도 일어나지 않았다면, 규칙 은 새로운 이벤트에 대한 응답으로을 즉시 발동해야합니다.

답변

8

"NOW"의 개념은 처음에는 단순 해 보일지 모르지만 모호하고 실행 환경에 따라 달라질 수있는 다양한 의미에 따라 다르다. Drools Fusion은 STREAM 모드에서 실행할 때 "NOW"이라는 개념을 가지고 있지만 위의 질문과 다릅니다. 설명은 여기서 할 일이 조금 있기 때문에 문제에 집중할 수 있습니다.

먼저 "나는 발사를 지연시키는 규칙을 쓰려고합니다 ..."라고 말하면서 당신은 다음과 같이 말합니다. "지연된 규칙 발사가 필요하지 않습니다."라고 혼란스러워합니다. 당신이 필요로하는 것.

당신이 타이머 속성을 사용할 수있는 규칙을 지연 할 경우 : 당신이 이벤트 또는 간격 내에 일어나지 않았다 않은 경우 규칙을 발사 할 경우

rule X 
    timer(int: 15m) 
... 

을, 당신은 창문을 슬라이딩 사용할 수 있습니다 . 예 :

rule "Event did not happen in the last 15m" 
when 
    not(SomeEvent() over time:window(15m)) 
... 

희망 하시겠습니까? 그리고 BTW, Drools 메일 링리스트에 질문을 게시하면 답변을 얻는 것이 더 쉬울 것입니다. 친구가 나에 대해 핑 (ping)했기 때문에 나는 단지 당신의 게시물을 보았습니다.

건배, 에드 슨

+0

귀하의 의견 '지금'문제적인 개념은 흥미 롭다입니다. 당신은 정교 할 수 있습니까? –