我是新來的流口水和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