gpt4 book ai didi

jboss - 事件锁定未按预期工作

转载 作者:行者123 更新时间:2023-12-01 08:18:50 26 4
gpt4 key购买 nike

当 lock-on-active 设置为 true 时,规则甚至不会触发一次。应该解雇一次吗?我希望规则 1 在使用 lock-on-active 时被触发一次。

(注意:我已经添加了用于执行规则的代码)

规则

rule "Rule 1"

lock-on-active true
ruleflow-group "Group A"

when
$c: Product()
then
System.out.println("Rule 1");
modify($c)
{
setAmount(1);
}

end


rule "Rule 2"

lock-on-active true
ruleflow-group "Group A"

when
$c: Product()
then
System.out.println("Rule 2");
modify($c){
setAmount($c.getAmount()+1)
}


end

执行规则的代码

   KieServices kieServices=KieServices.Factory.get();
KieContainer kieContainer=kieServices.getKieClasspathContainer();
KieSession kieSession=kieContainer.newKieSession("ksession-lockOnActive");

Product product=new Product();
product.setName("Book");
product.setAmount(5);


((InternalAgenda)kieSession.getAgenda()).activateRuleFlowGroup("Group A");

kieSession.insert(product);
kieSession.fireAllRules();
kieSession.dispose();

最佳答案

首先,ruleflow-group 属性用于在 JBPM 中将规则用作业务流程的一部分时使用。最新版本的 Drools 统一了 ruleflow-groupagenda-group 的行为,所以你使用哪一个都无关紧要(尽管我建议使用 议程组)。

然后,您用来激活流组的方式对我来说似乎不正确。

这是我会做的:

1) 在你的规则中使用agenda-group:

rule "Rule 1"
lock-on-active true
agenda-group "Group A"
when
$c: Product()
then
...
end


rule "Rule 2"
lock-on-active true
agenda-group "Group A"
when
$c: Product()
then
...
end

2) 在触发规则之前,将焦点设置在议程组上:

kieSession.getAgenda().getAgendaGroup("Group A").setFocus();
kieSession.fireAllRules();

这应该可以解决问题。

规则对我来说仍然很奇怪,但也许是因为你只是在做 POC。提醒一下:您不应依赖 DRL 中规则的顺序来获得预期的输出

希望对你有帮助,

关于jboss - 事件锁定未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47806322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com