Se você utiliza o drools e seu plugin para Eclipse, pode ter visto que na mais nova versão, para que você consiga usar DSLs, é preciso renomear o arquivo de regras para .dslr, desta forma você consegue atribuir um “expander” e trabalhar com sua linguagem natural. Como no exemplo:

package com.sample

expander pt_BR.dsl

import com.sample.DroolsTest.Message;
import com.sample.ChamadaTelefonica;
import com.sample.Tarifador;

rule “chamada local”
when
quando a chamada eh local
then
o valor do minuto eh 2.00
end

rule “chamada longa distancia”
when
quando a chamada eh longa distancia
then
o valor do minuto eh 4.00
end

O código acima processa um exemplo de um objeto que seria uma “Chamada Telefonica”, você pode estar se perguntando onde estão os comandos reais, a resposta é que está no pt_BR.dsl, veja o exemplo abaixo:

[condition][]quando a chamada eh local=c : ChamadaTelefonica( local==destino)
[condition][]quando a chamada eh longa distancia=c : ChamadaTelefonica( local!=destino)
[consequence][]o valor do minuto eh {valor}=c.setValor( Tarifador.minutesBetween(c.getInicio(), c.getFim())*{valor});

Por último, ao carregar meu arquivo de regras, eu também associo meu arquivos de DSL ao de regras:

Reader source = new InputStreamReader( DroolsTest.class.getResourceAsStream( “/Sample.dslr” ) );

Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( “/pt_BR.dsl” ) );

PackageBuilder builder = new PackageBuilder();

builder.addPackageFromDrl( source,dsl );

Pronto, agora podemos ter a liberdade de lidar com as regras da forma que bem entendermos. Maiores informações sobre o projeto Drools: http://www.jboss.org/drools. Claro, que deixo aqui o agradecimento ao meu amigo Tirelli (core-developer do drools), que sempre me tirar as dúvidas necessárias para montar nossos projetos.

E

Leave a Reply