DROOLS中的物理包和包声明

时间:2014-04-04 03:41:18

标签: drools

Drools中物理包和包声明的用途是什么。

例如,

我在物理包com.mycompany中有一条规则Myrule.drl

据我所知,drools中的包声明不依赖于文件所在的实际物理包。

所以我可以在Myrule.drl中给出

package com.sample;

规则“我的规则” 什么时候 然后 端

有人可以帮我理解drl文件所在的物理包/文件夹和drl文件中的包声明之间的关系吗?

3 个答案:

答案 0 :(得分:4)

为什么不直接阅读文档,Drools" Expert"手册,第7.5节?

  

包是规则和其他相关结构的集合,例如导入和全局变量。包成员通常彼此相关 - 例如,可能是HR规则。包表示命名空间,理想情况下,该命名空间对于给定的规则分组保持唯一。包名称本身就是命名空间,并且与文件或文件夹无关。

还有......

答案 1 :(得分:3)

您的理解是正确的。您的DRL中的包声明与DRL文件所在的位置之间没有关系。 由规则的RHS或类型声明生成的所有Java类都将由Drools'编译器在DRL文件中定义的包中。这允许您拥有规则或声明具有相同名称但在不同包中的类型。

希望它有所帮助,

答案 2 :(得分:0)

  

有人可以帮我理解drl文件所在的物理包/文件夹和drl文件中的包声明之间的关系吗?

没有关系(直接)。您必须考虑运行规则引擎时会发生什么。运行应用程序时,这些规则将转换为放置在声明的命名空间中的虚拟对象。所以,例如:

DRL片段

package com.mystuff

import java.util.logging.Logger;
import java.util.logging.Level;

rule "Hello World"
    when
       some condition...
    then
       Logger.log(Level.INFO, "Hello World");
end

当激活此规则时,如果您已将日志记录设置为正确的级别,您会注意到与此类似的条目:

INFO   com.mystuff.Rule_HelloWorld592399015 defaultConsequence Hello World

证明规则被转换为虚拟对象(您不会在项目中找到它作为.class文件),它位于com.mystuff命名空间中,正如本帖中提到的Estaban Aliverti所述。

如果您只使用单个规则文件,这并不重要。但是,正如您可以想象的那样,如果您有多个具有相似规则的文件,它们将通过DRL文件中包含的命名空间来解析。