Suis un novice à Drools et d'essayer le concept de fenêtre coulissante.Drools Fusion fenêtre coulissante échantillon ne fonctionne pas
Mon problème est de détecter si au moins une transaction réussie s'est produite dans 2 événements de ventes. Je reçois toujours la sortie comme "Une vente s'est produite sur 2 événements" même si un tel événement s'est produit ou non.
------------- ---------- 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
------------- code- ---------
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;
}
}
Salut, j'ai une question connexe. Je vois que dans le code java, nous avons besoin de 'insert()' d'interet et d'invoquer 'ksession.fireAllRules()'. Mais ce n'est pas du vrai ESP. Je devrais être en mesure d'insérer des événements à un moment ultérieur également. est-il possible de continuer à ajouter des événements même après avoir appelé 'ksession.fireAllRules()'? - Merci, Vimal – weima