View
1.119
Download
1
Category
Tags:
Preview:
DESCRIPTION
The Developer's Conference 2011 São Paulo, 08/07/2011 e Goiânia, 30/10/2011
Citation preview
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
Recommended