Drools Desacoplando as regras de negócio do código da aplicação. Raphael Duarte Paiva

Documentos relacionados
Daniel Wildt

Acadêmico: Mateus Artur Schneiders Prof. Orientador: Dr. Mauro Marcelo Mattos

An Open Source Java Rules Engine

BPMN e BPMS. Ad, Décio, Marcos, Yuri

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Prof. Me. Sérgio Carlos Portari Júnior

Geração Automática de Metadados

1.1 Linguagens de Programação

6.1. Teste Baseado em Gramática e Outras Abordagens de Teste

3 Tecnologias Relacionadas

3 Trabalhos relacionados

Histórico. Perl (Practical Extraction and Report Language). Criada por Larry Wall em 1987.

Grupo: Diogo Furtado Phellipe Perin Stephan Hebeda

Agenda da Aula. Reuso de Software. Tipos de Reuso. Potenciais Problemas. Vantagens de Reuso. Introdução a Reuso de Software

4 ALBATROZ : Um ambiente para desenvolvimento de SMA

Sistemas Baseados em Regras. Profa. Patrícia Dockhorn Costa

M V C, J S O N E X M L P R O F. M E. H É L I O E S P E R I D I Ã O

Introdução à Gestão de Processos de Negócios

Aula 11 Introdução ao Java Script

1/26/2009. Metamodelo MMA. Metamodelo MMB. Modelo A2. Modelo A. Modelo B. Transformação M2M

Apresentação do Capítulo 4 MDA (Model-Driven Archtecture) ALUNO: DOMENICO SCHETTINI FILHO NÚMERO USP:

Treinamento em Activiti Workflow e BPM Open Source

5 Conclusão e trabalhos futuros

Introdução a Teste de Software

Lista de Linguagens de Programação 7

Requisitos de Software e UML Básico. Janaína Horácio

Programação Orientada a Objetos

Estruturas de Repetição

Plataformas de Distribuição de Objetos

Linguagens de Programação Funcional

Gradle para Geração de Multi-Aplicativos Móveis: Um Estudo de Caso em uma Universidade

Tabela de Identificadores CMinus - Resolução com DMS

WEBDESIGN. Professor: Paulo Marcos Trentin - Escola CDI de Videira

132 6 Conclusão 6.1. Contribuições da Tese

Programação de Computadores:

Desenvolvimento de Aplicações Desktop

INF 1005 Programação I

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

De Olho na Pista. Documento de Arquitetura. De Olho na Pista Documento de Arquitetura Data: 23/03/2013. AJA Software

4 Processo de Transformação

Curso Online de E-commerce. Plano de Estudo

UNIVERSIDADE FEDERAL DO PIAUÍ DEPARTAMENTO DE COMPUTÇÃO DISCIPLINA: ENGENHARIA DE SOFTWARE II PROFESSOR: ARMANDO SOARES

Gerência de Projetos de TI

DESENVOLVIMENTO DE UMA SOLUÇÃO DE INTEGRAÇÃO DE APLICAÇÕES PARA AUTOMATIZAR RESERVAS DE VIAGEM 1

Programação I Apresentação

Modularidade. Objetivos: Introduzir noções básicas de modularidade. Funções e procedimentos

6 Hist-Inspect: A Ferramenta de Medição e Avaliação

Modularização. Prof. Antonio Almeida de Barros Junior

UML Diagramas Estruturais Diagrama de Componentes

INTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ESTRUTURA DE UM SISTEMA OPERACIONAL PROFESSOR CARLOS MUNIZ

COBOL Query 1.0. Ferramenta para extração de dados em arquivos COBOL. Aluno: André Luiz Jacinto Orientador: Adilson Vahldick

Apostila - Desenvolvimento web com PHP

ENGENHARIA DE SOFTWARE

SQL Pacotes. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados Pacotes

GROOVY. Diogo Eládio Igor

IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

MASTERSAF DFE MANUAL DE CONFIGURAÇÃO SAML DFE V3

Shell Script. Rafael Silva Guimarães

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

1. Quando algo visível para os usuário finais é um desvio em relação ao especificado ou um comportamento não esperado, isso é chamado de:

VANTAGENS DE USAR APACHE MAVEN NA PROGRAMAÇÃO.

Paradigmas de Programação

Capítulo 6 Nível do Sistema Operacional

Avaliação de Frameworks de Produtividade para aplicações CRUD

Introdução ao Desenvolvimento de

Figura 16 Niagara - Visão de grupos de notas.

[versão para impressão] Link original: comp=24763 Conhecendo o PL/SQL

A Linguagem Lua Lua Puc-Rio

Plataforma de desenvolvimento JAVA para terminal POS

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Figura 28: Tela da aplicação Demo

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Linguagem de Programação II Programação Orientada a Objetos. Ambientes de Programação

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Introdução à Computação

Este é o segundo modulo, nele abordaremos os métodos de gerenciamento do Windows Server 2008.

Metodologias de Teste de Software

Engenharia de Software. Prof. Raquel Silveira

Técnicas para Reutilização de Software

Professor Emiliano S. Monteiro

Engenharia de Software

Model Driven Architecture. Centro de Informática/UFPE Fernando Trinta

Primeira Prova de Linguagens de Programação - DCC024B -

Linguagens de Programação

Valdex Santos. 09 de junho de 2011

Paradigmas de Linguagens

Revisão. Profa Marina Gomes

Surgindo em 1997 a API Java Servlet proporciona ao desenvolvedor a possibilidade de adicionar conteúdo dinâmico em um servidor web usando a

Fundação Educacional Encosta Inferior do Nordeste

Agenda do Curso. Reuso de Software. Agenda da Aula. Tipos de Reuso. Vantagens de Reuso. Reuso de Software. Eduardo Figueiredo

3 Kaluana Arquitetura

Executa em qualquer plataforma que possua o Java (JDK) da Oracle

MANGUE Métricas e Ferramentas para Avaliação Automática da Qualidade de Código-Fonte Paulo R. M. Meirelles IME-USP

Análise e Projeto de Sistemas (Cont.) Profª Rafaella Matos

Noções de sistemas de computação

Módulo 1. Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

BEHAVIOR DRIVEN DEVELOPMENT BRUNO ROLIM MANSUR

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

Transcrição:

Drools Desacoplando as regras de negócio do código da aplicação Raphael Duarte Paiva

Agenda Motivação Alguns Problemas Acoplamento Dificuldade de acesso O Motor de Regras Como Funciona? Alguns Conceitos Componentes principais Definindo Regras Drools Rule Language Domain Specific Languages Processos Guvnor (BRMS)

Motivação Alguns Problemas

Alguns Problemas Acoplamento das regras de negócio com o código do sistema.

Alguns Problemas Dificuldade de acesso pelos analistas de negócio às regras que foram implementadas, compromentendo a comparação da regra descrita pelo analista com a regra que foi implementada no sistema.

Alguns Problemas Acoplamento

Acoplamento

Acoplamento Vantagens das regras Regras rodam em uma camada acima do código nativo da aplicação. Podem ser expressas em uma linguagem diferente, mais natural. São compiladas para uma linguagem cujo o motor de regras interpreta. Conseqüentemente, um build da aplicação para mudança de regras faz-se desnecessário, aumentando o uptime e contribuindo para uma maior qualidade do serviço.

Alguns Problemas Dificuldade de Acesso

Dificuldade de acesso Um desenvolvedor pode claramente expressar o que o código abaixo significa public void checamaiordeidade(aluno aluno) { Date datanascimento = aluno.getpessoafisica().getpessoa().getdatanascimento(); if (subtrairdata(new Date(), datanascimento) < IDADE_MINIMA) { aluno.getmatricula().invalidar(); } else { aluno.getmatricula().validaridade(); } } Para um analista de negócios que, normalmente, nunca teve alguma experiência com desenvolvimento, ler tal pedaço de código seria uma tarefa difícil.

Dificuldade de acesso E se regras pudessem ser escritas do seguinte modo? regra "Aluno deve ser maior de idade" quando O aluno em questão possui - idade menor que idade mínima então invalidar matrícula fim Drools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência.

Dificuldade de acesso Vantagens Linguagem muito próxima à linguagem natural Facilidade de manutenção e leitura. Introduz a possibilidade do próprio analista de negócios realizar a autoria e manutenção das regras, sabendo exatamente como serão interpretadas pelo sistema.

Dificuldade de acesso Diminui a responsabilidade da equipe de desenvolvimento de interpretar, escrever e manter as regras de negócio Analistas de negócio têm um conhecimento muito maior do domínio do que os desenvolvedores. A capacidade dos próprios analistas escreverem as regras remove a possibilidade de algum desenvolvedor interpretar erroneamente uma regra e conseqüentemente implementá-la de forma errada.

O Motor de Regras Como funciona?

Como funciona? Alguns conceitos: Fatos: São objetos que representam um determinado estado do domínio. Regras de negócio: Toda regra é representada por dois elementos principais, seguindo a sintaxe: quando <condições (LHS)> então <ações (RHS)>

Como funciona? Existem 4 componentes principais:

Como funciona? Working Memory - Memória de Trabalho É onde residem os fatos. Production Memory - Base de Conhecimento É onde reside todo o conhecimento de negócio (regras). Pattern Matcher - Reconhecedor de padrões Responsável por casar os fatos na memória de trabalho com as condições das regras e criar ativações a partir dos casamentos. Agenda Responsável pela ordenação das ativações para execução.

O Motor de Regras Definindo Regras

Definindo Regras Drools Rule Language O motor de regras lê arquivos.drl, de texto puro que descrevem as regras de negócio. Nativamente, um arquivo.drl possui a seguinte sintaxe: rule <nome_da_regra> when <condições> then <ações> end

Definindo Regras Temos duas construções interessantes: <condições> São escritas utilizando a linguagem do Motor de regras. <ações> São escritas utilizando código Java.

Definindo Regras A linguagem do motor de regras por exemplo: package org.minhacompania.regras; import org. minhacompania.dominio.aluno import org.jboss.seam.core.facesmessages import function org.minhacompania.utils.datautils.subtraidata; global java.util.date dataatual; global org.jboss.seam.core.facesmessages facesmessages; function void mensagemmenordeidade(string nome) { facesmessages.add(nome + " é menor de idade."); } rule "deve ser maior de idade" salience 0 ruleflow-group "validacao" when a : Aluno($pf : pessoafisica) pf : PessoaFisica($p : pessoa) from $pf p : Pessoa($dataNasc: datanascimento, $nome : nome) from $p eval( subtraidata(dataatual, $datanasc) < 18 ) then mensagemmenordeidade($nome); a.getmatricula().invalidar(); end

Definindo Regras Domain Specific Languages

Definindo Regras Domain Specific Languages O motor de regras possui uma poderosa maneira de mapear sua linguagem nativa, expressa nos.drl's, para uma linguagem mais natural, como mostrada nos primeiros exemplos. Este mapeamento se dá através das Domain Specific Languages, ou dsl's. dsl s são expressas em arquivos.dsl, com uma sintaxe bastante simples, bem parecida com um arquivo. properties.

Definindo Regras Domain Specific Languages por exemplo: [keyword]rule=regra [keyword]when=quando [keyword]then=então [keyword]end=fim [when]o Aluno em questão possui=a : Aluno($pf : pessoafisica) pf : PessoaFisica($p : pessoa) from $pf p : Pessoa($dataNasc: datanascimento, $nome : nome) from $p [when]- idade menor que {idademinima}=eval( subtraidata(dataatual, $datanasc) < {idademinima} ) [then]invalidar matrícula=mensagemmenordeidade($nome); a.getmatricula().invalidar();

Definindo Regras A regra anterior poderia ser reescrita da seguinte maneira: regra "deve ser maior de idade" salience 0 ruleflow-group "validacao" quando O aluno em questão possui - idade menor que 18 então Invalidar matrícula fim

Definindo Regras Processos

Definindo Regras Processos O Drools provê também um motor para processos de negócio (BPM). Processos são definidos em arquivos xml, ou utilizando o editor gráfico do eclipse. O desenho de um processo se parece com o seguinte exemplo:

Definindo Regras Processos são compostos por nós, sempre começando por um nó "Start" e acabando em um ou mais nós "End". Os tipos de nós disponíveis para uso são:

Definindo Regras Alguns nós importantes: RuleFlowGroup Quando a execução chegar a este nó, todas as regras pertencentes a ruleflow-group serão executadas. Fault Representa uma condição excepcional no processo. Quando a execução chega a um nó deste tipo, uma falha com um dado nome será lançada e uma busca por um tratador para aquela falha. Caso ela não seja tratável, o processo é abortado.

Guvnor Business Rules Management System

Guvnor O Guvnor é uma ferramenta para gerência de regras de negócio. Entre suas características estão: Integração com LDAP; Ambiente multi-usuário; Múltiplos tipos de editores (gráfico, texto); Controle de versão; Categorização; Criação de cenários de teste; Build e deploy.

Guvnor Com o Guvnor, é possível realizar autoria, teste, build e deploy de pacotes de regras. Todas estas atividades estão integradas na mesma ferramenta. Com a configuração de Knowledge Agents no sistema, basta um build do pacote de regras pelo guvnor que a aplicação automaticamente fará download do pacote compilado e atualizará a sua base de conhecimento.

Guvnor Tela inicial

Guvnor Permissionamento de fina granularidade

Guvnor Tela de pacotes

Guvnor Tela de edição textual

Guvnor Tela de edição gráfica

Guvnor Tela de Testes

Módulos Divisão das funcionalidades do Drools

Divisão das funcionalidades do Drools É o módulo principal, que compreende o motor de regras, linguagem de regras e a implementação do algoritmo de pattern matching. Adiciona as capacidades para lidar com BPM.

Divisão das funcionalidades do Drools Adiciona capacidades para realizar o CEP (Complex Event Processing). Inclui a ferramenta para Gerência de Regras de negócio (BRMS).

Fim! Dúvidas? Contato: raphaeldpaiva@gmail.com