domingo, 31 de julho de 2016

Regras de negócios com Drools: Olá Mundo!


KIE: Conhecimento é tudo

Regras de negócios com Drools: Introdução


Continuando nossa série de artigos sobre Drools, hoje iremos mostrar como carregar as regras utilizando Java, para isso precisamos introduzir a API utilizada pelo Drools! Não ficaremos na teoria dessa vez, iremos mostrar três formas de carregar regras para fazermos um Olá Mundo!
Notem que embora não seja obrigatório, é altamente recomendável ler o artigo KIE: Conhecimento é tudo

Configurando o projeto


Os projetos que iremos apresentar são baseados em Maven. Assim, o primeiro passo é inicializar o projeto e adicionar as dependências do Drools 6.4.0.Final:

 <dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-api</artifactId>
  <version>${versao}</version>
 </dependency>
 <dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-compiler</artifactId>
  <version>${versao}</version>
 </dependency>
 <dependency>
  <groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${versao}</version>
 </dependency>


Uma simples regra

Para realizar nosso Olá Mundo, iremos precisar entender o nosso negócio: dizer Olá Mundo. Um olá mundo precisa ser dito para alguém ,certo? Vamos dizer isso para uma Pessoa, assim temos um objeto Pessoa:



Quando colocarmos um objeto do tipo pessoa na Working Memory, onde ficam nossos dados, a regra abaixo é ativa e... fala "Olá NOME, bem vindo ao mundo Drools!"

Como sabemos, o ponto de entrada runtime  das coisas dentro dos projetos KIE é a KieSession(uhum... KIE: Conhecimento é tudo), mas para chegar na KieSession, temos que antes programar (ou configurar) a aplicação de forma que podemos ter uma KieSession que está "ciente" dessas regras. Em seguidas mostraremos formas simples de fazer isso!

Formas simples de carregar as regras de uma aplicação Java


Vamos mostrar como carregar essa regra só utilizando as dependências acima, as formas mais simples possíveis!

Carregando só o arquivo DRL


A forma mais básica é criar um KieContainer (uhum... KIE: Conhecimento é tudo) com os arquivos de regras que queremos. Assim, logo após criar o projeto maven com as dependências mencionadas acima, modificamos a classe principal do projeto com o seguinte código(o código está no github):


Ao executar o código, você deverá ver a regra sendo executada! Veja que essa é uma forma muito, muito verbosa de se executar regras, mas permite uma flexibilida imensa! Não é nosso objetivo explorar a API inteiramente, mas com essa forma de carregar regras, podemos até ter regras geradas a partir de Strings definidas em runtime! Importante é sempre mostrar as alternativas, né!

Carregando todas as regras do Classpath


Essa segunda forma é muito mais simples, pois simplesmente lê o kmodule.xml (uhum... KIE: Conhecimento é tudo) do classpath e carrega todas os arquivos KIE para serem usados na sua aplicação, tornando o seu projeto também um kJAR. Toda simplicidade infelizmente vêm acompanhada de menor flexibilidade. Nesse caso, quase nunca queremos misturar regras com o código Java, é até antagônico! No entanto, não podemos deixar passar em branco essa outra possibilidade. Veja o código:


Para executar o mesmo, criamos um kmodule.xml em META-INF:



Careegando um kJAR do Maven

Agora vamos deixar tudo isso profissional! Essa é a forma de carregar regras mais utilizada uma vez que projetos com arquivos drools criados no console Web são projetos Maven (veremos isso em artigos futuros).
A ideia é separar o KieContainer em um kJAR que ficará instalado em um repositório Maven. Notem que podemos usar nosso maven local (padrão) ou configurar o settings.xml para acessar um repositório maven remoto! Assim, dessa forma ficaria o fluxo de trabalho:



Para utilizamos essa belezura em nosso projeto de teste, vamos primeiro mover o arquivo Drools e o objeto de negócio para um novo projeto que será instalado no nosso repositório local usando o comando mvn install. Em seguida, declaramos o plugin kie-maven-plugin no pom.xml (uhum... KIE: Conhecimento é tudo). Veja a estrutura desse projeto:



Para usarmos esse projeto, precisamos saber o release ID, que é formado a partir do GAV(Group, ArtifactID e Version) do kJAR(no nosso caso é org.aprendendojboss.drools:ola-regras:1.0). Sabendo isso, rodamos carregamos esse kJAR diretamente do Maven no nosso projeto Java. Mas há um problema, como movemos a classe Pessoa para o kJAR, agora temos erro de compilação no projeto Java. Para resolver isso, simplesmente adicionamos uma dependência nova no projeto java para apontar para o kJAR.
Outra dependência que precisamos é o kie-ci(ci de Continuous Integration, integração contínua), que irá trazer as classes necessárias para que o Drools busque módulos no maven. Um projeto sem essa dependência não verifica no maven, acelerando a execução, mas nesse caso precisamos do maven.
Veja como ficou nosso código:


Agora, nesse momento,e você prestou atenção em tudo, deve estar meio triste, pois há um problema chato: temos que ficar atualizando o código Java para trocar a versão do kJAR toda vez que criamos uma nova versão... Segura o faniquito que no próximo artigo mostramos como resolver isso!


Conclusão


Apresentamos diversas formas de carregar regras Drools de uma aplicação Java e brevemente discutimos vantagem de cada uma! Falta muito para explorarmos o mundo Drools, mas hoje demos um grande passo para começar a fazer coisas mais empolgantes. O código está no nosso github.



2 comentários:

  1. E aí, cara, não vai postar mais nada??

    ResponderExcluir
    Respostas
    1. Fala Jailson,

      Está saindo aos poucos. Fiz um novo post sobre o Drools e o Kie Scanner! http://aprendendo-jboss.blogspot.com.br/2016/12/regras-de-negocios-com-drools.html

      Excluir