2013-09-22 1 views
0

Я использую drools 5.6. В верблюжьего server.xml у меня есть мой маршрут определяется как:Drools camel multiple ksession not firing

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

Я не определяя ksession. Затем в моем знании-service.xml у меня есть 2 сеанса, определенные (пользователем), которые указывают на разные файлы DRL. Эти импортировать тот же общий файл DRL

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

Идея является ksession будет определена в запросе JSON передается в:

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

Сервер запускается и меняющийся взгляд вверх между 7 и 12 работ. ОДНАКО какой бы ни был поиск, который я запускаю первым, это единственное правило, которое действительно срабатывает. Поэтому, если я запустил сервер и запустил ksession-7, он будет успешно запущен, а затем изменится на ksession-12, ничего не произойдет (не удастся отладить в 12.drl)

Если я затем перезагрузите сервер и запустите 12, успешно сменится на ksession-7, и ничего не происходит

Я смущен этим и считаю, что чего-то не хватает. Моя цель состоит в том, чтобы иметь общий шаблон правила с определенными правилами для каждого пользователя. Может кто-нибудь помочь вести меня, почему это не направляется правильно (или не обрабатывать)

EDIT: Добавление пример

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 

знаний 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"/> 

Первый запрос, который работает:

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

Запрос 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"}}}} 

Tailing catalina.out показывает вывод отладчика для t1, поскольку он был запущен первым, но ничего не было на t2

ответ

0

Что вы вставляете? какие у вас правила? Может быть, первый запуск работает хорошо, а второй - в спину?

+0

salaboy - Я добавил более подробную информацию к исходному запросу. Я ничего не вижу в журналах, которые указывают на сбой. Приведенный выше пример теперь является чрезвычайно простым примером, но он должен позволить вам увидеть проблему. благодаря – Bryan