java - Drools 规则格式仅触发一次

标签 java drools rule-engine

我正在使用 drools 6 引擎。假设我有一个帐户对象,其中包含多个部分的集合,并且每个部分都有一个状态标志,可以是“GOOD”或“BAD”。如果我写以下内容:

rule "Check if account has a good subsection"
when
    $account : Account()
    SubSection (status == "GOOD") from $account.getSubSections()
then
    insertLogical(new AccountIsGood($account));
end

如果至少有一个部分是好的,我希望这只是添加逻辑规则AccountIsGood($account)。然而,这似乎并不是简单地检查一个成功的小节并结束规则,而是继续检查所有小节并为每个有效小节插入逻辑规则。例如,如果一个帐户有四个有效的小节,我会获得该帐户的四份规则副本。

所以我的问题是,有没有办法重写此规则以获得所需的行为?

帐户类别:

public class Account {
  private List<SubSection> subsections;

  // Getters / Setters/ other code
}

最佳答案

使规则尽可能简单。虽然检查插入的 AccoundIsGood() 是否存在是可行的,但建议编写逻辑,以便仅测试单个良好的子部分是否存在。此外,您还需要一个 from 来从 Account 对象中提取子部分。

rule testForGood
when
  $account: Account( $sub: subsections )
  exists SubSection( status == "GOOD" ) from $sub
then
  insertLogical( new AccountIsGood($account) );
end

如果子节状态有可能改变为远离“GOOD”,那么保留insertLogical可能是个好主意:如果不这样做,逻辑插入的事实将被撤回至少有一个好的部分。

关于java - Drools 规则格式仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896960/

相关文章:

java - 如何在同一线程中并行通量内运行单声道

java - 变音符号如何以字体表示并在 Java 应用程序中键入?

java - Selenium + gradle + testng,driver.quit()上出现UnsatisfiedLinkError

java - 如何用java制作待办事项列表?

java - 取消部署 Java EE 应用程序时如何停止线程?

java - 用于复杂显示值查找的 Drools

python - 在 Python 中构建推理引擎

java - Drools 未按预期工作。规则不适用

java - 对相同类型且具有关系的多个对象使用 drools

java - 您如何分析 Drools 应用程序?