【问题标题】:Physical packages and package declaration in DROOLSDROOLS 中的物理包和包声明
【发布时间】:2014-04-04 03:41:18
【问题描述】:

Drools 中物理包和包声明有什么用。

例如,

我有一个规则,物理包 com.mycompany 中的 Myrule.drl

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

所以我可以把 Myrule.drl 作为

包 com.sample;

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

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

【问题讨论】:

    标签: drools


    【解决方案1】:

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

    希望对你有帮助,

    【讨论】:

      【解决方案2】:

      您为什么不直接阅读文档,Drools“专家”手册,第 7.5 节?

      包是规则和其他相关结构的集合,例如导入和全局。包成员通常相互关联——例如,可能是 HR 规则。一个包代表一个命名空间,理想情况下,它对于给定的规则组保持唯一。包名本身就是命名空间,与文件或文件夹没有任何关系。

      还有更多...

      【讨论】:

        【解决方案3】:

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

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

        DRL sn-p

        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 文件中包含的命名空间解析。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-04
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 2021-05-09
          • 2015-12-03
          • 1970-01-01
          • 2012-11-05
          相关资源
          最近更新 更多