Как и стоит ли интегрировать Java Webapp + drools + Guvnor?

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

Поскольку эти бизнес-правила очень часто используются бизнесом, я бы хотел, чтобы бизнес внес необходимые изменения в правила через графический интерфейс.

У меня есть Googled по интеграции веб-приложения java + Drools + Guvnor, и я никуда не денусь.

Мои вопросы:

  1. Поддерживает ли Drools легкий графический интерфейс для редактирования правил?
  2. Drools Guvnor - это легкий графический интерфейс или есть способ отказаться от него?
  3. Насколько легко интегрировать приложение в Guvnor, чтобы читать правила?

Любые другие предложения относительно простой реализации интеграции Java-приложения + Drools + Guvnor были бы замечательными.

Любые указатели на учебные пособия также подойдут для меня.


person Sudhakar    schedule 27.06.2012    source источник
comment
Вот результат моего анализа различных рамок правил. Надеюсь, это поможет blog.sudhakarduraiswamy.in/java/   -  person Sudhakar    schedule 23.07.2014


Ответы (2)


Я делаю что-то похожее на то, что вы хотите сделать.

Поскольку эти бизнес-правила очень часто устанавливаются бизнесом, я бы хотел, чтобы он внес необходимые изменения в правила через графический интерфейс.

ПРЕДУПРЕЖДЕНИЕ ПРЕДУПРЕЖДЕНИЕ ПРЕДУПРЕЖДЕНИЕ !!! Распространено заблуждение, что, пока существует графический интерфейс, непрограммисты могут его использовать. Это ... не тот вывод, к которому я пришел. Это помогает, но сложная часть программирования - это не написание кода, а поиск хороших решений нужных проблем. Я уверен, что некоторые из наиболее умных и технически подкованных деловых людей могут что-то делать с Гувнором, но не ожидайте, что это будет какая-то дорога из желтого кирпича в Страну Магического Блаженства. Вы по-прежнему должны предоставить деловым людям разумную модель данных и API, которые позволяют им делать то, что им нужно, но не позволяют им случайно сделать то, что они не хотят делать.

1. Поддерживает ли Drools упрощенный графический интерфейс для редактирования правил?

2. Drools Guvnor - это легкий графический интерфейс или есть способ отказаться от него?

Что ж, «легковесность» является предметом обсуждения, но Guvnor работает довольно хорошо и не требует больше, чем браузер, так что я думаю, что это нормально.

3. Насколько легко интегрировать приложение в Guvnor, чтобы читать правила?

Что ж, после того, как вы настроили и запустили Guvnor, настроить приложение для использования KnowledgeAgent для подключения к Guvnor и прослушивания новых обновлений правил не представляет особой сложности.

К сожалению, у Drools в целом и у Guvnor в частности есть множество причуд, которые вам, возможно, придется обойти (например, вам нужно взорвать файл Guvnor WAR и отредактировать файлы в WEB-INF / beans.xml, чтобы настроить не- конфигурация по умолчанию ...). Но как только вы это исправите, я думаю, что это работает очень хорошо.

Что касается документации, Javadocs может быть немного скудным, но на веб-сайте есть довольно хороший материал, в том числе несколько книг.

В общем, Drools и Guvnor - мощные инструменты, но заставить их работать нетривиально. Если вам действительно нужно то, что они предлагают, они того стоят, но, возможно, стоит подумать, хватит ли более простого скриптового решения.


Теперь, если вам действительно нужны Drools, вот мой главный совет - держите отдельные модели данных для своей базы данных и правил. Это означает, что нужно написать много скучного кода преобразования, но оно того стоит.

Приложение, над которым я работаю, использует JPA для работы с базами данных, и было бы не очень приятно использовать эту модель данных в наших правилах. Некоторые причины:

То, что подходит вашему уровню данных, не обязательно соответствует Drools, и наоборот.

У нас есть древовидная структура, которая в JPA, естественно, является @OneToMany отношением к дочерним элементам в списке в родительском узле. Работа со списками в Drools была довольно болезненной, поэтому мы свели ее к структуре, в которую вставляем один ParentNode объект и несколько ChildNode объектов, с которыми было намного проще работать.

Проведите рефакторинг.

Модель данных правила также должна находиться внутри Guvnor - а это означает, что вы можете нарушить все правила, если переименуете класс сущности или что-то в этом роде. Отдельная модель данных для правил означает, что вы можете без проблем провести рефакторинг базы данных.

Покажите им то, что им нужно увидеть.

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

Защита.

Мы разработали большинство наших правил для работы как этот псевдокод:

rule "Say hello to user"
when 
  user : User
then
  insert(new ShowMessageCommand("Hello " + user.getName() + "!"))
end

... и поэтому для каждого пакета правил четко определено, какие ответные команды вы можете вставлять и что они делают. После запуска правил в нашем приложении мы выбираем объекты, вставленные в сеанс с помощью правил, и действуем в соответствии с ними (шаблон посетителя оказался очень полезным для избежания длинных _6 _ / _ 7 _ / _ 8_ цепочек).

Я очень рад, что мы сделали это таким образом, вместо того, чтобы позволить разработчикам правил делать то, что они думают, что они хотят делать с нашими объектами JPA.

В любом случае, надеюсь, это поможет.

person gustafc    schedule 28.06.2012
comment
Привет, gustafc, я хотел бы интегрировать слюни с моими веб-сервисами для отдыха на майке. В остальном все условия будут сгенерированы, а затем вставлены в движок слюни, чтобы получить согласованные правила. Как интегрироваться с веб-сервисом jersey rest. Пожалуйста помоги. Спасибо - person Kumar; 03.10.2013
comment
@Kumar начинается с руководство разработчика, и если у вас возникнут проблемы, спросите здесь, в SO. - person gustafc; 05.10.2013

Приведенный выше ответ хорошо объяснен. Но вот как интегрировать Java & Drools-Guvnor ...

private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeAgent kagent = KnowledgeAgentFactory
        .newKnowledgeAgent( "MortgageAgent" );
kagent.applyChangeSet( ResourceFactory
        .newClassPathResource( "changeset.xml" ) );
KnowledgeBase kbase = kagent.getKnowledgeBase();
kagent.dispose();
return kbase;
}

<?xml version="1.0" encoding="UTF-8"?>
<change-set xmlns='http://drools.org/drools-5.0/change-set'
    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
    xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd'>
  <add>
    <resource
  source='http://localhost:8080/guvnor-webapp/org.drools.guvnor.Guvnor/package/mortgages/LATEST'
  type='PKG' basicAuthentication='enabled' username='admin' password='admin' />

  </add>
</change-set>

Надеюсь, это тоже будет полезно.

person Melvins    schedule 08.05.2014