Drools Fusion滑动窗口样本不工作
我是个新手,喜欢流口水,尝试滑动窗口的概念 我的问题是检测两个销售事件中是否至少发生了成功的交易。我总是以“一次销售发生在两个事件上”的形式获得输出,即使这样的事件是否发生 -------------drl---------- -------------代码---------- 这是有关的。bugzilla条目解释了滑动窗口事件触发的概念以及事件如何不从窗口脱落 可按如下方式进行固定:Drools Fusion滑动窗口样本不工作,drools,sliding-window,drools-fusion,Drools,Sliding Window,Drools Fusion,我是个新手,喜欢流口水,尝试滑动窗口的概念 我的问题是检测两个销售事件中是否至少发生了成功的交易。我总是以“一次销售发生在两个事件上”的形式获得输出,即使这样的事件是否发生 -------------drl---------- -------------代码---------- 这是有关的。bugzilla条目解释了滑动窗口事件触发的概念以及事件如何不从窗口脱落 可按如下方式进行固定: --------------drl-------------------- declare Sale @ro
--------------drl--------------------
declare Sale
@role( event )
end
declare window Ticks
Sale()
over window:length( 5 )
from entry-point MyEntryPoint
end
rule "More than 2 sale suceess in 5 events"
when Number($cnt : intValue,intValue > 2)
from accumulate( Sale ( saleHappened == "Y" ) from window Ticks, count(1) )
then
System.out.println("A sale has happened over " + $cnt +" events" );
end
嗨,我有一个相关的问题。我看到在java代码中,我们需要“insert()”感兴趣的事件,然后调用
ksession.fireAllRules()
。但这不是真的,尤其是,我应该能够在以后插入事件。是否可以在调用ksession.fireAllRules()
后继续添加事件谢谢,维姆
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;
}
}
--------------drl--------------------
declare Sale
@role( event )
end
declare window Ticks
Sale()
over window:length( 5 )
from entry-point MyEntryPoint
end
rule "More than 2 sale suceess in 5 events"
when Number($cnt : intValue,intValue > 2)
from accumulate( Sale ( saleHappened == "Y" ) from window Ticks, count(1) )
then
System.out.println("A sale has happened over " + $cnt +" events" );
end