Результат действия правила таймера (cron: * * 10-18 * *?) дублирован - PullRequest
1 голос
/ 10 января 2020

Я хочу ограничить выполнение правила в определенный период времени c. Правило, которое я написал, выглядит следующим образом:

rule "Event3"
    timer ( cron:* * 10-18 * * ? )
    no-loop
    when
        $m : EventTest( originNumber == "123", originNumber : originNumber )  from entry-point "ATM Stream"
        or
        $m : EventTest( originNumber == "456",originNumber : originNumber )  from entry-point "ATM Stream"
    then
        System.out.println( $m.getOriginNumber() );
end

, когда я вставляю в движок новый факт, каждый вставленный факт будет дублирован Активировать правило, как я могу запретить существующие факты Активировать правило?

выходной журнал ниже

==>[ObjectInsertedEventImpl: getFactHandle()=5:1:1210939243:1210939243:1:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@482d776b, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:1:1210939243:1210939243:1:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=2, rule=null, type=INSERTION]]
==>[ObjectInsertedEventImpl: getFactHandle()=5:2:703555670:703555670:2:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@29ef6856, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:2:703555670:703555670:2:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=3, rule=null, type=INSERTION]]
456
123
==>[ObjectInsertedEventImpl: getFactHandle()=5:3:179808568:179808568:3:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@ab7a938, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:3:179808568:179808568:3:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=4, rule=null, type=INSERTION]]
123
456
456
==>[ObjectInsertedEventImpl: getFactHandle()=5:4:1068445309:1068445309:4:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@3faf2e7d, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:4:1068445309:1068445309:4:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=5, rule=null, type=INSERTION]]
456
123
456
456
==>[ObjectInsertedEventImpl: getFactHandle()=5:5:73698537:73698537:5:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@4648ce9, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:5:73698537:73698537:5:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=6, rule=null, type=INSERTION]]
456
123
456
456
456
==>[ObjectInsertedEventImpl: getFactHandle()=5:6:1453062635:1453062635:6:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, getObject()=com.neo.drools.entity.EventTest@569bf9eb, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=5:6:1453062635:1453062635:6:ATM Stream:NON_TRAIT:com.neo.drools.entity.EventTest, originOffset=-1, propagationNumber=7, rule=null, type=INSERTION]]
456
456
456
456
456
123
==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:7:1632789609:-866637727:7:ATM Stream:NON_TRAIT:java.lang.String:test string aaaa], getObject()=test string aaaa, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::ATM Stream, factHandle=[fact 0:7:1632789609:-866637727:7:ATM Stream:NON_TRAIT:java.lang.String:test string aaaa], originOffset=-1, propagationNumber=8, rule=null, type=INSERTION]]

и я ожидаю, что журнал

123
==========
456
==========
456
==========
456
==========
456

1 Ответ

0 голосов
/ 12 марта 2020

Не могли бы вы попробовать over window:length(1)?

rule "Event3"
    timer ( cron:* * 10-18 * * ? )
    no-loop
    when
        $m : EventTest( originNumber == "123", originNumber : originNumber ) over window:length(1) from entry-point "ATM Stream"
        or
        $m : EventTest( originNumber == "456",originNumber : originNumber ) over window:length(1) from entry-point "ATM Stream"
    then
        System.out.println( $m.getOriginNumber() );
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...