Business Rules com Drools

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