Drools 多个K会话未触发时流口水

Drools 多个K会话未触发时流口水,drools,rule-engine,drools-flow,Drools,Rule Engine,Drools Flow,我用的是drools 5.6。在camel-server.xml中,我的路由定义为: <route> <from uri="cxfrs://bean://rsServer"/> <policy ref="droolsPolicy"> <unmarshal ref="xstream-json" /> <to uri="drools:node1" /> <marshal ref="xstrea

我用的是drools 5.6。在camel-server.xml中,我的路由定义为:

<route>
   <from uri="cxfrs://bean://rsServer"/>
   <policy ref="droolsPolicy">
     <unmarshal ref="xstream-json" />
     <to uri="drools:node1" />
     <marshal ref="xstream-json" />
   </policy>
</route>
服务器启动,并在7到12之间更改查找。然而,我首先运行的任何查找都是实际触发的唯一规则。因此,如果我启动服务器并运行ksession-7,它将成功运行,然后更改为ksession-12,不会发生任何事情(不会在12.drl中进行调试)

如果我重新启动服务器并首先运行12,它将成功运行,然后更改为ksession-7,什么也不会发生

我对此感到困惑,并相信我错过了一些东西。我的目标是为每个用户提供一个带有特定规则的通用规则模板。有谁能帮我解释一下,为什么没有正确引导(或没有处理)

编辑:添加示例

t1.drl: 包org.company.t1.rules 导入org.test*

rule "check patients age" dialect "mvel"
when
    $p : Patient( age >= 10)
then
    System.out.println("t1 - age greater then 10")
    $ca = new Message("age greater then 10")
    $p.alerts.add($ca)
end
t2.drl:

package org.company.t2.rules
import org.test.*

rule "check patients age" dialect "mvel"
when
    $p : Patient( age >= 15)
then
    System.out.println("t2 - age greater then 15")
    $ca = new Message("age greater then 15")
    $p.alerts.add($ca)
end
ruletemplate.drl:

package  org.test

declare Message
  text : String
end

declare Patient
    id:String
    age : Integer
    alerts : java.util.ArrayList
end

rule "setup rule for alerts" dialect "mvel" salience 100
when
  $p : Patient()
then
  System.out.println("initialize array")
  $p.alerts = new java.util.ArrayList();
end
knowledge-server.xml:

<drools:resource id="ruletemplate" type="DRL" source="classpath:ruletemplate.drl" />

 <drools:kbase id="kbase5" node="node1">
  <drools:resources>
    <drools:resource ref="ruletemplate" />
    <drools:resource  type="DRL" source="classpath:t1.drl"/>
  </drools:resources>
 </drools:kbase>

<drools:kbase id="kbase6" node="node1">
  <drools:resources>
    <drools:resource ref="ruletemplate" />
    <drools:resource  type="DRL" source="classpath:t2.drl"/>
  </drools:resources>
</drools:kbase>

<drools:ksession id="ksession5" type="stateless" kbase="kbase5" node="node1"/>
<drools:ksession id="ksession6" type="stateless" kbase="kbase6" node="node1"/>
请求2:(除非在服务器重新启动后先运行,否则不工作:

{"batch-execution": { "lookup":"ksession6", "commands": [ { "insert": { "out-identifier": "patient", "object": { "org.test.Patient":[{"age":16}]}}},{"fire-all-rules": ""}]}}


{"execution-results":{"results":{"result":{"identifier":"patient","value":{"org.test.Patient":{"age":16}}},"fact-handle":{"identifier":"patient","external-form":"0:2:552327108:552327108:2:DEFAULT"}}}}

跟踪catalina.out显示了t1的调试器输出,因为它是第一次运行的,但t2上没有显示任何内容。您要插入什么?其中有什么类型的规则?
可能是第一次运行一切正常,第二次在后面崩溃?

salaboy-我在原始请求中添加了更多细节。我在日志中没有看到任何表示崩溃的内容。上面的示例现在是一个非常基本的示例,但它应该允许您看到问题。谢谢
<drools:resource id="ruletemplate" type="DRL" source="classpath:ruletemplate.drl" />

 <drools:kbase id="kbase5" node="node1">
  <drools:resources>
    <drools:resource ref="ruletemplate" />
    <drools:resource  type="DRL" source="classpath:t1.drl"/>
  </drools:resources>
 </drools:kbase>

<drools:kbase id="kbase6" node="node1">
  <drools:resources>
    <drools:resource ref="ruletemplate" />
    <drools:resource  type="DRL" source="classpath:t2.drl"/>
  </drools:resources>
</drools:kbase>

<drools:ksession id="ksession5" type="stateless" kbase="kbase5" node="node1"/>
<drools:ksession id="ksession6" type="stateless" kbase="kbase6" node="node1"/>
   {"batch-execution": { "lookup":"ksession5", "commands": [ { "insert": { "out-identifier": "patient", "object": { "org.test.Patient":[{"age":16}]}}},{"fire-all-rules": ""}]}}


{"execution-results":{"results":{"result":{"identifier":"patient","value":{"org.test.Patient":{"age":16,"alerts":{"org.test.Message":{"text":"age greater then 10"}}}}},"fact-handle":{"identifier":"patient","external-form":"0:2:537549803:537549803:2:DEFAULT"}}}}
{"batch-execution": { "lookup":"ksession6", "commands": [ { "insert": { "out-identifier": "patient", "object": { "org.test.Patient":[{"age":16}]}}},{"fire-all-rules": ""}]}}


{"execution-results":{"results":{"result":{"identifier":"patient","value":{"org.test.Patient":{"age":16}}},"fact-handle":{"identifier":"patient","external-form":"0:2:552327108:552327108:2:DEFAULT"}}}}