1
是一個新手Drools和嘗試滑動窗口的概念。Drools融合滑動窗口樣本不工作
我的問題是要檢測是否至少有一個成功的交易發生在2個銷售事件中。即使發生這樣的事件,我總是會得到輸出爲「發生了2次以上的事件」。
------------- DRL ----------
declare Sale
@role(event)
end
rule "Identify more than a single valid sale event"
//The variable saleHappened would be set to Y if a successful transaction
when sale: Sale (saleHappened == "Y") over window:length(2) from entry-point MyEntryPoint
then
System.out.println("A sale has happened over 2 events");
end
-------------代碼 - ---------
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
WorkingMemoryEntryPoint entryPoint = ksession.getWorkingMemoryEntryPoint("MyEntryPoint");
Sale sale = new Sale();
sale.setSaleHappened("N");
entryPoint.insert(sale);
Sale sale2 = new Sale();
sale2.setSaleHappened("N");
entryPoint.insert(sale2);
ksession.fireAllRules();
ksession.dispose();
} catch (Throwable t) {
t.printStackTrace();
}
}
private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
final KnowledgeBaseConfiguration kbConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kbConfig.setOption(EventProcessingOption.STREAM);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbConfig);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
public static class Sale {
public Sale() {
}
public String getSaleHappened() {
return saleHappened;
}
public void setSaleHappened(String saleHappened) {
this.saleHappened = saleHappened;
}
private String saleHappened;
}
}
嗨,我有一個相關的問題。我看到在java代碼中,我們需要'插入()'感興趣的事件,然後調用'ksession.fireAllRules()'。但這不是真正的ESP。我應該可以在稍後的時間插入事件。即使在調用'ksession.fireAllRules()'後,是否可以繼續添加事件? - 謝謝,Vimal – weima