Re: [rules-users] Drools 6.0.1 Negative Patterns in Stream Mode not working
Thank you for the reply. Adding: KieSessionConfiguration ksconf = KieServices.Factory.get().newKieSessionConfiguration(); ksconf.setOption(TimedRuleExectionOption.YES); KieSession ksession = kieBase.newKieSession(ksconf, null); as per the docs solved the problem. -- View this message in context: http://drools.46999.n3.nabble.com/Drools-6-0-1-Negative-Patterns-in-Stream-Mode-not-working-tp4029463p4029478.html Sent from the Drools: User forum mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
[rules-users] Drools 6.0.1 Negative Patterns in Stream Mode not working
I am using drools 6.0.1 and I have the following test. public class DroolsTest { public DroolsTest() { } @Test public void work() throws InterruptedException, IOException, ClassNotFoundException { StringBuilder sb = new StringBuilder(); sb.append(package drools\n); sb.append(import drools.MyObject;\n\n); sb.append(declare MyObject\n + @role ( event )\n + end\n\n); sb.append(rule \Template2\\n + \n + salience 0\n + dialect \mvel\\n + when\n + $s : MyObject(val==0)\n + not( MyObject(val==1, this after [0s,5s] $s ) )\n + \n + then\n + System.out.println(\Template 2 fired\)\n +$s.name=\2\;\n + \n + end\n); KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.write(src/main/resources/rules.drl, sb.toString()); KieBuilder kieBuilder = kieServices.newKieBuilder(kfs); kieBuilder.buildAll(); Results results = kieBuilder.getResults(); assertFalse(results.hasMessages(Message.Level.ERROR)); if (results.hasMessages(Message.Level.WARNING)) { System.out.println(Warnings logged); } KieContainer kieContainer = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId()); KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); kieBaseConfiguration.setOption(EventProcessingOption.STREAM); KieBase kieBase = kieContainer.newKieBase(kieBaseConfiguration); KieSession ksession = kieBase.newKieSession(); MyObject one = new MyObject(); one.val = 0; FactHandle fh1 = ksession.insert(one); System.out.println(Insert one); ksession.fireAllRules(); for (int i = 0; i 13; i++) { System.out.println(Sleep: + i); Thread.sleep(1000); //After 5 seconds, rule should fire } assertEquals(2, one.name); System.out.println(End); ksession.halt(); ksession.dispose(); } public class MyObject implements Serializable { String name; int val; boolean fired; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getVal() { return val; } public void setVal(int val) { this.val = val; } public boolean isFired() { return fired; } public void setFired(boolean fired) { this.fired = fired; } } } The rule is using + $s : MyObject(val==0)\n + not( MyObject(val==1, this after [0s,5s] $s ) )\n So, if a MyObject with val==0 is inserted, then after 5 seconds no MyObject with val==1 is found the rule will fire. This works in Drools 5.5.0 In 6.0.1 the rule doesn't fire. Please help. I want to use drools 6 but cannot with this problem. Thanks -- View this message in context: http://drools.46999.n3.nabble.com/Drools-6-0-1-Negative-Patterns-in-Stream-Mode-not-working-tp4029463.html Sent from the Drools: User forum mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Drools 6.0.1 Negative Patterns in Stream Mode not working
Can you try 6.1 beta2? And if there is still a bug, please open a jira: http://mvnrepository.com/artifact/org.drools/drools-core/6.1.0.Beta2 Ideally please submit a self contained unit test, as a pull request. As explained here: http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html Mark On 7 May 2014, at 14:44, RichardAmbridge richard.ambri...@gmail.com wrote: I am using drools 6.0.1 and I have the following test. public class DroolsTest { public DroolsTest() { } @Test public void work() throws InterruptedException, IOException, ClassNotFoundException { StringBuilder sb = new StringBuilder(); sb.append(package drools\n); sb.append(import drools.MyObject;\n\n); sb.append(declare MyObject\n + @role ( event )\n + end\n\n); sb.append(rule \Template2\\n + \n + salience 0\n + dialect \mvel\\n + when\n + $s : MyObject(val==0)\n + not( MyObject(val==1, this after [0s,5s] $s ) )\n + \n + then\n + System.out.println(\Template 2 fired\)\n +$s.name=\2\;\n + \n + end\n); KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.write(src/main/resources/rules.drl, sb.toString()); KieBuilder kieBuilder = kieServices.newKieBuilder(kfs); kieBuilder.buildAll(); Results results = kieBuilder.getResults(); assertFalse(results.hasMessages(Message.Level.ERROR)); if (results.hasMessages(Message.Level.WARNING)) { System.out.println(Warnings logged); } KieContainer kieContainer = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId()); KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); kieBaseConfiguration.setOption(EventProcessingOption.STREAM); KieBase kieBase = kieContainer.newKieBase(kieBaseConfiguration); KieSession ksession = kieBase.newKieSession(); MyObject one = new MyObject(); one.val = 0; FactHandle fh1 = ksession.insert(one); System.out.println(Insert one); ksession.fireAllRules(); for (int i = 0; i 13; i++) { System.out.println(Sleep: + i); Thread.sleep(1000); //After 5 seconds, rule should fire } assertEquals(2, one.name); System.out.println(End); ksession.halt(); ksession.dispose(); } public class MyObject implements Serializable { String name; int val; boolean fired; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getVal() { return val; } public void setVal(int val) { this.val = val; } public boolean isFired() { return fired; } public void setFired(boolean fired) { this.fired = fired; } } } The rule is using + $s : MyObject(val==0)\n + not( MyObject(val==1, this after [0s,5s] $s ) )\n So, if a MyObject with val==0 is inserted, then after 5 seconds no MyObject with val==1 is found the rule will fire. This works in Drools 5.5.0 In 6.0.1 the rule doesn't fire. Please help. I want to use drools 6 but cannot with this problem. Thanks -- View this message in context: http://drools.46999.n3.nabble.com/Drools-6-0-1-Negative-Patterns-in-Stream-Mode-not-working-tp4029463.html Sent from the Drools: User forum mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Drools 6.0.1 Negative Patterns in Stream Mode not working
You should set TimedRuleExectionOption to YES. See here http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/index.html#d0e592 -- View this message in context: http://drools.46999.n3.nabble.com/Drools-6-0-1-Negative-Patterns-in-Stream-Mode-not-working-tp4029463p4029474.html Sent from the Drools: User forum mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users