Как загрузить конкретное правило (.drl) из веб-приложения Guvnor?

#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. Итак, моя программа прочитала эти два правила с помощью двух разных наборов изменений.