在 2 个单独的 kbase/ksessions 中使用具有常用功能的 Drools drl 文件
Using Drools drl file with common functions in 2 separate kbase/ksessions
使用 Drools 6.2.0.Final 我们有一个规则项目,其中包含 2 个独立的 kbase 和 ksession,在 kmodule.xml:
中配置如下
<kbase name="kbase1"
packages="foo.bar.package1">
<ksession name="ksession1" type="stateless" />
</kbase>
<kbase name="kbase2"
packages="foo.bar.package2">
<ksession name="ksession2" type="stateless" />
</kbase>
在每个包中,我们都有许多包含一些业务规则的 .drl 文件。
除了这些之外,每个包还包含一个 .drl,其中包含从业务规则文件调用的函数,例如package1-functions.drl 和 package2-functions.drl。
由于这两个函数文件的内容相同,我们正在考虑创建一个 "common" 包并且只有一个函数文件副本。
但是,我们还没有设法让我们的规则与单独包中的函数一起工作。
这就是我们配置 kmodule.xml 的方式:
<kbase name="common"
packages="foo.bar.common"/>
<kbase name="kbase1" includes="common"
packages="foo.bar.package1">
<ksession name="ksession1" type="stateless" />
</kbase>
<kbase name="kbase2" includes="common"
packages="foo.bar.package2">
<ksession name="ksession2" type="stateless" />
</kbase>
我们尝试的另一种方法是不使用 "common" kbase,而是将通用包添加到 kbase1 和 kbase2 的 "packages" 属性中。
是否可以在其他 2 个 kbase 中使用通用包?
无法从另一个 DRL 包中使用 DRL 函数。
在单独的 DRL 文件中可以有一个或多个函数,并且它们可以在同一 DRL 包中的任何 DRL 文件中使用。
也许您高估了 DRL 包的重要性 - 如果所有 DRL 文件都在同一个 DRL 包中,您就不会有任何问题。
或者,考虑使用 Java 静态方法。
使用 Drools 6.2.0.Final 我们有一个规则项目,其中包含 2 个独立的 kbase 和 ksession,在 kmodule.xml:
中配置如下<kbase name="kbase1"
packages="foo.bar.package1">
<ksession name="ksession1" type="stateless" />
</kbase>
<kbase name="kbase2"
packages="foo.bar.package2">
<ksession name="ksession2" type="stateless" />
</kbase>
在每个包中,我们都有许多包含一些业务规则的 .drl 文件。 除了这些之外,每个包还包含一个 .drl,其中包含从业务规则文件调用的函数,例如package1-functions.drl 和 package2-functions.drl。 由于这两个函数文件的内容相同,我们正在考虑创建一个 "common" 包并且只有一个函数文件副本。
但是,我们还没有设法让我们的规则与单独包中的函数一起工作。
这就是我们配置 kmodule.xml 的方式:
<kbase name="common"
packages="foo.bar.common"/>
<kbase name="kbase1" includes="common"
packages="foo.bar.package1">
<ksession name="ksession1" type="stateless" />
</kbase>
<kbase name="kbase2" includes="common"
packages="foo.bar.package2">
<ksession name="ksession2" type="stateless" />
</kbase>
我们尝试的另一种方法是不使用 "common" kbase,而是将通用包添加到 kbase1 和 kbase2 的 "packages" 属性中。
是否可以在其他 2 个 kbase 中使用通用包?
无法从另一个 DRL 包中使用 DRL 函数。
在单独的 DRL 文件中可以有一个或多个函数,并且它们可以在同一 DRL 包中的任何 DRL 文件中使用。
也许您高估了 DRL 包的重要性 - 如果所有 DRL 文件都在同一个 DRL 包中,您就不会有任何问题。
或者,考虑使用 Java 静态方法。