나는 drools와 kie-server를 처음 사용합니다. 나는 해고 된 규칙 RHS (그 다음 action)에 의해 작업 메모리에 새로운 사실을 삽입하는 방법에 관한 문제를 가지고 이러한 동적 insured 사실들에 의해 다른 규칙들을 활성화시킨다.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
다른 규칙은 동적입니까? 미리 감사드립니다!
나는 테스트 KIE 서버 (최종 6.5)를 사용하여, 아래로 POST와 Reponse 오전 :
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