Drools

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

Drools — свободное программное обеспечение, написанное на Java. Система включает в себя бизнес-правилавую машину (Business Rule Engine, BRE), веб-приложение Drools Workbench и плагин для Eclipse, предназначенный для разработки. Программное обеспечение применяется в экспертных системах, является системой на основе правил и способно реагировать на различные события.

Что важно знать
Drools
Тип Система управления бизнес-правилами
Разработчик Red Hat
Написана на Java
Операционная система кроссплатформенное ПО
Аппаратная платформа Java Virtual Machine
Последняя версия
Репозиторий github.com/kiegroup/droo…
Лицензия Apache License 2.0
Сайт drools.org

Стандартизация

Drools реализует спецификацию JSR-94 (Java Specification Request 94) для создания, поддержки и обеспечения соответствия бизнес-процессов в организациях. Этот стандарт определяет простой программный интерфейс, который позволяет интегрировать систему бизнес-правил с Java-платформой.

Проект

Drools развивается сообществом JBoss. Существуют версии для сообщества (community edition) и корпоративная версия (enterprise edition) как часть коммерческих решений. Проект нацелен на создание комплексной платформы для управления бизнес-правилами и обработки сложных событий (CEP — Complex Event Processing), что позволяет компаниям формализовывать и оптимизировать бизнес-процессы, быстро адаптировать бизнес-правила к изменяющимся требованиям рынка посредством использования формальной логики[2].

Компоненты корпоративной версии:[3]

  • JBoss Rule Engine (Drools Expert) — инструмент для создания и применения правил на основе языка Drools Rule Language (DRL) и алгоритма Rete.
  • Complex Event Processing (Drools Fusion) — инструмент для мониторинга и управления сложными событиями и их взаимосвязями; помогает выявлять закономерности и реагировать на них в потоках событий.
  • Drools Workbench — веб-интерфейс с возможностями управления бизнес-процессами и моделирования; позволяет моделировать, управлять и исполнять бизнес-процессы.
  • Business Resource Planner (OptaPlanner) — инструмент для автоматического планирования и оптимизации бизнес-задач, таких как составление расписания персонала или оптимизация маршрутов.
  • Инструменты для разработчиков — программные средства для интеграции бизнес-правил в приложения.
  • Управление и мониторинг бизнес-правил — функции для контроля корректной и эффективной работы всех бизнес-правил.
  • Поддержка и сервисное обслуживание для обеспечения бесперебойной работы программного обеспечения.

Компоненты версии для сообщества:[4]

  • Drools Workbench — графический интерфейс для создания, управления и тестирования бизнес-правил.
  • Drools Expert — инструмент для автоматизации процессов принятия решений за счёт определения и управления бизнес-правилами.
  • Drools Fusion — инструмент для обработки комплексных событий, позволяет распознавать паттерны и зависимости в потоке данных, например, выявлять аномальные показания датчиков и автоматически реагировать на них.
  • jBPM (Java Business Process Management) — инструмент для моделирования и автоматизации бизнес-процессов и рабочих потоков.
  • OptaPlanner — модуль для оптимизации планирования, поиска оптимальных решений для задач по составлению расписаний или маршрутов.

Структура правил

Описание

Правила в Drools следуют схеме «Если… то…» и состоят из условия и действия. Условная часть (Left-Hand-Side, LHS; прецедент) проверяет факты, к которым применима данная бизнес-логика. Действием (Right-Hand-Side, RHS; консеквент) называется исполняемая команда или набор команд. Если условие выполняется, правило считается сработавшим[5].

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

Пример на Java:

Условие: Mensch.hunger = true;

Действие: Mensch.essen();

Язык правил Drools

Drools включает собственный, специализированный язык правил[6]. Грамматика языка проста для понимания и ориентирована на описание условий и действий над объектами.

Файлы правил имеют расширение .drl и могут включать несколько правил, запросов, функций, деклараций ресурсов, импортов, глобальных и локальных атрибутов. Допустимо разбивать правило на несколько файлов для удобства сопровождения крупных наборов правил.

Структура файла .drl:

package package-name

imports

globals

functions

queries

rules

Структура отдельного правила Drools:

rule «name»

attributes

   when

LHS

   then

RHS

end

Примеры программного кода

Следующий пример[7] иллюстрирует простое правило проверки допуска к экзамену по вождению. В классе Applicant переменная valid получает значение true или false в зависимости от соблюдения условия.

public class Applicant {
    private String name;
    private int age;
    private boolean valid;
    // методы доступа (getter/setter) здесь
}
package com.company.license

rule "Is of valid age"
when
    $a : Applicant( age < 18 )
then
    $a.setValid( false );
end

Сначала создаётся класс Applicant и определяются его свойства. После этого формулируется правило, которое присваивает кандидату моложе 18 лет значение false для переменной valid.

Когда экземпляр класса Applicant добавляется в бизнес-правиловую машину, производится автоматическая проверка ограничений. В приведённом примере два условия — тип объекта Applicant (ограничение по типу) и возраст меньше 18 (ограничение по полю).

Ограничение по типу вместе с ограничениями по полям называется паттерном (pattern). Если вставленный объект удовлетворяет всем ограничениям, считается, что условие выполнено. Переменная $a — это привязываемая переменная, которая позволяет ссылаться на найденный объект. Долларовый знак $ используется для различения переменных и имён полей, но не обязателен.

См. также

Примечания