business rules com drools
DESCRIPTION
The Developer's Conference 2011 São Paulo, 08/07/2011 e Goiânia, 30/10/2011TRANSCRIPT
Business Rulescom Drools
Rafael LiuJBoss Consultant
Agenda
Intro drools Demo
Demo Drools Expert
Drools Expert Drools Guvnor
Drools Guvnor Mais demo!
Mais demo! Perguntas?
JBoss Drools
Images copyright http://www.drools.com
● Business Logic Integration Platform (BLiP)
● Open Souce!!
JBoss Drools
Images copyright http://www.drools.com
● Business Logic Integration Platform (BLiP)
● Open Souce!!
Planer
JBoss Drools
Images copyright http://www.drools.com
● Business Logic Integration Platform (BLiP)
● Open Souce!!
Fusion
JBoss Drools
Images copyright http://www.drools.com
● Business Logic Integration Platform (BLiP)
● Open Souce!!
Flow/jBPM
JBoss Drools
Images copyright http://www.drools.com
● Business Logic Integration Platform (BLiP)
● Open Souce!!
Expert
JBoss Drools
Images copyright http://www.drools.com
Guvnor
● Business Logic Integration Platform (BLiP)
● Open Souce!!
Images copyright http://www.drools.com
Business Rule Engines
● Por que / quando?● Desacoplamento● Linguagem própria● Otimizações
● Como?● Regras● Fatos● Inferência (Truth Maintenance)
Business Rule Engines
Drools Expert
● POJO● ReteOO● MVEL● JSR-94● Várias formas de definir regras
● Drools Rule Language● Domain Specific Language Rules● Decision Tables
Linguagem (DRL)
rule "<nome>"
[atributos]
when
[bloco]
then
<bloco>
end
Exemplo 1
rule "Duh"
when
then
System.out.println( "Hello World" );
end
Exemplo 2
rule "Blitz"
when
Motorista( idade < 18 )
then
System.out.println( "Crime!" );
end
Exemplo 3
rule "Blitz"
when
$m: Motorista( idade < 18 )
then
insert( new Notificacao( $m ) );
end
Exemplo 4
rule "Infracao"
when
$i1: Notificacao( $m : motorista )
$i2: Notificacao( this != $i1,
motorista == $m )
then
insert( new Infracao( $m ) );
end
Exemplo 5
rule "Crime"
when
$m : Motorista( )
Number ( intValue > 20 ) from accumulate (
$i : Infracao( motorista == $m ),
sum( $i.getPontos() ) )
then
$m.setHabilitado( false );
end
API
Stateful? Stateless?
λ StatefulKnowledgeSession
Stateful? Stateless?
λ StatelessKnowledgeSession
API
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
kb.add( ResourceFactory.newClassPathResource("my.drl"), ResourceType.DRL );
if ( kb.hasErrors() ) {
throw new RuntimeException( "Compilation error.\n" + kb.getErrors().toString() );
}
KnowledgeBase kbase = kb.newKnowledgeBase();
API
StatefulKnowledgeSession kession = kbase.newStatefulKnowledgeSession();
kession.insert( new Motorista(15, Estado.BEBADO) );
kession.insert( new Motorista(21, Estado.BEBADO) );
kession.insert( new Motorista(35, Estado.SOBRIO) );
kession.fireAllRules();
StatelessKnowledgeSession kession = kbase.newStatelessKnowledgeSession();
kession.execute( Arrays.asList(
new Motorista(15, Estado.BEBADO),
new Motorista(21, Estado.BEBADO),
new Motorista(35, Estado.SOBRIO) ));
ou então...
Images copyright http://www.drools.com
Business Rule Management System
● Definição (wikipedia):● Repositório● Tooling● Runtime
● Por que / quando?● Aproximação de SMEs● Gerenciamento de business rules● Ponto único de verdade (consistência)
Drools Guvnor
● Repositório● Authoring● Colaboração● Versionamento● Testes● Snapshots● Organização
The full picture
Ganhos● Declarativo, não imperativo
● Maior expressividade● Melhor visualização
● Separação da lógica do sistema● Maior interatividade● Dinamicidade
● Centralização● Administração
Obrigado!
Contato: @rafaelliu http://rafaelliu.net
Referência: http://jboss.org/drools http://blog.athico.com