JBoss Rules Breno Barros Arquiteto de Software [email_address]
Sumário <ul><li>Evolução Arquitetural </li></ul><ul><li>O que são Business Rules? </li></ul><ul><li>Porque usar Rules Engi...
Evolução Arquitetural
O que são Business Rules? <ul><li>São instruções ou restrições de algum aspecto de negócio </li></ul><ul><li>Em outras pal...
Porque usar Rules Engine? <ul><li>Separar as regras de negócios da aplicação, permitindo que não-desenvolvedores possam ma...
Porque usar Rules Engine? (Cont.) <ul><li>Reduzir o tempo de desenvolvimento, além de reduzir custo e tempo de manutenção....
Cenários de Aplicação <ul><li>Use Rules Engine: </li></ul><ul><ul><li>Suas regras de negócios são complexas. </li></ul></u...
Sistemas de Produção e Algoritmo RETE Introdução
Sistemas de Produção <ul><li>São sistemas baseados em regras, compostos pelos seguintes componentes: </li></ul><ul><ul><li...
Sistemas de Produção Production Memory (rules) Working Memory (facts) Inference Engine Pattern Matcher Agenda Codificação ...
Regras de Produção <ul><li>Representam conhecimento com pares de  condição-ação </li></ul><ul><ul><li>Se   condição  (ou  ...
Funcionamento dos Sistemas de Produção <ul><li>Três fases:  casamento, resolução de conflitos e execução. </li></ul><ul><l...
Exemplo: Algoritmo Rete <ul><li>Base de Regras: Memória de Trabalho: </li></ul><ul><li>A(x) ^ B(x) ^ C(y) => add D(x) {A(1...
Funcionamento dos Sistemas de Produção <ul><li>Resolução de Conflitos </li></ul><ul><ul><li>O sistema decide quais as regr...
JBoss Rules Visão Geral
JBoss Rules – Visão Geral <ul><li>Consiste em uma ferramenta open-source e standards-based business rules engine que facil...
JBoss Rules – Visão Geral <ul><li>É normalmente usado em aplicações: </li></ul><ul><ul><li>Segurança de Redes </li></ul></...
JBoss Rules
JBoss Rules Workbench
Rules + JBPM
Rule Language <ul><li>É escrita num arquivo .drl </li></ul><ul><li>Pode ser escrita em XML (não recomendável) </li></ul><u...
Rules Language <ul><li>Atributos </li></ul><ul><ul><li>No-loop: Quando a uma regra é modificada, pode causar uma nova ativ...
Rule Language <ul><li>Palavras reservadas </li></ul><ul><ul><li>When, then, rule, end, contains, matches, and, or, modify,...
Rule Language <ul><li>Funções </li></ul><ul><li>Exemplos </li></ul><ul><ul><li>not Contrato( plano == “PAGUE_MAIS”) </li><...
JBoss Rules Componentes Básicos
Componente: Working Memory <ul><li>É a principal classe para utilização da Rule Engine em runtime. </li></ul><ul><li>É sta...
Componente: Agenda <ul><li>É uma característica do Algoritmo RETE.  </li></ul><ul><li>Durante a execução do Working Memory...
JBoss Rules Domain Specific Language (DSL)
Domain Specific Language (DSL) <ul><li>Consiste em uma técnica utilizada para trazer os conceitos de um determinado domíni...
Domain Specific Language (DSL) <ul><li>Extende o JBoss Rules, agindo com “templates” de condicionais e ações </li></ul><ul...
JRE API (JSR 94) <ul><li>Java™ Rule Engine API </li></ul><ul><li>Definidas no pacote javax.rules e javax.rules.admin </li>...
JRE API (JSR 94) - Exemplo <ul><li>Class.forName(&quot;org.drools.jsr94.rules.RuleServiceProviderImpl&quot;); </li></ul><u...
JRE API (JSR 94) - Exemplo <ul><li>Dollar inputDollar1 = new Dollar(new Date(1,1,2005)); </li></ul><ul><li>inputIDollar1.s...
Sugestão de Metodologia para Identificação das Regras de Negócios  <ul><li>Passos: </li></ul><ul><ul><li>Durante a fase de...
Rule Builder/Editor (Ferramenta para desenvolvimento e depuração de rules) Rule Deployment and  Configuration (Ferramentas...
Vamos à prática Demonstração
Dúvidas? Sugestões? Comentários? Muito Obrigado Breno Barros
Próximos SlideShares
Carregando em…5
×

J Boss Rules Mgjug V2

1.211 visualizações

Publicada em

Publicada em: Tecnologia, Diversão e humor
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.211
No SlideShare
0
A partir de incorporações
0
Número de incorporações
289
Ações
Compartilhamentos
0
Downloads
20
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • J Boss Rules Mgjug V2

    1. 1. JBoss Rules Breno Barros Arquiteto de Software [email_address]
    2. 2. Sumário <ul><li>Evolução Arquitetural </li></ul><ul><li>O que são Business Rules? </li></ul><ul><li>Porque usar Rules Engine? </li></ul><ul><li>Cenários de Aplicação </li></ul><ul><li>Sistemas de Produção e Algoritmo RETE </li></ul><ul><li>JBoss Rules – Visão Geral </li></ul><ul><li>JBoss Rules – Rule Language </li></ul><ul><li>JBoss Rules - Componentes Básicos </li></ul><ul><li>JBoss Rules – Domain Specific Language (DSL) </li></ul><ul><li>JRE API (JSR 94) </li></ul><ul><li>Sugestão de Metodologia para Identificação das Regras de Negócios </li></ul><ul><li>Vamos à prática </li></ul>
    3. 3. Evolução Arquitetural
    4. 4. O que são Business Rules? <ul><li>São instruções ou restrições de algum aspecto de negócio </li></ul><ul><li>Em outras palavras, é uma forma de expressão implementável de um dado requisito do usuário final </li></ul><ul><li>Em Java, seguem a especificação Java Rule Engine API (JSR-94) </li></ul>
    5. 5. Porque usar Rules Engine? <ul><li>Separar as regras de negócios da aplicação, permitindo que não-desenvolvedores possam mantê-las sem modificar o código fonte. </li></ul><ul><li>Prover flexibilidade e redução do time-to-market </li></ul><ul><li>Prover tomadas de decisão consistentes </li></ul><ul><li>Prover visibilidade e entendimento das políticas de negócios e procedimentos </li></ul>
    6. 6. Porque usar Rules Engine? (Cont.) <ul><li>Reduzir o tempo de desenvolvimento, além de reduzir custo e tempo de manutenção. (Estudos mostram que 15 a 50% de tempo e custo são gastos no implementação e teste de mudanças em regras de negócio) </li></ul>
    7. 7. Cenários de Aplicação <ul><li>Use Rules Engine: </li></ul><ul><ul><li>Suas regras de negócios são complexas. </li></ul></ul><ul><ul><li>Suas regras de negócios mudam com muita freqüência. </li></ul></ul><ul><ul><li>Suas regras de negócios envolvem importantes decisões de mercado. </li></ul></ul><ul><ul><li>Suas regras de negócios necessitem serem compartilhadas entre diversas aplicações. </li></ul></ul><ul><li>Não use Rules Engine: </li></ul><ul><ul><li>Suas regras de negócios são simples. </li></ul></ul><ul><ul><li>Suas regras de negócios são estáticas. </li></ul></ul><ul><ul><li>O desempenho e melhores taxas de transferência de dados são mais importantes que a flexibilidade e custo de manutenção. </li></ul></ul>
    8. 8. Sistemas de Produção e Algoritmo RETE Introdução
    9. 9. Sistemas de Produção <ul><li>São sistemas baseados em regras, compostos pelos seguintes componentes: </li></ul><ul><ul><li>Memória de Trabalho de um sistema consiste em uma coleção de assertivas verdadeiras. </li></ul></ul><ul><ul><li>Base de Regras é o conjunto de sentenças (regras de inferência) que determinam as ações que devem ser tomadas de acordo com as percepções. </li></ul></ul><ul><ul><li>Motor de Inferência é a parte do sistema que determina o método de raciocínio, utiliza estratégias de busca e resolve conflitos. </li></ul></ul>
    10. 10. Sistemas de Produção Production Memory (rules) Working Memory (facts) Inference Engine Pattern Matcher Agenda Codificação do Conhecimento de Negócio Pesquisa em memória, os objetos Java que Serão avaliados
    11. 11. Regras de Produção <ul><li>Representam conhecimento com pares de condição-ação </li></ul><ul><ul><li>Se condição (ou premissa ou antecedente ) ocorre </li></ul></ul><ul><ul><li>então ação ( resultado , conclusão ou conseqüente ) deverá ocorrer. </li></ul></ul><ul><ul><ul><li>Se o agente percebe luz do freio do carro em frente acesa então ele deve frear o carro (regra de ação) </li></ul></ul></ul><ul><ul><ul><li>Se veículo tem 4 rodas e tem um motor </li></ul></ul></ul><ul><ul><ul><li>então veículo é um automóvel (novo conhecimento) </li></ul></ul></ul><ul><li>São chamadas de regras de produção porque, quando utilizadas com raciocínio progressivo , produzem novos fatos a partir dos fatos e regras iniciais. </li></ul>
    12. 12. Funcionamento dos Sistemas de Produção <ul><li>Três fases: casamento, resolução de conflitos e execução. </li></ul><ul><li>Casamento </li></ul><ul><ul><li>O sistema, em cada ciclo, computa o subconjunto de regras cuja esquerda é satisfeita pelos conteúdos atuais da memória de trabalho. </li></ul></ul><ul><ul><li>A forma mais simples de realizar unificação é ineficiente, então como solução temos o Algoritmo Rete (rede). </li></ul></ul><ul><ul><li>Vantagens do Algoritmo Rete: </li></ul></ul><ul><ul><ul><li>Elimina duplicações entre regras; </li></ul></ul></ul><ul><ul><ul><li>Elimina duplicações ao longo do tempo. </li></ul></ul></ul>
    13. 13. Exemplo: Algoritmo Rete <ul><li>Base de Regras: Memória de Trabalho: </li></ul><ul><li>A(x) ^ B(x) ^ C(y) => add D(x) {A(1),A(2),B(2),B(3),B(4),C(5)} </li></ul><ul><li>A(x) ^ B(y) ^ D(x) => add E(x) </li></ul><ul><li>A(x) ^ B(x) ^ E(x) => delete A(x) </li></ul>A B A=B D C E add E add D delete A A(1), A(2) B(2), B(3), B(4) A(2) B(2) C(5) A=D
    14. 14. Funcionamento dos Sistemas de Produção <ul><li>Resolução de Conflitos </li></ul><ul><ul><li>O sistema decide quais as regras que devem ser executadas. </li></ul></ul><ul><ul><li>Nesta fase podemos utilizar algumas estratégias de controle: </li></ul></ul><ul><ul><ul><li>Não Duplicação: não executar a mesma regra nos mesmos argumentos duas vezes. </li></ul></ul></ul><ul><ul><ul><li>Recency: preferir regras que se referem a elementos da Memória de Trabalho criados recentemente. </li></ul></ul></ul><ul><ul><ul><li>Especificidade: preferir regras que são mais específicas. </li></ul></ul></ul><ul><ul><ul><li>Prioridade de Operação: preferir ações com prioridade maior, especificada por alguma categoria. </li></ul></ul></ul><ul><li>Execução de Ações </li></ul>
    15. 15. JBoss Rules Visão Geral
    16. 16. JBoss Rules – Visão Geral <ul><li>Consiste em uma ferramenta open-source e standards-based business rules engine que facilita o acesso, gerenciamento de políticas de negócios (regras) de forma simples, rápida e eficiente; Externalizando as regras de negócio do código fonte da aplicação. </li></ul><ul><li>Com isto, analistas de negócios e processos, auditores e até mesmo gerentes corporativos podem gerenciar estas políticas, sem terem conhecimentos técnicos de como a aplicação foi implementada. </li></ul>
    17. 17. JBoss Rules – Visão Geral <ul><li>É normalmente usado em aplicações: </li></ul><ul><ul><li>Segurança de Redes </li></ul></ul><ul><ul><li>Telecom </li></ul></ul><ul><ul><li>Detecção de Fraudes </li></ul></ul><ul><ul><li>Vendas Eletrônicas </li></ul></ul><ul><ul><li>Bancos e Seguradoras </li></ul></ul><ul><ul><li>etc </li></ul></ul>
    18. 18. JBoss Rules
    19. 19. JBoss Rules Workbench
    20. 20. Rules + JBPM
    21. 21. Rule Language <ul><li>É escrita num arquivo .drl </li></ul><ul><li>Pode ser escrita em XML (não recomendável) </li></ul><ul><li>Diversas palavras reservadas </li></ul><ul><li>Exemplo: </li></ul><ul><ul><li>rule “regraNumero1” </li></ul></ul><ul><ul><li>when </li></ul></ul><ul><ul><li>“ se o prazo/custo do projeto estourar” </li></ul></ul><ul><ul><li>then </li></ul></ul><ul><ul><li>“ segura na mão de Deus e vá” </li></ul></ul>
    22. 22. Rules Language <ul><li>Atributos </li></ul><ul><ul><li>No-loop: Quando a uma regra é modificada, pode causar uma nova ativação para inferência, causando assim um processo recursivo. (type = Boolean) </li></ul></ul><ul><ul><li>Salience: Prioridade de execução. (type = Integer) </li></ul></ul><ul><ul><li>Agenda-group: Possibilita agrupar determinadas regras na Agenda, para maior controle de execução de quais regras deverão ser executadas (type = String) </li></ul></ul><ul><ul><li>Auto-focus: Se configurado para “true”, permite que que determinada regras seja potencialmente executada. (type = Boolean) </li></ul></ul><ul><ul><li>Activation-group: Permite que um grupo de regras sejam executadas exclusivamente. (type = String) </li></ul></ul><ul><ul><li>Duration </li></ul></ul>
    23. 23. Rule Language <ul><li>Palavras reservadas </li></ul><ul><ul><li>When, then, rule, end, contains, matches, and, or, modify, retract, assert, salience, function, query, exists, eval, agenda-group, no-loop, duration, ->, not, auto-focus </li></ul></ul><ul><li>Elementos Condicionais </li></ul><ul><ul><li>And (&&), Or (||) e Eval </li></ul></ul><ul><ul><li>Not e Exists: Verificar se exite algo ou não no WorkingMemory </li></ul></ul><ul><ul><li>Group </li></ul></ul>
    24. 24. Rule Language <ul><li>Funções </li></ul><ul><li>Exemplos </li></ul><ul><ul><li>not Contrato( plano == “PAGUE_MAIS”) </li></ul></ul><ul><ul><li>existis Cliente (idade > 60) </li></ul></ul><ul><ul><li>( </li></ul></ul><ul><ul><li>Message (status == “OK”) and Message(message != null) </li></ul></ul><ul><ul><li>) </li></ul></ul><ul><ul><li>Function int somar(int a, int b){ return a+b;} </li></ul></ul>
    25. 25. JBoss Rules Componentes Básicos
    26. 26. Componente: Working Memory <ul><li>É a principal classe para utilização da Rule Engine em runtime. </li></ul><ul><li>É stateful, podendo ser shortlived ou longlived. </li></ul>
    27. 27. Componente: Agenda <ul><li>É uma característica do Algoritmo RETE. </li></ul><ul><li>Durante a execução do Working Memory, as regras são combinadas inteiramente, ficando desta forma, prontas para a execução. Assim, estas regras são colocadas na agenda, que por sua vez, a ordem da execução destas, usando uma estratégia de resolução de conflitos. </li></ul>
    28. 28. JBoss Rules Domain Specific Language (DSL)
    29. 29. Domain Specific Language (DSL) <ul><li>Consiste em uma técnica utilizada para trazer os conceitos de um determinado domínio para o sistema em questão. </li></ul><ul><li>Tem como objetivo, diminuir o gap entre implementação e o conceito do mundo real, não sendo necessário, a utilização de uma linguagem natural. </li></ul>
    30. 30. Domain Specific Language (DSL) <ul><li>Extende o JBoss Rules, agindo com “templates” de condicionais e ações </li></ul><ul><li>Exemplo: </li></ul><ul><ul><li>#Comentário </li></ul></ul><ul><ul><li>[when] Cotação do Dollar for maior que {cotacao} </li></ul></ul><ul><ul><li>… .. </li></ul></ul><ul><ul><li>[then] Enviar um email para os acionistas </li></ul></ul><ul><ul><li>… .. </li></ul></ul>
    31. 31. JRE API (JSR 94) <ul><li>Java™ Rule Engine API </li></ul><ul><li>Definidas no pacote javax.rules e javax.rules.admin </li></ul><ul><li>Principais componentes: </li></ul><ul><ul><li>Rule e Rule Execution Set </li></ul></ul><ul><ul><li>Rule Session </li></ul></ul><ul><ul><li>Stateful Rule Session </li></ul></ul><ul><ul><li>Stateless Rule Session </li></ul></ul>
    32. 32. JRE API (JSR 94) - Exemplo <ul><li>Class.forName(&quot;org.drools.jsr94.rules.RuleServiceProviderImpl&quot;); </li></ul><ul><li>RuleServiceProvider serviceProvider = </li></ul><ul><li>RuleServiceProviderManager.getRuleServiceProvider(“http://drools.org”) ; </li></ul><ul><li>RuleRuntime ruleRuntime = serviceProvider.getRuleRuntime(); </li></ul><ul><li>StatefulRuleSession statefulRuleSession = </li></ul><ul><li>(StatefulRuleSession) ruleRuntime.createRuleSession( uri, </li></ul><ul><li>new HashMap(), RuleRuntime.STATEFUL_SESSION_TYPE ); </li></ul>
    33. 33. JRE API (JSR 94) - Exemplo <ul><li>Dollar inputDollar1 = new Dollar(new Date(1,1,2005)); </li></ul><ul><li>inputIDollar1.setCotacao(2.5); </li></ul><ul><li>statefulRuleSession.addObject( inputDollar1 ); </li></ul><ul><li>statefulRuleSession.executeRules(); </li></ul><ul><li>results = statefulRuleSession.getObjects(); </li></ul><ul><li>Dollar inputDollar2 = new Dollar(new Date()); </li></ul><ul><li>inputInDollar2.setCotacao(2.2); </li></ul><ul><li>statefulRuleSession.addObject( inputDollar2 ); </li></ul><ul><li>statefulRuleSession.executeRules(); </li></ul><ul><li>results = statefulRuleSession.getObjects(); </li></ul><ul><li>statefulRuleSession.release(); </li></ul>
    34. 34. Sugestão de Metodologia para Identificação das Regras de Negócios <ul><li>Passos: </li></ul><ul><ul><li>Durante a fase de levantamento dos casos de uso, já ir identificando as regras de negócio, descrevendo-as na forma (when-then), numa linguagem natural ao usuário, identificando os pontos variáveis (DSL). </li></ul></ul><ul><ul><li>Durante a fase de desenvolvimento, o desenvolvedor implementa as regras no .drl e realiza os mapeamentos necessários para a DSL, criando assim, um repositório de regras de fácil entendimento ao usuários final. </li></ul></ul><ul><ul><li>Entendendo que estas fases ocorrem de forma incremental, seria interessante que em documento de solução técnica ou até mesmo nos casos de uso, que as regras em .drl e seus respectivos DSL sejam documentados. </li></ul></ul>
    35. 35. Rule Builder/Editor (Ferramenta para desenvolvimento e depuração de rules) Rule Deployment and Configuration (Ferramentas para deploy e gestão de rules) Rules Engine Rules Engine Rules Engine Business System Business System Business System Shared Rules Repository
    36. 36. Vamos à prática Demonstração
    37. 37. Dúvidas? Sugestões? Comentários? Muito Obrigado Breno Barros

    ×