我是新来的流口水和kie服务器。我遇到了如何通过解雇规则RHS(然后是行动)在工作记忆中插入新事实的问题,然后通过这些动态的事实激活其他规则。Drools规则插入新的事实并激发其他规则动态
我期望的是,当BaseFeature从外部插入工作内存并激活RuleOne内部的RuleOne时,“然后”它会插入新的事实RuleResult,并期望激活RuleTwo,但它不会激活RuleTwo,只是RuleOne被激活了,是我做错了什么?
这里我有两个规则和事实的集合:
事实定义:
public class AppResult implements java.io.Serializable
{
static final long serialVersionUID = 1L;
private java.lang.String key;
private java.lang.String value;
//getters and setters ...
}
public class BaseFeature implements java.io.Serializable
{
static final long serialVersionUID = 1L;
private int age;
//getters and setters ...
}
public class RuleResult implements java.io.Serializable
{
static final long serialVersionUID = 1L;
private java.lang.String ruleName;
private java.lang.Long score;
private boolean state;
//getters and setters ...
}
规则定义:
rule "RuleOne"
dialect "mvel"
salience 100
no-loop true
lock-on-active true
when
$b : BaseFeature(age < 22 || age > 40)
then
RuleResult $r = new RuleResult();
$r.setRuleName("RuleOne");
$r.setState(false);
insertLogical($r);
end
rule "RuleTwo"
dialect "mvel"
no-loop false
lock-on-active true
salience 10
when
$r : RuleResult(ruleName == "RuleOne" , state == false)
$a : AppResult()
then
$a.setKey("PASS");
$a.setValue("false");
end
如何实现解雇的规则中插入新的事实和解雇其他规则动态? 提前致谢!
我使用纪伊 - 服务器(6.5最终)进行测试,和POST和效应初探如下:
POST:
{
"lookup": "RuleChainTestStateless",
"commands": [
{
"insert": {
"return-object": false,
"object": {
"com.qf.rulechaintest.BaseFeature": {
"age": "10"
}
}
}
},
{
"insert": {
"return-object": true,
"out-identifier": "AppResult",
"object": {
"com.qf.rulechaintest.AppResult": {
}
}
}
},
{
"fire-all-rules": ""
},
{
"get-objects":{
"out-identifier":"allFactsInWrokingMemory"
}
}
]
}
REPONSE:
{
"type": "SUCCESS",
"msg": "Container RuleChainTest1.1 successfully called.",
"result": {
"execution-results": {
"results": [
{
"key": "",
"value": 1
},
{
"key": "AppResult",
"value": {
"com.qf.rulechaintest.AppResult": {
"key": null,
"value": null
}
}
},
{
"key": "allFactsInWrokingMemory",
"value": [
{
"com.qf.rulechaintest.BaseFeature": {
"age": 10
}
},
{
"com.qf.rulechaintest.AppResult": {
"key": null,
"value": null
}
},
{
"com.qf.rulechaintest.RuleResult": {
"ruleName": "RuleOne",
"score": null,
"state": false
}
}
]
}
],
"facts": [
{
"key": "AppResult",
"value": {
"org.drools.core.common.DefaultFactHandle": {
"external-form": "0:2:1542374590:1542374590:2:DEFAULT:NON_TRAIT:com.qf.rulechaintest.AppResult"
}
}
}
]
}
}
}
注意,反应:
"com.qf.rulechaintest.AppResult": {
"key": null,
"value": null
}
它应该是什么:
"com.qf.rulechaintest.AppResult": {
"key": "PASS",
"value": "false"
}
我kown这个属性,如果与 “火的所有规则” 的CMD :“”,kie-server运行在无限循环中,如果我用cmd“fire-all-rules”更改它:{“max”:100,“out-identifier”:“brms”},它按预期运行 –
如果在一个循环中运行,你没有显示你实际使用的代码。 – laune