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