【问题标题】:using static declaring in ilog jrules java xom model在 ilog jrules java xom 模型中使用静态声明
【发布时间】:2012-04-05 06:50:10
【问题描述】:
在我的 java pojo XOM 模型中,我有一个静态变量,比如 count。我正在执行 5 条规则,它将 count 变量增加一。所以在执行结束时,我的值为 count = 5 。
现在,如果我声明一个非静态变量 count 并为每个规则执行增加其值,该变量是否会被初始化 5 次并且它是非静态的。
换句话说,如果对象没有被声明为静态,我的 java XOM 模型类的 5 个实例会被创建吗?
【问题讨论】:
标签:
java
business-rules
rule-engine
ilog
jrules
【解决方案1】:
不确定我是否理解您的问题。
我有一条规定:
“然后将 myObj.count 设置为 myObj.count + 1;”那么您将拥有与 myObj 对象一样多的计数变量。
因此,如果您在工作内存中插入一个 myObj,那么在结束时和执行期间您将只有一个 myObj。
每条规则的触发次数与您在工作内存中“匹配”的次数一样多。
因此,如果您在引擎中传递 5 个 myObj,您将拥有 5 个 myObj.count,每个最终值为 '5'。
如果您使用的是静态,那么它将是相同的。
除非您在有状态模式下使用引擎(这实际上很少见)。
BRMS 有一个决策服务,因此对传入的参数(当然还有规则)做出决定。
我并不是说您不能在有状态模式下使用它,但这种用法很少见。
如果你这样做了,那么前面的答案是正确的,你最终会得到一个无限增加的值。每次运行增加 5 个。
顺便说一句:我从未尝试过,因为有一整套属性可以获取触发或不触发的规则数量以及执行时间等等...
总而言之,您拥有工作记忆中的内容。这意味着如果您有一个对象实例,引擎将永远不会在运行时创建更多实例。由于 RETEPlus 算法,这将导致疯狂( : : )。 (也不常用)
创建更多对象实例的唯一方法是直接通过规则自己完成。例如:在报告的消息中添加消息“hello world”。
希望对你有帮助
【解决方案2】:
静态变量仅仅是类变量。因此,它将在规则调用中“持续存在”。换句话说,下次你运行它时,计数将是 10。如果你不使用静态,那么它将为每个规则调用初始化一次,而不是为每个规则初始化一次。所以,简而言之,不。