Hello,
why does such a rule always loop? Even if no-loop is used?
rule "Hello World"
no-loop
when
$fact1 : MyFactBean1( )
$fact2 : MyFactBean2( ) from $fact1
then
System.out.println("Fired!!!");
update($fact1);
end
The full code of my test application and drl is attached.
Best regards,
--
Przemysław Różycki
AMG.net, A Bull Group Company
ul. Łąkowa 29
90-554 Łódź
www.amg.net.pl
package com.sample;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.compiler.DroolsError;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderErrors;
import org.drools.rule.Package;
import org.drools.rule.Rule;
/**
* This is a sample class to launch a rule.
*/
public class DroolsTest {
public static final void main(String[] args) {
PackageBuilder packageBuilder = new PackageBuilder();
Reader packageReader =
new InputStreamReader(
Thread.currentThread().getContextClassLoader().getResourceAsStream(
"Sample.drl"));
try {
packageBuilder.addPackageFromDrl(packageReader);
PackageBuilderErrors errors = packageBuilder.getErrors();
if (errors.getErrors().length != 0) {
System.out.println("Package common.validateRequest has errors\n" + errors);
for (DroolsError error : errors.getErrors()) {
String errorMessage = error.getMessage() + " at lines";
for (int line : error.getErrorLines()) {
errorMessage += " " + line;
}
System.out.println(errorMessage);
}
}
Package pkg = packageBuilder.getPackage();
Rule[] rules = pkg.getRules();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
StatefulSession session = ruleBase.newStatefulSession();
MyFactBean1 myFactBean1 = new MyFactBean1();
MyFactBean2 myFactBean2 = new MyFactBean2();
myFactBean2.setMessage("yeah");
myFactBean1.setMyFactBean2(myFactBean2);
session.insert(myFactBean1);
session.fireAllRules();
session.dispose();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public static class MyFactBean1 {
private MyFactBean2 myFactBean2;
public void setMyFactBean2(MyFactBean2 myFactBean2) {
this.myFactBean2 = myFactBean2;
}
public MyFactBean2 getMyFactBean2() {
return myFactBean2;
}
}
public static class MyFactBean2 {
private String message;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
}package com.sample
import com.sample.DroolsTest.MyFactBean1;
import com.sample.DroolsTest.MyFactBean2;
rule "Hello World"
no-loop
when
$fact1 : MyFactBean1( )
$fact2 : MyFactBean2( ) from $fact1
then
System.out.println("Fired!!!");
update($fact1);
end_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users