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

BRMS - Business Rules Management System

  • 1.
  • 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? • Regrade 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
  • 4.
  • 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
  • 6.
  • 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émobjetos 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 • Dolatin 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.
  • 15.
  • 16.
    EXEMPLO package org.co.orders import org.co.Customer; importorg.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 • Listade 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 deregras 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
  • 20.
  • 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 aum 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 • Executatodos 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.
  • 26.
  • 27.
  • 28.
    CHANGESET • Pode apontarpara um package ou um arquivo .drl externo
  • 29.
    SALIENCE • Valor positivoou 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