1
Drools의 초보자이며 슬라이딩 윈도우 개념을 시도하고 있습니다.Drools Fusion 슬라이딩 윈도우 샘플이 작동하지 않습니다.
내 문제는 적어도 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;
}
}
안녕, 난 관련 질문이 있습니다. 자바 코드에서 관심있는 이벤트를 삽입 (insert)하고 나서 ksession.fireAllRules()를 호출 할 필요가있다. 그러나 이것은 진정한 ESP가 아닙니다. 나중에 이벤트를 삽입 할 수 있어야합니다. 'ksession.fireAllRules()'를 호출 한 후에도 계속 이벤트를 추가 할 수 있습니까? 고마워, 빅 – weima