Re: [rules-users] Drools 6.0.1 Negative Patterns in Stream Mode not working

2014-05-08 Thread RichardAmbridge
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

2014-05-07 Thread RichardAmbridge
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

2014-05-07 Thread Mark Proctor
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

2014-05-07 Thread rjh
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