Drools - redação de regras

Se você vir a regra padrão que está escrita no projeto Hello World (Sample.drl), há muitas palavras-chave usadas que iremos explicar agora.

Sample.drl

  • Package- Cada regra começa com um nome de pacote. O pacote atua como um namespace para regras. Os nomes das regras em um pacote devem ser exclusivos. Os pacotes em regras são semelhantes aos pacotes em Java.

  • Import statement- Quaisquer que sejam os fatos aos quais você deseja aplicar a regra, esses fatos precisam ser importados. Por exemplo, com.sample.DroolsTest.Message; no exemplo acima.

  • Rule Definition- Consiste no Nome da Regra, na condição e na Consequência. As palavras-chave do Drools sãorule, when, then, e end. No exemplo acima, os nomes das regras são “Hello World” e “GoodBye”. owhen parte é a condição tanto nas regras quanto na thenparte é a consequência. Na terminologia da regra, owhen parte também é chamada de LHS (lado esquerdo) e o then parte como o RHS (lado direito) da regra.

Agora vamos examinar os termos usados ​​no arquivo Java usado para carregar os Drools e executar as regras.

Base de Conhecimento

A Base de Conhecimento é uma interface que gerencia uma coleção de regras, processos e tipos internos. Está contido dentro da embalagemorg.drools.KnowledgeBase. No Drools, eles são comumente chamados deknowledge definitions ou knowledge. As definições de conhecimento são agrupadas emknowledge packages. As definições de conhecimento podem ser adicionadas ou removidas. O principal objetivo da Base de Conhecimento é armazená-los e reutilizá-los porque sua criação é cara. A Base de Conhecimento fornece métodos para criar sessões de conhecimento.

Sessão de Conhecimento

A sessão de conhecimento é recuperada da base de conhecimento. É a principal interface para interagir com o Drools Engine. A sessão de conhecimento pode ser de dois tipos -

  • Sessão de Conhecimento sem Estado

  • Sessão de Conhecimento Stateful

Sessão de Conhecimento sem Estado

Sessão de conhecimento sem estado é uma sessão sem estado que forma o caso de uso mais simples, sem utilizar inferência. Uma sessão sem estado pode ser chamada como uma função, passando alguns dados e recebendo alguns resultados de volta. Exemplos comuns de uma sessão sem estado incluem -

  • Validation

    • Esta pessoa é elegível para uma hipoteca?

  • Calculation

    • Calcule um prêmio de hipoteca.

  • Routing and Filtering

    • Filtre as mensagens recebidas, como e-mails, em pastas.

    • Envie mensagens recebidas para um destino

Sessão de Conhecimento Stateful

Sessões com estado têm vida mais longa e permitem mudanças iterativas ao longo do tempo. Alguns casos de uso comuns para sessões com estado incluem -

  • Monitoring

    • Acompanhamento e análise do mercado de ações para compras semiautomáticas.

  • Diagnostics

    • Detecção de falhas, diagnóstico médico

  • Logistics

    • Rastreamento de encomendas e provisionamento de entrega

Construtor de Conhecimento

A interface KnoledgeBuilder é responsável por construir um KnowledgePackage a partir de definições de conhecimento (regras, processos, tipos). Está contido dentro da embalagemorg.drools.builder.KnowledgeBuilder. As definições de conhecimento podem estar em vários formatos. Se houver algum problema com a construção, o KnowledgeBuilder relatará os erros por meio destes dois métodos:hasErrors e getError.

O diagrama a seguir explica o processo

No exemplo acima, como estamos pegando um exemplo simples de sessão de conhecimento sem estado, inserimos o fato na sessão e, em seguida, o método fireAllRules () é chamado e você vê a saída.

No caso de uma sessão de conhecimento stateful, uma vez que as regras são disparadas, o objeto da sessão de conhecimento stateful deve chamar o método dispose() para liberar a sessão e evitar vazamentos de memória.