如何从主规则文件中导入规则

时间:2014-02-10 02:09:17

标签: jboss drools

我有几乎100条规则的规则文件(.drl)。但是我想让用户灵活地选择哪些规则在任何时候都有效。 我在想是否有办法将所需的规则导入到单独的.drl文件中,以便用户可以选择并选择规则

是否可以将一个.drl文件的规则导入到其他.drl文件中?如果不是,我如何确保用户可以选择/选择在任何时候都有效的规则。

在一个文件中也有100个规则是无效的,用单行/名称引用它们是可读的。

提示pl?

1 个答案:

答案 0 :(得分:1)

从一个DRL到另一个DRL的规则没有“导入”。

解决问题的方法取决于所需的规则选择粒度。

如果有少量N个静态组合,您可以构建N个规则库并让用户选择规则库。这是干净,可控和可测试的。

如果有多个不相交的集,请使用议程组。用户选择议程组,并且只有该组中的规则处于活动状态。 (如果这些集合不是不相交的,你仍然可以使用议程组,代价是在不同的议程组中使用不同的名称复制规则。丑陋,不推荐。)

对于任意动态选择,您必须设计一些机制。例如:

rule "rule1"
when
    Select( name == "rule1" )
    All( ... )
    Original( ... )
    Patterns( ... )
then ... end

插入新的Select(“rule1”)选择,缩回缩回。根据选择的方式,您还可以实现“功能”:

rule "rule x" # part of feature f1 and f2
when
    Select( featureSet contains Feature.f1 || Feature.f2 )
    All( ... )
    Original( ... )
    Patterns( ... )
then ... end

您可以编写规则来检查功能组合,例如

rule "feature check"
when
    Select( featureSet contains Feature.black && Feature.white )
then
    ... cant have black *and* white at the same time ...
end