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.