Exemplo de Projeto Vamos criar agora um projeto exemplo para verificar as condições de crédito de um conjunto de indivíduos; Nosso primeiro conjunto de regras será bastante simples: Pessoas acima de 18 anos tem crédito e pessoas abaixo de 18 anos não tem crédito. Projeto: Avaliação de Crédito 1) Criar um novo Rule Project; 2) Clicar no botão Next; Projeto: Avaliação de Crédito 3) Selecionar as 4 primeiras opções, para que um código esqueleto seja gerado automaticamente; Se você quiser testar se o Drools está funcionando, executar os arquivos: DroolsTest: teste do Drools; DecisionTableTest: teste da geração de regras a partir de tabelas de decisão (arquivo Sample.xls). Projeto: Avaliação de Crédito 4) Vamos criar do zero um novo arquivo de regrar; 5) Criar um novo pacote com o nome com.credito para armazenar seu código; Projeto: Avaliação de Crédito 6) Criar a classe Pessoa que representa a pessoa que pode ou não receber crédito; Projeto: Avaliação de Crédito 7) Criar os campos da pessoa: nome, idade, sexo, comidaPredileta, dataCarteira: package com.credito; import java.util.Date; public class Pessoa { private String nome; private int idade; private char sexo; private String comidaPredileta; private Date dataCarteira; } Projeto: Avaliação de Crédito 8) Gerar o construtor usando o menu Source > Generate Constructor Using Fields. Projeto: Avaliação de Crédito 9) Você vai ter um construtor semelhante a este: public Pessoa(String nome, int idade, char sexo, String comidaPredileta, Date dataCarteira) { super(); this.nome = nome; this.idade = idade; this.sexo = sexo; this.comidaPredileta = comidaPredileta; this.dataCarteira = dataCarteira; } Projeto: Avaliação de Crédito 10) Gerar os getters para cada campo. Não é necessária a geração dos setters, por enquanto. Projeto: Avaliação de Crédito 11) Criar uma classe agora para armazenar tipos de comidas: package com.credito; public class Comida { private String nome; private int calorias; public Comida(String nome, int calorias) { super(); this.nome = nome; this.calorias = calorias; } public String getNome() { return nome; } public int getCalorias() { return calorias; } } Projeto: Avaliação de Crédito 12) Vamos criar agora as regras. Criar um novo pacote de regras dentro do pacote com.credito dentro da pasta credito/src/rules; Projeto: Avaliação de Crédito 13) Criar duas regras simples: package com.credito import com.credito.Pessoa; import com.credito.Comida; rule "Permite Crédito" when $p : Pessoa(idade >= 18) then System.out.println("Crédito Permitido para: " + $p.getNome() ); end # continua... Projeto: Avaliação de Crédito rule "Crédito Negado" when Pessoa( $nome : nome, idade < 18) then System.out.println("Crédito Negado para: " + $nome); end Projeto: Avaliação de Crédito 14) Observar que: Tem autocompletar via CTRL + <espaço>; Os problemas são indicados na aba Problems; SALVE SEMPRE! Projeto: Avaliação de Crédito 15) Crie uma nova classe CreditoExemplo dentro do pacote com.credito. Coloque método main nesta classe. Projeto: Avaliação de Crédito 16) Colocar os Imports necessários: import java.io.IOException; import java.io.InputStreamReader; import org.drools.RuleBase; import org.drools.RuleBaseFactory; import org.drools.WorkingMemory; import org.drools.compiler.DroolsParserException; import org.drools.compiler.PackageBuilder; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; ... Projeto: Avaliação de Crédito 17) Carregar um pacotes de regras: PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl(new InputStreamReader(CreditoExemplo.class .getResourceAsStream("/credito.drl"))); Projeto: Avaliação de Crédito 18) Criar uma nova base de regras a partir do pacote e carregar as regras dentro da memória de trabalho: RuleBase ruleBase = RuleBaseFactory.newRuleBase(); ruleBase.addPackage(builder.getPackage()); WorkingMemory workingMemory = ruleBase.newStatefulSession(); Projeto: Avaliação de Crédito 19) Colocar os fatos na memória de trabalho e disparar as regras: Pessoa alberto = new Pessoa("Alberto", 23, 'M', "Banana", formataData("12/03/2001")); Pessoa bernardo = new Pessoa("Bernardo", 17, 'M', "Maça", formataData("15/12/2000")); //... workingMemory.insert(alberto); workingMemory.insert(bernardo); workingMemory.fireAllRules(); Projeto: Avaliação de Crédito 20) Observar a resposta obtida: Crédito Negado para: Bernardo Crédito Permitido para: Alberto Projeto: Avaliação de Crédito Mais exemplos de regras rule "Comida muito calórica" when $p: Pessoa ($gostaDe: comidaPredileta) $c: Comida ( nome == $gostaDe, calorias >= 500) then System.out.println("Pense Bem! " + $p.getNome() + " come comidas muito gordurosas!"); retract($p); end Projeto: Avaliação de Crédito Mais exemplos de regras rule "Idade suspeita" when $p: Pessoa( idade > 99) then System.out.println(“Ei, “+$p.getNome()+” está mentindo a idade!"); $p.setIdade(0); update($p); end