JBPM:如何监听ResourceChangeScanner在更改后修改包

时间:2013-12-31 04:24:33

标签: versioning upgrade drools jbpm

我想使用WorkflowProcessInstanceUpgrader升级我的流程实例。要在任何更改后触发升级,我想监听ResourceChangeScanner完成的更改。为了听取更改的完成,我正在寻找配置KnowledgeBaseEventListener。我有drools-spring-integration,使用drools-spring.xsd来配置bean和事件监听器。我从春天开始学习KBase和Ksession。我试图在我的弹簧配置中注册我的KnowledgeBaseEventListener。但是,问题是drools-spring.xsd只注册了3种听众 1. ProcessEventListener 2. AgendaEventListener 3. WorkingMemoryEventListener

需要解决方案: 1.我需要知道如何在弹簧配置中配置KnowledgeBaseEventListener? ksession的示例我们有以下配置来注册监听器。

                 <drools:ksession id="knowledgeSession" type="stateful" kbase="knowledgeBase">
                        <drools:agendaEventListener ref="agendaEventListener"/>
                        <drools:workingMemoryEventListener ref="wmEventListener"/>

  1. 这是触发批处理升级的最佳位置吗?在KBaseEventListener中?
  2. 我应该使用knowledgebase.addEventListener()添加KBaseEventListener吗?
  3. 环境 1.Drools-5.5.0.Final 一个。的Guvnor 湾jbpm的

1 个答案:

答案 0 :(得分:0)

获得完全控制的一种方法是在java中自己创建ksession。 (下面我将它插入到工厂bean的上下文中):

  <bean id="ksessionInit" class="my.com.KSessionInitializer">
      <constructor-arg index="0"><ref bean="jpaEMF"/></constructor-arg>
      <constructor-arg index="0"><ref bean="txMgr"/></constructor-arg>
      <constructor-arg index="0"><ref bean="kagent"/></constructor-arg>
      <constructor-arg index="0"><ref bean="node1"/></constructor-arg>
  </bean>
  <bean id="ksession1" factory-bean="ksessionInit" factory-method="getKsession"/>

这里KSessionInitializer构造函数完成所有工作:设置EMFactory和TXmanager;添加事件监听器;并在节点中插入ksession,如:

  anode.set("ksession1",ksession);

在我的情况下,我正在使用JPAKnowledgeService,所以为了得到ksession我做了:

  ksession=JPAKnowledgeService.loadStatefulKnowledgeSession(sessionid, kAgent.getKnowledgebase(),null,etc);

-hth J