Drools - Написание правил

Если вы видите правило по умолчанию, которое написано в проекте Hello World (Sample.drl), используется много ключевых слов, которые мы сейчас объясним.

Sample.drl

  • Package- Каждое правило начинается с имени пакета. Пакет действует как пространство имен для правил. Имена правил в пакете должны быть уникальными. Пакеты в правилах похожи на пакеты в Java.

  • Import statement- К любым фактам, к которым вы хотите применить правило, эти факты необходимо импортировать. Например, com.sample.DroolsTest.Message; в приведенном выше примере.

  • Rule Definition- Он состоит из названия правила, условия и следствия. Ключевые слова Drools:rule, when, then, и end. В приведенном выше примере имена правил - «Hello World» и «GoodBye». Вwhen часть - это условие как в правилах, так и в thenчасть - это следствие. В терминологии правилwhen часть также называется LHS (левая сторона), а then часть как RHS (правая часть) правила.

Теперь давайте рассмотрим термины, используемые в файле Java, используемом для загрузки Drools и выполнения правил.

База знаний

База знаний - это интерфейс, который управляет набором правил, процессов и внутренних типов. Он содержится внутри упаковкиorg.drools.KnowledgeBase. В Drools они обычно называютсяknowledge definitions или же knowledge. Определения знаний сгруппированы вknowledge packages. Определения знаний можно добавлять или удалять. Основная цель базы знаний - хранить и повторно использовать их, потому что их создание стоит дорого. База знаний предоставляет методы для создания сеансов знаний.

Сессия знаний

Сеанс знаний извлекается из базы знаний. Это основной интерфейс для взаимодействия с Drools Engine. Сеанс знаний может быть двух типов -

  • Сессия знаний без гражданства

  • Сессия с постоянным знанием

Сессия знаний без гражданства

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

  • Validation

    • Имеет ли этот человек право на ипотеку?

  • Calculation

    • Рассчитайте ипотечную премию.

  • Routing and Filtering

    • Фильтруйте входящие сообщения, например электронные письма, по папкам.

    • Отправлять входящие сообщения в пункт назначения

Сессия с постоянным знанием

Сеансы с отслеживанием состояния более продолжительны и допускают итеративные изменения во времени. Некоторые распространенные варианты использования сеансов с отслеживанием состояния включают в себя:

  • Monitoring

    • Мониторинг и анализ фондового рынка для полуавтоматических покупок.

  • Diagnostics

    • Диагностика, медицинская диагностика

  • Logistics

    • Отслеживание посылок и обеспечение доставки

Строитель знаний

Интерфейс KnoledgeBuilder отвечает за создание пакета знаний на основе определений знаний (правил, процессов, типов). Он содержится внутри упаковкиorg.drools.builder.KnowledgeBuilder. Определения знаний могут быть в различных форматах. Если при сборке возникнут какие-либо проблемы, KnowledgeBuilder сообщит об ошибках следующими двумя способами:hasErrors и getError.

Следующая диаграмма объясняет процесс

В приведенном выше примере, поскольку мы берем простой пример сеанса знаний без сохранения состояния, мы вставили факт в сеанс, а затем вызывается метод fireAllRules (), и вы видите результат.

В случае сеанса знаний с сохранением состояния, как только правила запущены, объект сеанса знаний с сохранением состояния должен вызвать метод dispose() чтобы освободить сеанс и избежать утечек памяти.