Geração de DSLs
Vamos criar agora um projeto exemplo
que trabalhe não mais com a linguagem
DRL, mas sim com DSL (Domain Specific
Languages – Linguagens Específicas de
Domínio;
No Drools, você pode misturar regras
escritas em DRL com regras na DSL.
Criação de uma nova DSL para o Projeto
Crédito
1) Criar uma nova base de regras, com o
nome creditodsl;
Criação de uma nova DSL para o Projeto
Crédito
 2) Selecione a opção
de utilizar uma DSL,
desta vez, a extensão
do arquivo será
DSLR;
Criação de uma nova DSL para o Projeto
Crédito
 3) Selecionar a pasta de regras e crie um
outro recurso;
Criação de uma nova DSL para o Projeto
Crédito
 4) No item Drools, selecionar Domain Specific
Language;
Criação de uma nova DSL para o Projeto
Crédito
 5) Criar um arquivo
chamado credito.dsl;
 6) Este arquivo será
responsável por fazer
a conversão do
formato DSL para o
formato da DRL.
Criação de uma nova DSL para o Projeto
Crédito
 7) Observar que o arquivo criado contém uma
série de entradas padrão que exemplificam o
sistema de templates;
Criação de uma nova DSL para o Projeto
Crédito
8) Criar as seguintes associações:
Decisão: {message} corresponde a
System.out.println({message}) e está no escopo
de conseqüência;
O cliente tem pelo menos {idade} anos
corresponde a $p : Pessoa(idade >= {idade}) e
está no escopo da condição;
O cliente é mais novo que {idade} anos
corresponde a Pessoa( $nome : nome, idade <
{idade})
Criação de uma nova DSL para o Projeto
Crédito
Criação de uma nova DSL para o Projeto
Crédito
Criação de uma nova DSL para o Projeto
Crédito
Criação de uma nova DSL para o Projeto
Crédito
 9) Colocar a palavra
chave expander
dentro do arquivo
DRL. Ela fará a
associação entre a
DRL e a DSL;
Criação de uma nova DSL para o Projeto
Crédito
 10) Se preferir, pode continuar usando a DRL, marcando as linhas
com >;
 rule "Permite Crédito"
 when
 O cliente tem pelo menos 18 anos
 then
 Decisão: "Crédito Permitido para: " + $p.getNome()
 end
 rule "Crédito Negado"
 when
 O cliente é mais novo que 18 anos
 then
 >System.out.println("Crédito Negado para: " + $nome);
 end
Criação de uma nova DSL para o Projeto
Crédito
11) Colocar no arquivo que contém o
método main, o código abaixo:
builder.addPackageFromDrl(new
InputStreamReader(CreditoExemplo.class
.getResourceAsStream("/creditodsl.dslr")),
new
InputStreamReader(CreditoExemplo.class
.getResourceAsStream("/credito.dsl")));
Criação de uma nova DSL para o Projeto
Crédito
12) Você pode alterar, também, as
palavras chave:
Se => when;
Então => then
Download

Passo a passo - Bruno Campagnolo de Paula