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() чтобы освободить сеанс и избежать утечек памяти.