SlideShare uma empresa Scribd logo
1 de 30
BRMS
BUSINESS RULES MANAGEMENT SYSTEM
DROOLS
• Drools Expert – RETE based rule engine


• Drools Guvnor – business rules manager


• Drools Flow – rule and process flow


• Drools Fusion - complex event processing (CEP)


• Drools integrated development environment – JBDS
  (Eclipse)
PORQUE BRMS?
• Regra de negócio desacoplada
• Sem impacto no código da aplicação
• Passível de versionamento
• Centralização do conhecimento
• Dinamismo na troca de regras
• Não gera indisponibilidade da aplicação
• Otimização e ordem da execução das regras
• Escalabilidade
DROOLS
DROOLS
O que é Drools?
• Uma linguagem declarativa para escrever regras que
  suportam expressões escritas em múltiplas linguagens.
   • Java, MVEL (MVFLEX Expression Language)
• Drools foca no “o que fazer” (declarativo) e não em “como
  fazer”(imperativo)
• Regras declarativas tomam a seguinte forma:
       when “condição” then “consequencia”
• Regras escritas no Drools são salvas em arquivos .drl
GUVNOR
DROOLS
O que é uma regra (rule)?
• Rules são escritas em linguagem
  Drools ou Domain Specific Language
Ações “IF/Then” são “When/Then” –
WHEN condição(ões) THEN ação(ões)
Uma rule tem um nome (único por
pacote), condição(ões), ação(ões)
Agrupamento de condições formam o
chamado LHS (left hand side)
Ações são referenciadas como RHS
(right hand side, ou consequencia)
FATOS = POJOS
                          public class Customer {
Fato é uma instância de      private Integer age;
um objeto da aplicação       private String status;
representado por um          public Integer getAge() {
POJO (Plain Old Java           return age;
                             }
Object)                      public void setAge(Integer age) {
Condicões LHS avaliam          this.age = age;
                             }
atributos POJO               public String getStatus() {
                               return status;
Devem ter métodos get e
                             }
set                          public void setStatus(String status)
                          {
                               this.status = status;
                             }
                          }
FATOS
•   Pode ter métodos executados pelo mecanismo de regras
•   Pode ser carregado a partir de banco de dados via
    Hibernate, JPA, e assim por diante e não são obrigados a
    usar a herança ou interfaces
JavaBeans (POJOs):
Dois tipos: estáticos e inferidos
•   Fatos estáticos são fornecidos ao motor
•   Fatos inferidos são calculados com base em fatos estáticos
> Fatos inferidos podem mudar ao longo do tempo
    • Exemplo: índice de massa corporal (IMC) exige peso, altura
    • Peso, altura, são estáticos (fornecido para o motor)
    • IMC é inferida (calculado com base em fatos estáticos)
MOTOR DE INFERÊNCIA
•   Cérebro do sistema de regras é o motor de inferência que
    combina fatos contra as regras
•   Quando é dado o “match”, as regras são colocadas na
    agenda
•   Motor que determina que regras elegíveis da agenda deve
    "disparar” (fire)
WORKING MEMORY
• Contém objetos influenciados por regras de negócios
• Baseado em estrutura de memória
• Permite o armazenamento temporário
• Suporta manipulação POJO
• Fatos inseridos na working memory podem ser
  modificados na working memory
• Objetos Stateful
   • Curta duração
   • Longa duração
ALGORITMO RETE
• Do latin para definir rede (network)
• Inventado pelo Dr. Charles L. Forgy
• Utilizado na maioria dos sistemas baseados em regras
• Pros
   • Eficiência do manuseio de um grande número de regras
   • Independente do número de regras no sistema
   • Ganho significante em cima de “if/then”
• Cons
   • Pode utilizar intensamente a memória
   • Principais problemas de performance são regras mal
     escritas.
RETE - FEATURES
• Modela as regras como
  uma rede de diferentes
  tipos nós
• Conforme os fatos são
  inseridos, são associados
  com nodes no grafo
   • Fatos encontram as
     rules
   • Cada node é uma
     coleção de fatos
     satisfazendo restrições
     modeladas pelo node
LHS
• LHS é uma série de elementos condicionais
• Pattern é zero ou mais restrições com ligação opcional
• Constraint é uma expressão que testa true ou false
• Cada constraint precisa ser verdadeira para ser disparada.
PATTERNS
EXEMPLO
package org.co.orders
import org.co.Customer;
import org.co.Order;
# provide discount for platinum customers
rule "Customer Platinum Status" when
Customer( status == “platinum” ) and (order :
Order( orderPriority == 3 ) or order :
Order(value >= 25000))
then
order.setOrderDiscount(8.5)
end
RHS ACTIONS
• Lista de ações a serem executadas
• Geralmente alterar o estado dos fatos
   • Inserir novos fatos
   • Atualizar um fato
   • Definir um valor para um atributo
• Boa prática é evitar códigos condicionais dentro do THEN
   • Não usar if-else, for-while ou qualquer outra lógica
DECISION TABLES
Planilha de regras criada em formato (.xls) ou criada em
formato .csv
Conteúdo das células combinado com template de dados
para gerar regras
Necessário quando:
• Compactar uma forma de visualizar muitas regras com
  patterns similares
• Separar fatos das regras
DOMAIN SPECIFIC
LANGUAGE - DSL
• Uma DSL é uma linguagem criada para solucionar um
  problema específico de domínio do negócio, de forma
  pontual.
• Cria um mapeamento entre modelo de domínio e modelo
  de regras do Drools.
• Utilizada geralmente quando o desenvolvimento das
  regras é feito por analistas de negócio.
• Criadas em arquivos .dsl
• Utilizadas nas regras em arquivos .drl
DSL - EXEMPLO
DSL INTERNA
criteriaFor(Person.class)
   .withProperty(sex()).eq(Gender.FEMALE).and()
   .withProperty(ssn().country()).eq(SWEDEN).and()
   .lbrace().withProperty(name().first()).like("A%")
       .or().withProperty(name().last()).like("A%").rbrace()
   .orderBy(name().last())
   .build();



Vantagem?
TESTES
• Equivalente a um teste unitário JUnit
• É criado pela interface gráfica
• Não é necessário codificar
• Similar a criar regra no editor
• Garantia de QA
• Integração
TESTES
• Define-se LHS (Given)
   • Insere o fato
   • Define o valor os atributos
• Define-se RHS (Expectation)
   • Define quais regras serão lançadas
   • Espera valores de retorno
   • Controle de data
• Similar ao JUnit
   • Barra verde – Teste OK
   • Barra vermelha – Teste Falhou
QA VIEW
• Executa todos os testes do pacote selecionado
   • Mostra todos os testes, estados e regras executadas

• Ferramenta para avaliar inconsistências e erros


• Bateria de testes pode ser executada remotamente
   • Possível também coletar resultados


• URL disponivel no build do package
FLUXO
API
KNOWLEDGE AGENT
CHANGESET
• Pode apontar para um package ou um arquivo .drl externo
SALIENCE
• Valor positivo ou negativo, inteiro que define a
  importância da regra.
• Valor mais alto significa maior prioridade.
• Default é 0
OBRIGADO!




            Samuel Tauil
            @samueltauil
            samueltauil@gmail.com

Mais conteúdo relacionado

Mais procurados

Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012Frederico Maia Arantes
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Proceduresalexdutra
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureFernando Roberto Proença
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7David Willian
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersDaniel Maia
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6Wagner Bianchi
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 

Mais procurados (20)

Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Testes de Integração
Testes de IntegraçãoTestes de Integração
Testes de Integração
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Como criar Custom Tags
Como criar Custom TagsComo criar Custom Tags
Como criar Custom Tags
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Procedures
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored Procedure
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7
 
Tag Libraries
Tag LibrariesTag Libraries
Tag Libraries
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 

Destaque

Red Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - DroolsRed Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - DroolsRafael Benevides
 
4 Forum SOA - Edgar Silva (Red Hat)
4 Forum SOA - Edgar Silva (Red Hat)4 Forum SOA - Edgar Silva (Red Hat)
4 Forum SOA - Edgar Silva (Red Hat)Edgar Silva
 
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
 
BRMS - Gestão de Regras - Introdução - Andre Venancio
BRMS -  Gestão de Regras - Introdução - Andre VenancioBRMS -  Gestão de Regras - Introdução - Andre Venancio
BRMS - Gestão de Regras - Introdução - Andre VenancioAndré Venâncio
 
Palestra EDTED: Análise de Negócios e Scrum
Palestra EDTED: Análise de Negócios e ScrumPalestra EDTED: Análise de Negócios e Scrum
Palestra EDTED: Análise de Negócios e ScrumGuilherme Tossulino
 
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...Rafael Barbosa Camargo
 
Drools and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 OverviewMark Proctor
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Mark Proctor
 
Ideation in service design. Ideation methods and tools
Ideation in service design. Ideation methods and toolsIdeation in service design. Ideation methods and tools
Ideation in service design. Ideation methods and toolsKatarzyna Młynarczyk
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Rildo (@rildosan) Santos
 
Experiência do usuário e emergência
Experiência do usuário e emergênciaExperiência do usuário e emergência
Experiência do usuário e emergênciaUTFPR
 
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios InovadoresJoão Paulo Nogueira
 

Destaque (17)

drools
droolsdrools
drools
 
Red Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - DroolsRed Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - Drools
 
4 Forum SOA - Edgar Silva (Red Hat)
4 Forum SOA - Edgar Silva (Red Hat)4 Forum SOA - Edgar Silva (Red Hat)
4 Forum SOA - Edgar Silva (Red Hat)
 
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
 
drools + robocode
drools + robocodedrools + robocode
drools + robocode
 
J Boss Drools
J Boss DroolsJ Boss Drools
J Boss Drools
 
BRMS - Gestão de Regras - Introdução - Andre Venancio
BRMS -  Gestão de Regras - Introdução - Andre VenancioBRMS -  Gestão de Regras - Introdução - Andre Venancio
BRMS - Gestão de Regras - Introdução - Andre Venancio
 
Palestra EDTED: Análise de Negócios e Scrum
Palestra EDTED: Análise de Negócios e ScrumPalestra EDTED: Análise de Negócios e Scrum
Palestra EDTED: Análise de Negócios e Scrum
 
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...
Pedaços de XP, FDD, Scrum e Kanban na Análise de Negócios e Engenharia de Req...
 
Drools and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 Overview
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)
 
Ideation in service design. Ideation methods and tools
Ideation in service design. Ideation methods and toolsIdeation in service design. Ideation methods and tools
Ideation in service design. Ideation methods and tools
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case
 
Análise de Negócio na Perspectiva de BI
Análise de Negócio na Perspectiva de BIAnálise de Negócio na Perspectiva de BI
Análise de Negócio na Perspectiva de BI
 
Resumo do Guia BABOK® 3
Resumo do Guia BABOK®  3 Resumo do Guia BABOK®  3
Resumo do Guia BABOK® 3
 
Experiência do usuário e emergência
Experiência do usuário e emergênciaExperiência do usuário e emergência
Experiência do usuário e emergência
 
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
 

Semelhante a BRMS - Business Rules Management System

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
J Boss Rules Mgjug V2
J Boss Rules Mgjug V2J Boss Rules Mgjug V2
J Boss Rules Mgjug V2Breno Barros
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMCAlisson Agiani
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Daniel Sobral
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfJ0071
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execução
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execuçãoTreinamento: como usar o JMeter, interpretar resultados e otimizar a execução
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execuçãoBeatriz Makiyama Celestino
 
Testes de Performance com JMeter
Testes de Performance com JMeterTestes de Performance com JMeter
Testes de Performance com JMeterEdlaine Zamora
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 

Semelhante a BRMS - Business Rules Management System (20)

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
J Boss Rules Mgjug V2
J Boss Rules Mgjug V2J Boss Rules Mgjug V2
J Boss Rules Mgjug V2
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Jboss Night
Jboss NightJboss Night
Jboss Night
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Power mock
Power mockPower mock
Power mock
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Grails
GrailsGrails
Grails
 
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execução
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execuçãoTreinamento: como usar o JMeter, interpretar resultados e otimizar a execução
Treinamento: como usar o JMeter, interpretar resultados e otimizar a execução
 
Testes de Performance com JMeter
Testes de Performance com JMeterTestes de Performance com JMeter
Testes de Performance com JMeter
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 

BRMS - Business Rules Management System

  • 2. DROOLS • Drools Expert – RETE based rule engine • Drools Guvnor – business rules manager • Drools Flow – rule and process flow • Drools Fusion - complex event processing (CEP) • Drools integrated development environment – JBDS (Eclipse)
  • 3. PORQUE BRMS? • Regra de negócio desacoplada • Sem impacto no código da aplicação • Passível de versionamento • Centralização do conhecimento • Dinamismo na troca de regras • Não gera indisponibilidade da aplicação • Otimização e ordem da execução das regras • Escalabilidade
  • 5. DROOLS O que é Drools? • Uma linguagem declarativa para escrever regras que suportam expressões escritas em múltiplas linguagens. • Java, MVEL (MVFLEX Expression Language) • Drools foca no “o que fazer” (declarativo) e não em “como fazer”(imperativo) • Regras declarativas tomam a seguinte forma: when “condição” then “consequencia” • Regras escritas no Drools são salvas em arquivos .drl
  • 7. DROOLS O que é uma regra (rule)? • Rules são escritas em linguagem Drools ou Domain Specific Language Ações “IF/Then” são “When/Then” – WHEN condição(ões) THEN ação(ões) Uma rule tem um nome (único por pacote), condição(ões), ação(ões) Agrupamento de condições formam o chamado LHS (left hand side) Ações são referenciadas como RHS (right hand side, ou consequencia)
  • 8. FATOS = POJOS public class Customer { Fato é uma instância de private Integer age; um objeto da aplicação private String status; representado por um public Integer getAge() { POJO (Plain Old Java return age; } Object) public void setAge(Integer age) { Condicões LHS avaliam this.age = age; } atributos POJO public String getStatus() { return status; Devem ter métodos get e } set public void setStatus(String status) { this.status = status; } }
  • 9. FATOS • Pode ter métodos executados pelo mecanismo de regras • Pode ser carregado a partir de banco de dados via Hibernate, JPA, e assim por diante e não são obrigados a usar a herança ou interfaces JavaBeans (POJOs): Dois tipos: estáticos e inferidos • Fatos estáticos são fornecidos ao motor • Fatos inferidos são calculados com base em fatos estáticos > Fatos inferidos podem mudar ao longo do tempo • Exemplo: índice de massa corporal (IMC) exige peso, altura • Peso, altura, são estáticos (fornecido para o motor) • IMC é inferida (calculado com base em fatos estáticos)
  • 10. MOTOR DE INFERÊNCIA • Cérebro do sistema de regras é o motor de inferência que combina fatos contra as regras • Quando é dado o “match”, as regras são colocadas na agenda • Motor que determina que regras elegíveis da agenda deve "disparar” (fire)
  • 11. WORKING MEMORY • Contém objetos influenciados por regras de negócios • Baseado em estrutura de memória • Permite o armazenamento temporário • Suporta manipulação POJO • Fatos inseridos na working memory podem ser modificados na working memory • Objetos Stateful • Curta duração • Longa duração
  • 12. ALGORITMO RETE • Do latin para definir rede (network) • Inventado pelo Dr. Charles L. Forgy • Utilizado na maioria dos sistemas baseados em regras • Pros • Eficiência do manuseio de um grande número de regras • Independente do número de regras no sistema • Ganho significante em cima de “if/then” • Cons • Pode utilizar intensamente a memória • Principais problemas de performance são regras mal escritas.
  • 13. RETE - FEATURES • Modela as regras como uma rede de diferentes tipos nós • Conforme os fatos são inseridos, são associados com nodes no grafo • Fatos encontram as rules • Cada node é uma coleção de fatos satisfazendo restrições modeladas pelo node
  • 14. LHS • LHS é uma série de elementos condicionais • Pattern é zero ou mais restrições com ligação opcional • Constraint é uma expressão que testa true ou false • Cada constraint precisa ser verdadeira para ser disparada.
  • 16. EXEMPLO package org.co.orders import org.co.Customer; import org.co.Order; # provide discount for platinum customers rule "Customer Platinum Status" when Customer( status == “platinum” ) and (order : Order( orderPriority == 3 ) or order : Order(value >= 25000)) then order.setOrderDiscount(8.5) end
  • 17. RHS ACTIONS • Lista de ações a serem executadas • Geralmente alterar o estado dos fatos • Inserir novos fatos • Atualizar um fato • Definir um valor para um atributo • Boa prática é evitar códigos condicionais dentro do THEN • Não usar if-else, for-while ou qualquer outra lógica
  • 18. DECISION TABLES Planilha de regras criada em formato (.xls) ou criada em formato .csv Conteúdo das células combinado com template de dados para gerar regras Necessário quando: • Compactar uma forma de visualizar muitas regras com patterns similares • Separar fatos das regras
  • 19. DOMAIN SPECIFIC LANGUAGE - DSL • Uma DSL é uma linguagem criada para solucionar um problema específico de domínio do negócio, de forma pontual. • Cria um mapeamento entre modelo de domínio e modelo de regras do Drools. • Utilizada geralmente quando o desenvolvimento das regras é feito por analistas de negócio. • Criadas em arquivos .dsl • Utilizadas nas regras em arquivos .drl
  • 21. DSL INTERNA criteriaFor(Person.class) .withProperty(sex()).eq(Gender.FEMALE).and() .withProperty(ssn().country()).eq(SWEDEN).and() .lbrace().withProperty(name().first()).like("A%") .or().withProperty(name().last()).like("A%").rbrace() .orderBy(name().last()) .build(); Vantagem?
  • 22. TESTES • Equivalente a um teste unitário JUnit • É criado pela interface gráfica • Não é necessário codificar • Similar a criar regra no editor • Garantia de QA • Integração
  • 23. TESTES • Define-se LHS (Given) • Insere o fato • Define o valor os atributos • Define-se RHS (Expectation) • Define quais regras serão lançadas • Espera valores de retorno • Controle de data • Similar ao JUnit • Barra verde – Teste OK • Barra vermelha – Teste Falhou
  • 24. QA VIEW • Executa todos os testes do pacote selecionado • Mostra todos os testes, estados e regras executadas • Ferramenta para avaliar inconsistências e erros • Bateria de testes pode ser executada remotamente • Possível também coletar resultados • URL disponivel no build do package
  • 25. FLUXO
  • 26. API
  • 28. CHANGESET • Pode apontar para um package ou um arquivo .drl externo
  • 29. SALIENCE • Valor positivo ou negativo, inteiro que define a importância da regra. • Valor mais alto significa maior prioridade. • Default é 0
  • 30. OBRIGADO! Samuel Tauil @samueltauil samueltauil@gmail.com