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