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
Download

Passo a passo - Bruno Campagnolo de Paula