SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Business Rules
com Drools




Rafael Liu
JBoss Consultant
Agenda
   Intro drools  Demo
        Demo  Drools Expert
 Drools Expert  Drools Guvnor
Drools Guvnor  Mais demo!
   Mais demo!  Perguntas?
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




●
    Open Souce!!



                                       Images copyright http://www.drools.com
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




                                             Planer

●
    Open Souce!!



                                       Images copyright http://www.drools.com
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




                               Fusion

●
    Open Souce!!



                                        Images copyright http://www.drools.com
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




                     Flow/jBPM

●
    Open Souce!!



                                       Images copyright http://www.drools.com
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




              Expert

●
    Open Souce!!



                                       Images copyright http://www.drools.com
JBoss Drools
●
    Business Logic Integration Platform (BLiP)




    Guvnor

●
    Open Souce!!



                                       Images copyright http://www.drools.com
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();
ou então...        kession.execute( Arrays.asList(
                     new Motorista(15, Estado.BEBADO),
                     new Motorista(21, Estado.BEBADO),
                     new Motorista(35, Estado.SOBRIO) ));
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:                 Referência:
  @rafaelliu               http://jboss.org/drools
  http://rafaelliu.net     http://blog.athico.com

Mais conteúdo relacionado

Semelhante a Business Rules com Drools

Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Lucas Aquiles
 
Nem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkNem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkRodrigo Matola
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Bruno Rossetto Machado
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Validando o layout de uma aplicação sem dor com BackstopJS
Validando o layout de uma aplicação sem dor com BackstopJSValidando o layout de uma aplicação sem dor com BackstopJS
Validando o layout de uma aplicação sem dor com BackstopJSCristiane Souza
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Grails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeGrails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeCleórbete Santos
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras
Maratona JBoss 2010 - Drools Expert : Programação Orientada a RegrasMaratona JBoss 2010 - Drools Expert : Programação Orientada a Regras
Maratona JBoss 2010 - Drools Expert : Programação Orientada a RegrasDextra
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 

Semelhante a Business Rules com Drools (20)

drools
droolsdrools
drools
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2
 
Nem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkNem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot Framework
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Validando o layout de uma aplicação sem dor com BackstopJS
Validando o layout de uma aplicação sem dor com BackstopJSValidando o layout de uma aplicação sem dor com BackstopJS
Validando o layout de uma aplicação sem dor com BackstopJS
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Grails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeGrails: O Java em Alta Produtividade
Grails: O Java em Alta Produtividade
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras
Maratona JBoss 2010 - Drools Expert : Programação Orientada a RegrasMaratona JBoss 2010 - Drools Expert : Programação Orientada a Regras
Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 

Business Rules com Drools

  • 1. Business Rules com Drools Rafael Liu JBoss Consultant
  • 2. Agenda Intro drools  Demo Demo  Drools Expert Drools Expert  Drools Guvnor Drools Guvnor  Mais demo! Mais demo!  Perguntas?
  • 3. JBoss Drools ● Business Logic Integration Platform (BLiP) ● Open Souce!! Images copyright http://www.drools.com
  • 4. JBoss Drools ● Business Logic Integration Platform (BLiP) Planer ● Open Souce!! Images copyright http://www.drools.com
  • 5. JBoss Drools ● Business Logic Integration Platform (BLiP) Fusion ● Open Souce!! Images copyright http://www.drools.com
  • 6. JBoss Drools ● Business Logic Integration Platform (BLiP) Flow/jBPM ● Open Souce!! Images copyright http://www.drools.com
  • 7. JBoss Drools ● Business Logic Integration Platform (BLiP) Expert ● Open Souce!! Images copyright http://www.drools.com
  • 8. JBoss Drools ● Business Logic Integration Platform (BLiP) Guvnor ● Open Souce!! Images copyright http://www.drools.com
  • 10. Business Rule Engines ● Por que / quando? ● Desacoplamento ● Linguagem própria ● Otimizações ● Como? ● Regras ● Fatos ● Inferência (Truth Maintenance)
  • 12. Drools Expert ● POJO ● ReteOO ● MVEL ● JSR-94 ● Várias formas de definir regras ● Drools Rule Language ● Domain Specific Language Rules ● Decision Tables
  • 14. Exemplo 1 rule "Duh" when then System.out.println( "Hello World" ); end
  • 15. Exemplo 2 rule "Blitz" when Motorista( idade < 18 ) then System.out.println( "Crime!" ); end
  • 16. Exemplo 3 rule "Blitz" when $m: Motorista( idade < 18 ) then insert( new Notificacao( $m ) ); end
  • 17. Exemplo 4 rule "Infracao" when $i1: Notificacao( $m : motorista ) $i2: Notificacao( this != $i1, motorista == $m ) then insert( new Infracao( $m ) ); end
  • 18. Exemplo 5 rule "Crime" when $m : Motorista( ) Number ( intValue > 20 ) from accumulate ( $i : Infracao( motorista == $m ), sum( $i.getPontos() ) ) then $m.setHabilitado( false ); end
  • 19. API
  • 20. Stateful? Stateless? λ StatefulKnowledgeSession
  • 21. Stateful? Stateless? λ StatelessKnowledgeSession
  • 22. 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();
  • 23. 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(); ou então... kession.execute( Arrays.asList( new Motorista(15, Estado.BEBADO), new Motorista(21, Estado.BEBADO), new Motorista(35, Estado.SOBRIO) ));
  • 25. 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)
  • 26. Drools Guvnor ● Repositório ● Authoring ● Colaboração ● Versionamento ● Testes ● Snapshots ● Organização
  • 28. Ganhos ● Declarativo, não imperativo ● Maior expressividade ● Melhor visualização ● Separação da lógica do sistema ● Maior interatividade ● Dinamicidade ● Centralização ● Administração
  • 29. Obrigado! Contato: Referência: @rafaelliu http://jboss.org/drools http://rafaelliu.net http://blog.athico.com