Drools中物理包和包声明的用途是什么。
例如,
我在物理包com.mycompany中有一条规则Myrule.drl
据我所知,drools中的包声明不依赖于文件所在的实际物理包。
所以我可以在Myrule.drl中给出
package com.sample;
规则“我的规则” 什么时候 然后 端
有人可以帮我理解drl文件所在的物理包/文件夹和drl文件中的包声明之间的关系吗?
答案 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文件中包含的命名空间来解析。