如何配置在使用Spring重新启动服务器(tomcat)时重新加载drools知识会话

如何配置在使用Spring重新启动服务器(tomcat)时重新加载drools知识会话,spring,session,drools,Spring,Session,Drools,我正在使用drools server 5.5 Final with Spring来配置知识会话以持久化到数据库(mysql),并期望它在服务器(tomcat)重新启动时重新加载会话。 代码片段如下所示 <drools:resource-change-scanner id="s1" interval="5" enabled="true" /> <drools:grid-node id="node1"/> <drools:kagent id="kagent1" k

我正在使用drools server 5.5 Final with Spring来配置知识会话以持久化到数据库(mysql),并期望它在服务器(tomcat)重新启动时重新加载会话。 代码片段如下所示

<drools:resource-change-scanner id="s1" interval="5" enabled="true" />
  <drools:grid-node id="node1"/>

<drools:kagent id="kagent1" kbase="kbase1" new-instance="false">
      <drools:resources>
         <drools:resource  type="DRL" source="file:///tmp/test.drl"/>
    </drools:resources>
</drools:kagent>

  <drools:kbase id="kbase1" node="node1">
  </drools:kbase>

  <drools:ksession id="ksession1" type="stateful" kbase="kbase1" node="node1">
      <drools:configuration>
        <drools:jpa-persistence>
              <drools:transaction-manager ref="txManager" />
              <drools:entity-manager-factory ref="myEmf" />

        </drools:jpa-persistence>
      </drools:configuration>
  </drools:ksession>

我可以看到每次Tomcat重启时,它都会将会话信息插入Mysql


如果会话之前已被持久化,如何配置从数据库重新加载会话?

最后,我们碰巧看到KnowledgeSessionDefinitionParser的src代码 将解析spring配置文件

在代码中,它将获得'load'属性的值,并用作要重新加载的sessionId。因此,我们测试了添加load=“sessionId”,可以重新加载。但如果将sessionId配置为数据库中不存在的数字,它将抛出异常

  <drools:ksession id="ksession1" type="stateful" kbase="kbase1" node="node1">
      <drools:configuration>
        <drools:jpa-persistence load="42011">
              <drools:transaction-manager ref="txManager" />
              <drools:entity-manager-factory ref="myEmf" />

        </drools:jpa-persistence>
      </drools:configuration>
  </drools:ksession>

对于一个实际的应用程序,不可能知道sessionId何时进行src配置,也没有发现drools为我们提供了任何预先设置sessionId的方法

那么这是正确的解决方案吗?
有谁有先进的见解吗?

啊。。。您正在使用Drools Spring XML配置文件。它非常基本,我发现它很麻烦(例如依赖于旧版本的Spring)。我发现使用Drools Java API创建知识库和会话更容易。这样我就可以使用Spring来正确地管理事物。@Steve如果使用API来创建知识库和知识会话,其他人使用Spring,那么如何将API和Spring方式结合起来?有没有示例?Drools Spring XML配置所做的就是在幕后创建Spring管理的bean。相反,您可以使用
@Bean
方法创建一个Spring
@Configuration
类,该方法使用API创建知识库、知识代理等。这相当不完整,但我一直在构建一个会话范围服务和Drools 6.x.x的示例:github.com/gratiartis/qzr