Iniciando com o Drools Rules

Recentemente tive que utilizar o Drools Rules para o realizar uma dada tarefa no meu TCC. Tive alguma dificuldade no que se refere a instalação da ferramenta e a compreensão da mesma.

Este post tem como objetivo ajudá-los na instalação e execução do exemplo mais simples que possa existir no Drools Rules.



Antes de tudo, se quer ler algo oficial sobre o Drools, vá aqui. Se quer ver a documentação, vá aqui.

Instalando e testando o Drools (Ubuntu/Linux)

Drools provém uma IDE baseado no Eclipse, que é opcional. Neste caso vamos instalar o plugin para utilizar em uma versão “normal” do Eclipse no sistema.


Instalar o GEF (Eclipse Graphical Editing Framework) que é utilizado para visualização de grafos no plugin. 
  • Abrir Eclipse e ir em Help->Software updates...->Available Software->Add Site... e colocar o link http://download.eclipse.org/tools/gef/updates/releases/ e colocar GEF como nome requerido. Depois dê OK. 
  • Marcar SOMENTE Graphical Editing Framework GEF para instalar, pressione Next e Aceite o acordo quando perguntado. 
  • Reiniciar Eclipse quando solicitado. 

Instalar o plugin do Drools no Eclipse.
  • Baixar Drools and jBPM tools em http://www.jboss.org/drools/downloads.html 
  • Deszipar dentro do diretório principal do eclipse e deixar com permissões 775 via chmod. 
  • Abrir o ReadMe dentro do zip e seguir as instruções, que devem ser mais ou menos estas:
Instalando o plugin no Eclipse
- Abrir Eclipse.
- Abrir o menu "Help", item do menu "Install new software..."
- Clicar no the botão "Add..." to add a new software site.
- Coloque no nome "drools local update site"
- Clique no the botão "Local..." e selecione ".../binaries/org.drools.updatesite" ← referente ao diretório deszipado.
Select todos os plugins. Clique “Next” e “Finish”.


Instalar e Definir o Drools Runtime
  • Abrir Windows->Preferences->Digite “Drools” na pesquisa->Clicar em Instaled Drools Runtime
  • Há dois tipos de Runtime, o que vem no plugin e o que você pode baixar em um .zip separado. Vamos utilizar o que vem no .zip pois foi o que deu certo nos testes. 
  • (Baixar o .zip em: http://download.jboss.org/drools/release/5.5.0.Final/drools-distribution-5.5.0.Final.zip)
  • Clicar em Add e coloque um nome (“Drools5.5.0Final-bin”), clique em browse e aponte para a pasta “binaries” do zip que foi descompactado. 

Rodando um exemplo que vem junto do .zip
  • Importar no Eclipse: selecione como Projeto já existente e coloque “examples/sources/” como diretório raiz. Clique para copiar o projeto para o Workspace e clique em Finish
  • Abrir o menu Run, ir em Run Configurations, e adicione uma nova aplicação Java. Este “run” terá como classe principal “org.drools.examples.DroolsExamplesApp". Adicione argumentos para a VM: “-Xms256m -Xmx512m -server” e clique em Feche sem rodar AINDA. 
  • Abrir as propriedades do projeto e dirija-se ao Java Build Path. Exclua os dois “sources” inexistentes que se referem a alguma pasta “test”. 
  • Vá na aba Drools e veja se o runtime está definido corretamente. A opção correta aponta para a pasta “binaries” que veio do .zip baixado. 
  • Após estes passos os exemplos podem ser executados. Tente executar o Sudoku, carregar samples nos menus da janela do jogo e interagir com a janela. 

Criando um primeiro projeto simples
  • Antes de tudo, abra a perspectiva 'Drools'. Pode ser feito em Windows>Open Perspective>Drools . 
  • New > Other > Drools Project e coloque um nome para o seu projeto. 
  • Se perguntado para criar arquivos de exemplo, regras e etc, não aceite desmarcando as caixas. 
  • Ative a caixa 'Use Default Drools Runtime', geralmente já está ativado. Clique em Finish

Agora vamos criar uma classe simples em Java, chamaremos de RuleRunner. Na hora da criação crie um pacote para ela, algo como br.edu.ifpb.aleciano.drools, clicar em Finish.
Insira o seguinte código na classe: 

package br.edu.ifpb.aleciano.drools;

import java.io.File;
import java.io.InputStreamReader;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class RuleRunner {
public static void main(String[] args) throws Exception {
try {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase
.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
.newFileLogger(ksession, "test");

ksession.fireAllRules();
logger.close();

} catch (Throwable t) {
t.printStackTrace();
}
}

private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("rule01.drl"),
ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
}

Agora vamos criar uma regra simples para rodar o exemplo.
  • New > Other > Rule Resource e clique em Next
  • Dê o nome rule01 para a regra. (o nome do arquivo deve ser rule01.drl
  • Na lista do tipo de regra selecione como New Rule (individual rule) - nova regra individual. 
  • Escolha um pacote para regra, use a mesma conveção da classe RuleRunner criada, coloque algo como br.edu.ifpb.aleciano.drools.rules. Clique em Finish
Use o seguinte código para a regra:
package br.edu.ifpb.aleciano.drools.rules

rule "Rule 01"
when
eval (1==1)
then
System.out.println("Rule 01 works.");
end


A partir daqui já é possível rodar o exemplo. Se estiver na perspectiva 'Drools', clique na bolinha verde com seta branca na barra de ferramentas para executar o arquivo. Se perguntado qual a 'main class', sete a classe RuleRunner.java. A execução não é diferente de escrever um código Java normal e dar Play.


Podem aparecer mensagens de 'erro' iniciadas por SLF4J indicando a falta de alguma classe padrão, mas o próprio Drools tem um ação para esta situação, o projeto irá executar sem problemas.
O console ficará da seguinte forma:


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Rule 01 works.

Estudando as regras de sintaxe do Drools é possível escrever regras mais complexas, criar relações entre várias e outras funcionalidades providas pelo Drools Rules.

Tendo dúvidas, escreva para aleciano@ieee.org ou comente neste post. Obrigado!

0 comentários: