0

最近、イベント駆動型プロジェクトに Drools を統合しました。ここでは、次の Maven アーティファクトを使用しています: kie-internalkie-apidrools-coredrools-compiler。それらのすべてにバージョン6.0.0.Beta3がありました

これが私のコードです:

try {
KnowledgeBase kbase;
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("rules.drl"), ResourceType.DRL);
if (kbuilder.hasErrors()) {
    System.out.println(kbuilder.getErrors().toString());
}

KieBaseConfiguration conf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
conf.setOption(EventProcessingOption.STREAM);
kbase = KnowledgeBaseFactory.newKnowledgeBase(conf);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

KieSession ksession = kbase.newKieSession();

ksession.insert(new EventA());
ksession.fireAllRules();

Thread.sleep(8000);
ksession.destroy();
} catch (InterruptedException ex) {
System.err.println(ex.getMessage());
}

ルール:

declare EventA
@role( event )
end
declare EventB
@role( event ) 
end

rule "Timeout EventA"
salience 500
when
$a : EventA()
not(EventB(this after[0,4s] $a))
then
System.out.println("Retracting EventA: " + $a);
retract($a);
end

問題は、drools の依存関係をバージョン6.0.0.CR4 (最新) に更新した後、タイムアウト ルールがトリガーされなくなったことです。

4

1 に答える 1

1

http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html/DroolsComplexEventProcessingChapter.html#d0e10244の「イベントのメモリ管理」セクションを参照してください。

推定された有効期限オフセットがイベントを撤回していると思われます。タイムアウト ルールがトリガーされないためです。

于 2014-04-08T12:43:31.780 に答える