#drools #rule-engine
#пускает слюни #движок правил
Вопрос:
Например, я добавил два правила (rule1.drl и rule2.drl) в Guvnor.
Обычно я могу получить эти правила в сочетании, создав changeset.xml нравится:
<change-set ...>
<add>
<resource source='http://localhost/guvnor/org.drools.guvnor.Guvnor/package/name/LATEST.drl' type='DRL' basicAuthentication="enabled" username="username" password="password" />
</add>
</change-set>
И загрузите changeset.xml с помощью кодов:
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("Test Agent", kaconf);
kagent.applyChangeSet(ResourceFactory.newClassPathResource("changeset.xml"));
knowledgeBase = kagent.getKnowledgeBase();
Но как я могу получить только определенное правило? например, rule2.drl
Конечно, я могу изменить URL в changeset.xml для
<resource source='http://localhost/guvnor/org.drools.guvnor.Guvnor/package/name/LATEST/rule2.drl' type='DRL' basicAuthentication="enabled" username="username" password="password" />
Но я обнаружил, что в файле ответов отсутствует имя пакета и все инструкции импорта, например:
package com.packname;
import namespace.EntityA;
Ответ №1:
Когда нам нужно выполнить определенный пакет drl, мы используем различный набор изменений для каждого пакета / снимка.
Если правила связаны, используйте разные pojo для разделения правила, потому что вы знаете, что guvnor скомпилирует все ваши правила из пакета в один большой .drl, это может быть медленным, если у вас есть сотня завершающих правил и повторять их с разными экземплярами pojo.
Ответ №2:
Шаблоны URL для пакетов и отдельных ресурсов отличаются. Для ресурсов (например, DRL) шаблон является:
<resource source='http://localhost:9090/drools-guvnor/rest/packages/test/assets/MyRule/source' type='DRL' />
Ответ №3:
Мой способ решения этой проблемы — создать два разных пакета, один для rule1.drl и один для rule2.drl. Итак, моя программа прочитала эти два правила с помощью двух разных наборов изменений.