如何配置使用Spring重新启动Server(tomcat)时重新加载Drools知识会话 [英] How to configure to reload the drools knowledge session when server(tomcat) restart using Spring

查看:119
本文介绍了如何配置使用Spring重新启动Server(tomcat)时重新加载Drools知识会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using the drools server 5.5 Final with Spring to configure the knowledge session to persist to database(mysql) and expect it will reload the session when server(tomcat) restart. code snippet as below

<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中插入会话信息

I can see it will insert the session info to Mysql when Tomcat restart each time

如果会话之前一直存在,如何配置以从数据库中重新加载会话?

How to configure to reload the session from Database if the session has been persisted before?

推荐答案

最后,我们碰巧看到了KnowledgeSessionDefinitionParser的src代码,其中
将解析春季配置文件
http://grepcode.com/file/repo1 .maven.org / maven2 / org.drools / drools-spring / 5.5.0.Final / org / drools / container / spring / namespace / KnowledgeSessionDefinitionParser.java?av = f

Finally, we happen to see the src code of KnowledgeSessionDefinitionParser which will parse the spring configuration file http://grepcode.com/file/repo1.maven.org/maven2/org.drools/drools-spring/5.5.0.Final/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java?av=f

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

in the code, it will get the value of 'load' attribute and use as the sessionId to reload. so we tested to add load="sessionId" and it is ok to reload. but if config the sessionId to a number which does not exist in the DB, it will throw exception

  <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>

对于实际的应用程序,在进行src配置时不可能知道sessionId,也没有发现流口水为我们提供了预先设置sessionId的任何方式。

For a real application, it is impossible to know the sessionId when do the src configuration, also have not found drools have provided any way for us to pre-set the sessionId.

那么这是正确的解决方案吗?
有人有高级意见吗?

so is it the correct solution? Any one have advanced opinion?

这篇关于如何配置使用Spring重新启动Server(tomcat)时重新加载Drools知识会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆