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