如何获得Drools KnowledgeAgent检测事实?

时间:2014-02-22 12:54:17

标签: drools

我在设置中使用Drools Spring KnowledgeAgent从外部路径加载规则。该路径目前包含DRL文件,因此规则是即时编译的。出于某种原因,无论在何处宣布,我都无法通过规则来检测我的事实。我使用了以下方法,并继续获得ClassNotFoundException / NoClassDefFoundException

  1. 外部事实模型,即Java类
  2. 包含事实的外部DRL文件
  3. 在与规则相同的DRL中声明的事实
  4. 我需要让所有上述案例都有效。

    我对KnowledgeAgent的Spring配置就像

    <!-- For scanning the changes -->
    <drools:resource-change-scanner id="scanner" interval="10" />
    
    <drools:kagent id="ruleAgent" kbase="ruleKBase" new-instance="true" >
      <drools:resources>
        <drools:resource source="file://external/path/rules/>
      </drools:resources>
    </drools:kagent>
    
    <!-- For starting the resource scanner -->
    <bean id="starter" class="study.ResourceChangeScannerStarter" depends-on="ruleAgent" />
    

    包含规则和事实的我的DRL位于//external/path/rules路径中。如果我删除了所有对事实的引用并且有一条没有LHS条件的规则,我在控制台上得到了简单的打印输出,所以我可以验证规则是否加载得很好。

    我正在使用Drools 5.5.0

1 个答案:

答案 0 :(得分:0)

行。通过使用KnowledgeBuilder从规则创建一个包(ResourceType.PKG)并将其用作KnowledgeAgent的URL资源,我使它工作得更好。然而,整个设置存在很多问题,所以我结束了自己的实现。

基本上我所拥有的是一个

的班级
  1. 在外部路径中查找文件
  2. 将所有规则文件作为资源添加到KnowledgeBuilder
  3. 从构建器添加知识包到KnowledgeBase
  4. 从KnowledgeBase
  5. 创建新的无状态会话

    我在spring配置中唯一拥有的是kBase,我可以很好地使用Spring获取自定义类

    <drools:kbase id="ruleKnowledgeBase">
    </drools:kbase>
    

    标记我自己的问题回答我的情况已经结束。