在2个独立的kbase / ksessions中使用具有常用功能的Drools drl文件

时间:2015-04-10 09:38:54

标签: drools

使用Drools 6.2.0.Final我们有一个规则项目,在kmodule.xml中有2个单独的kbases和ksessions配置如下:

<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。 由于这两个函数文件的内容相同,我们正在考虑创建一个&#34; common&#34;包,只有一个函数文件的副本。

但是,我们还没有设法让我们的规则与单独包中的函数一起使用。

这是我们配置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>

我们尝试的另一种方式是没有&#34;普通&#34; kbase但是将通用包添加到&#34;包&#34; kbase1和kbase2中的属性。

是否可以在2个其他kbase中使用通用包?

1 个答案:

答案 0 :(得分:0)

DRL功能无法在其他DRL包中使用。

可以在单独的DRL文件中具有一个或多个功能,并且可以在同一DRL包中的任何DRL文件中使用它们。

也许你高估了DRL包的重要性 - 如果所有DRL文件都在同一个DRL包中,你就不会有任何问题。

或者,考虑使用Java静态方法。