0

I am using drools 5.6. In camel-server.xml I have my route defined as:

<route>
   <from uri="cxfrs://bean://rsServer"/>
   <policy ref="droolsPolicy">
     <unmarshal ref="xstream-json" />
     <to uri="drools:node1" />
     <marshal ref="xstream-json" />
   </policy>
</route>

I am not defining a ksession. Then in my knowledge-service.xml I have 2 sessions defined (by user) that point to different DRL files. These import the same common DRL file

<drools:kbase id="kbase1" node="node1">
<drools:resources>
  <drools:resource ref="ruletemplate" />
  <drools:resource  type="DRL" source="classpath:7.drl"/>
</drools:resources>
</drools:kbase>
<drools:ksession id="ksession-7" type="stateless" kbase="kbase1" node="node1"/>
<drools:kbase id="kbase2" node="node1">
  <drools:resources>
  <drools:resource ref="ruletemplate" />
  <drools:resource type="DRL" source="classpath:12.drl"/>
</drools:resources>
</drools:kbase>
<drools:ksession id="ksession-12" type="stateless" kbase="kbase2" node="node1"/>

The idea is the ksession will be defined in the JSON request passed in:

{"batch-execution": { "lookup":"ksession-12", "commands": [ { "insert": { "out-identifier": ...

The server starts up and changing the lookup between 7 and 12 works. HOWEVER whatever lookup I run first is the only rule that actually fires. So if I start the server and run ksession-7 it will run successfully, then change to ksession-12 nothing happens (does not hit debugging in 12.drl)

If I then restart the server and run 12 first it will run successfully, then change to ksession-7 and nothing happens

I am confused by this and believe I am missing something. My goal is to have a common rule template with specific rules for each user. Can anyone help guide me why this is not being directed correctly (or not processing)

EDIT: Adding example

t1.drl: package org.company.t1.rules import 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"/>

First request that works:

   {"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"}}}}

Request 2: (doesnt work unless run first after server restart:

{"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"}}}}

Tailing catalina.out shows the debugger output for t1 as it was run first, but nothing on t2

Bryan
  • 1
  • 1

1 Answers1

0

What are you inserting? what kind of rules do you have in there? Could be that the first run everything works well and the second is crashing in the back?

salaboy
  • 4,123
  • 1
  • 14
  • 15
  • salaboy - I added more details to the original request. I see nothing in the logs that indicate crashing. The example above is now an extremely basic example, but it should allow you to see the issue. Thanks – Bryan Sep 24 '13 at 10:47