Introdução a AOP + SpringAOP Jobson Ronan

Slides:



Advertisements
Apresentações semelhantes
Programação orientada a objetos
Advertisements

Sistemas distribuídos
Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues.
Aspect Oriented Software Development - AOSD 1 Elaborado por: Bruno Nunes nº 3202 Pedro Casqueiro nº 2163.
UML Visões – Parte 2.
Identificando requisitos
Um Processo Baseado em MDA para a Especialização de Mecanismos de Persistência Fabio Seixas Marques Seminário LES – 7 de abril de.
Projeto de Sistemas de Software Leandra Mara da Silva
Modularização de interesses ortogonais
Prof. João Bosco M. Sobral
Projeto Arquitetural de Software Orientado a Aspectos
Professora: Aline Vasconcelos
Programação Orientada a Aspectos
Introdução ao paradigma de programação: Orientado a Objetos
Tecnologia da Informação Orientação a Aspectos
Programação orientada a objetos com Java
Introdução a EJB 3.0 Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
PROGRAMAÇÃO ORIENTADA A ASPECTOS EM JAVA Introdução a conceitos teóricos e práticos Adriano G. do Prado José Eduardo M. Lemos José Fernando da S. Cruz.
Como o AspectJ tece o código
Classes e objetos P. O. O. Prof. Grace.
Uma visão geral Grupo: Alexandre Henrique Vieira Soares
DIAGRAMA DE COMPONENTES
Diagrama de Componentes
Middleware e Sistemas Distribuídos
Separation of Concerns (SoC)
Polimorfismo em C#.
Bruno Rafael de Oliveira Rodrigues. Tratadores de Excessões A exceção é uma indicação de que um erro ou problema aconteceu durante a execução de uma aplicação.
Aula prática - análise contextual
A NÁLISE Q UANTITATIVA DA I MPLEMENTAÇÃO DE T RATAMENTO DE E XCEÇÕES NA L INGUAGEM P TOLEMY Aluno: Cleivson Arruda Orientador: Fernando Castor T RABALHO.
Arquitetura de software
Padrão de Projeto Visitor
P ROGRAMAÇÃO ORIENTADA A ASPECTOS Equipe: Leandro Oliveira Anusio Menezes.
Conceitos.
Desenvolvimento de Sistemas Orientados a Aspectos
Desenvolvimento de Sistemas Orientados a Aspectos
Chamada Remota de Procedimentos
PESQUISADOR: CASSIANO DALCIN / 2010 Trabalho de Conclusão de Curso MINISTÉRIO DA EDUCAÇÃO Universidade Tecnológica Federal do Paraná Campus Medianeira.
Aspect Oriented Programming (AOP)
Orientação a Objetos Parte I
Arquitetura das JSP - Aula 2
Tratamento de Exceções
Padrão- MVC Model, View, Controller
Conceitos da arquitetura
Linguagem orientada a Aspectos 2 Luiz Carlos d’Oleron Tiago Vinícius.
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
JavaServer Faces Rapid Web Application Development em Java Ricardo Cavalcanti Jobson Ronan
Parte 3 - Resultados Carlos Eduardo Pontual Fernanda d’Amorim Leopoldo Teixeira Ferramentas para Linhas de Produtos de Aplicações Móveis - FLIP.
APLICAÇÃO J2EE – EXEMPLO PRÁTICO Guilherme Amaral Avelino.
Spring Inversão de Controle, Desenvolvimento leve, Orientação a aspectos,... Ricardo Cavalcanti Jobson Ronan
Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE.
Factory.
Discussing Aspects of AOP Alunos: Ezequiel Jonacir Mazza João Andrei Cetenareski Curso: Mestrado em Informática Aplicada Disciplina: Orientação a Objetos.
Equipe Equipe: Ana Carolina M. Pilatti Igor de Souza Paiva Igor de Souza Paiva Rafael Stubs Parpinelli Rafael Stubs Parpinelli Vera Lúcia Marchiori Vera.
Desenvolvimento Global de Software
Implementando um sistema real com EJB Klissiomara Dias GENTe.
Globalcode – Open4Education 1 EJB3 Interceptors Ricardo Limonta.
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
Engenharia de Requisitos Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Agosto de 2012.
J U nit Um Framework Para Testes. Motivação  Todos os programadores sabem que devem testar seu código  Quanto mais curto o prazo menos testes são realizados.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
IF 718 Análise e Projeto de Sistemas Augusto Sampaio Vitor Braga (Estágio docência) Camila Sá (Monitora) Parte do material cedido pela Qualiti Software.
Fundamentos de EJB Componentes do framework Ricardo Cavalcanti Jobson Ronan
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
Aspectos de Segurança Autenticação e Controle de Acesso Ricardo Cavalcanti Jobson Ronan
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Introdução a AOP + SpringAOP Jobson Ronan

Motivação Atualmente OOP é o paradigma de desenvolvimento de software mais adequado Por que?  Emcapsulamento  Herança  Polimorfismo Porém, OOP não trata adequadamente de comportamentos que aparecem sobre muitos módulos

Um sistema como um conjunto de interesses Um complexo sistema de software pode ser visto como uma implementação combinada de múltiplos interesses  Lógica de negócios  Performance  Persistência  Logging  Debugging  Autenticação  Segurança  Etc.

Um sistema como um conjunto de interesses Dado um conjunto de requisitos, pode-se identificar uma série de interesses

Interesses atravessadores Sistemas são criados em resposta a requisitos  Core module-level requirements  System-level requirements Muitos requisitos do sistema tendem a ser ortogonais (mutuamente dependentes) de outros e de requisitos de módulos. Requisitos do Sistema tendem a atravessar muitos modulos

Interesses atravessadores Exemplo //... public class AccountService { public void updateAccount(updateAccount acount) throws Exception { SecurityManager.requireUserRole(“admin”); TransactionManager.beginTransaction(); try { //...código de negócio TransactionManager.commit(); log.info(“acount updated”); } catch (Exception e) { TransactionManager.rollback(); log.warning(“exception throw”, e); throw e; } ///... Segurança Transações Logging

Problemas O espaço de requisitos é multidimensional, enquanto o de implementação é unidimensional Sintomas  Código misturado  Código espalhado Afeta o desenvolvimento do software

Problemas Pobre delineabilidade Diminuição da produtividade Menor reuso de código Baixa qualidade de código Evolução mais dificultada

Soluções Mix-in Classes Design Patterns  Visitor e Tamplate Method Específico de domínio  EJBs

Separação de Interesses e AOP AOP permite implementar individuais interesses de maneira fracamente acoplada e combinar essas implementações no sistema final.  Permite uma implementação modularizada de interesses atravessadores ( crosscuting concerns )  Essa unidade de modularização é chamada de Aspecto Estágios de desenvolvimento  Decomposição aspectual  Implementação do interesse  Recomposição aspectual

Estágios de desenvolvimento

Benefícios Implementação modularizada de interesses atravessadores Sistemas fáceis de evoluir Decisões de modelagem atrasadas Maior reuso do código

SpringAOP Uma das chaves do Spring e seu framework de AOP Apesar do container IoC do Spring não depender de AOP, este completa o Spring oferecendo soluções interessantes  Disponibilizar serviços declarativos coorporativos, como gerenciamento de transações e autenticação  Possibilitar a implementação de aspectos customizados

Conceitos Aspecto:  Implementado no Spring como Advisors ou Interceptors Joinpoint:  Ponto de execução de um programa. No SpringAOP é sempre referente a uma invocação de método Advice :  Ação tomada pelo framework AOP em algum Joinpoint Pointcut :  Um conjunto de Joinpoints para os quais um advice deve ser disparado Objeto Alvo:  Objeto contendo joinpoints. Também chamado de advised ou proxied

Conceitos Introduction:  Adicionar métodos e atributos em uma classe advised. Spring permite introduzir novas interfaces para objetos advised. Proxy AOP:  Um objeto criado pelo framework de AOP, contendo um advice. Weaving:  Aplicação de aspectos para criar objetos advised.

Tipos de Advices Around advice Before advice Throws advice After Returning advice

Tipos de Weaver Estático  Aspectos são tipicamente introduzidos ao byte code em tempo de compilação ou através de classloaders customizados em tempo de execução AspectJ (byte code) JBoss AOP, AspectWerkz (classloader) Dinâmico  Cria proxies para todos os objetos interessados  Leve perda de performance  Fácil de configurar  Spring

Em prática public interface IBusinessLogic { public void foo(); } public class BusinessLogic implements IBusinessLogic { public void foo() { System.out.println( “Inside BusinessLogic.foo()” ); }

Em prática import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class MainApplication { public static void main(String [] args) { // Read the configuration file ApplicationContext ctx = new FileSystemXmlApplicationContext("springconfig.xml"); //Instantiate an object IBusinessLogic testObject = (IBusinessLogic) ctx.getBean("businesslogicbean"); // Execute the public // method of the bean testObject.foo(); }

Entendendo Uma vez que nossa MainApplication chama o método ctx.getBean() ela abre mão da instanciação e gerênciamento do Bean para o Spring Controlando a inicialização do nosso objeto, o Spring todas as tarefas de gerenciamentos requeridas por aplicações J2EE Isso, claro, antes que nosso objeto seja utilizado pela aplicação

Em prática springconfig.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <bean id="businesslogicbean" class="org.springframework.aop.framework.ProxyFactoryBean"> IBusinessLogic

Em prática Diagrama de seqüência

Em prática Implementando um Advice import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class TracingBeforeAdvice implements MethodBeforeAdvice { public void before(Method m, Object[] args, Object target) throws Throwable { System.out.println("Hello world! (by " + this.getClass().getName() + ")"); }

Em prática Para acoplar o Advice a determinados joinpoints de nossa aplicação prescisamos acrescentar algumas declarações no springconfig.xml... <bean id="theTracingBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">.*... Aplicado por expressões regulares!

Em prática springconfig.xml (cont.) <bean id="businesslogicbean" class="org.springframework.aop.framework.ProxyFactoryBean"> IBusinessLogic theTracingBeforeAdvisor

Em prática springconfig.xml (cont.) Chamada transparente ao Advice do aspecto

E ainda Existem ainda outras formas de aplicar aspectos com o Spring  AutoProxy: BeanNameAutoProxyCreator DefaultAdvisorAutoProxyCreator

Conclusões AOP com o Spring tem sido aplicado a vários projetos AOP melhora consideravelmente a qualidade de um sistema, aumentando a simplicidade do modelo AOP está pegando

Exercícios Rode o exemplo mostrado Implemente um log para nosso sistema com AOP

Introdução a AOP + SpringAOP Jobson Ronan