Closed davidbzkm closed 3 years ago
Launcher.java should like this:
public class Launcher {
public static void main(String[] args) throws Exception {
// create a rule set
Rules rules = new Rules();
rules.register(new RuleA(1));
rules.register(new RuleB(0));
//create a default rules engine and fire rules on known facts
RulesEngineParameters rulesEngineParameters = new RulesEngineParameters();
rulesEngineParameters.setSkipOnFirstAppliedRule(true);
RulesEngine rulesEngine = new DefaultRulesEngine(rulesEngineParameters);
rulesEngine.fire(rules, new Facts());
}
}
run log:
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/lib/tools.jar:/Users/fwh/Documents/git-repo/easy-rules_issue_341/target/classes:/Users/fwh/Documents/mavenRepo/org/jeasy/easy-rules-core/4.1.0/easy-rules-core-4.1.0.jar:/Users/fwh/Documents/mavenRepo/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:/Users/fwh/Documents/mavenRepo/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar:/Users/fwh/Documents/mavenRepo/log4j/log4j/1.2.17/log4j-1.2.17.jar com.issue.debug.Launcher
debug Engine parameters { skipOnFirstAppliedRule = true, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 }
0 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Engine parameters { skipOnFirstAppliedRule = true, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 }
0 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Registered rules:
1 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Rule { name = 'Rule B', description = 'when when then then', priority = '0'}
1 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Rule { name = 'Rule A', description = 'Always return true', priority = '1'}
1 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Known facts:
1 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Rules evaluation started
execute when RuleB
4 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Rule 'Rule B' triggered
execute then RuleB
5 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Rule 'Rule B' performed successfully
5 [main] DEBUG org.jeasy.rules.core.DefaultRulesEngine - Next rules will be skipped since parameter skipOnFirstAppliedRule is set
Process finished with exit code 0
rulesEngine.getParameters().setSkipOnFirstAppliedRule(true);
can't set parameters of ruleEngine.
Your code run log:
You should first step is create RulesEngineParameters
, then createRulesEngine
.
The return value of the function is a copy value
Thank you !!!!
@davidbzkm Can we set default action if none of the rules are triggered?
Hi, I'm trying to have the first rule executed and stop right after.
Source Files src.zip
Expected behavior RuleB gets fired(priority 0) and then the engine does not fire any other rule
Executed Result Both rules are fired
CODE
@Rule(name = "Rule A", description = "Always return true") public class RuleA {
private final int priority;
} }
public class RuleB {
private final int priority;
} }
public class Launcher { public void doLounch(){ // create a rule set Rules rules = new Rules();
rules.register(new RuleA(1)); rules.register(new RuleB(0));
}
Output execute when RuleB execute then RuleB execute when RuleA execute then RuleA