Técnicas de Reuso de Software aplicados na elaboração de Arquiteturas Corporativas Alexandre Eiki Onishi http://www.linux.ime.usp.br/~xandonix/mac499 Supervisor(IME): Prof. Siang Wun Song Supervisor(OPUS): Wen Hung Khang Tipo de Trabalho: Estágio Supervisionado www.opuscom.com.br Objetivos Estruturar um conhecimento em Reuso de Software enfatizando técnicas de reuso, a fim de que fornecesse o conhecimento necessário para melhorar o processo de desenvolvimento de um software de automação bancária implementado em Java e em futuras aplicações da empresa. Conteúdo Introdução Reuso de Software Frameworks Arquitetura Orientada a Serviços (SOA) Resultados Obtidos Sistema Opus ibank Introdução - Demanda por software aumentou muito nas últimas décadas - Necessidade de se manter competitivo no mercado obriga as empresas a serem cada vez mais ágeis - Fazer software é difícil, lento e caro Como aumentar a produtividade no desenvolvimento de software? Trabalhe mais rápido automação, ferramentas, ambientes Melhore processos Reuse soluções previamente desenvolvidas, desenvolva para o reuso. Será que devemos começar o desenvolvimento tudo do zero de novo sempre ? Reuso de Software Reuso de Software - Reuso de Software é o processo de incorporar no desenvolvimento de um novo produto: - Código fonte - Plano de testes - Especificações, análise, modelos arquiteturais - Enfim qualquer produto gerado durante desenvolvimentos anteriores Reuso de software Benefícios da reutilização: Aumento da produção com redução do esforço de desenvolvimento Redução dos custos e prazo de entrega Aumento da qualidade do produto Padronização da arquitetura Dificuldades : Identificação de um componente reutilizável Indiferença com relação a reutilizar seja pela falta de apoio por parte da gestão, dúvida com relação a reutilização, entre outros Reuso de Software Desafio é como reutilizar: - Como fazer isso? - Que técnicas de reuso usar? Reuso de Software Atualmente Técnicas para reuso Atualmente a idéia de reuso se cristalizou com: - Patterns Padrões de projeto, arquiteturais, integração, teste, ..... - Frameworks Frameworks web, mapeamento objeto relacional, injeção de dependências, testes, serviços remotos, ..... - Componentes ESBC, DBC, processos de desenvolvimento de componentes (RUP, CATALASYS, UML COMPONENTS), Tecnologia de componentes EJB, CORBA, ....... Frameworks Framework é uma técnica de reuso orientado a objeto que compreende reuso de análise, arquitetura, código, modelo de interação entre objetos e até testes. Muito reuso ! Um framework é uma aplicação quase completa, mas com ganchos para que sejam especializados mais tarde em uma aplicação específica. Ou seja provê uma infra-estrutura genérica para construção de aplicações dentro de uma família de problemas semelhantes, de forma que esta infra-estrutura genérica deve ser adaptada para geração de uma aplicação específica. O principal problema com frameworks é a sua complexidade e o tempo que se leva para aprender a utiliza-los. Frameworks Web Frameworks que implementam o MVC e que oferecem recursos para a construção de interfaces HTML/HTTP Alguns frameworks web: JavaServer Faces, Cocoon, Struts, Webwork, Tapestry Características do Java Server Faces: - Framework de componentes que engloba componentes de interface de usuário, validação e conversão de dados. - Implementa MVC Frameworks ORM • Tratam da persistência de dados em banco • Mapeiam classes em tabelas do banco de dados • Garantem portabilidade do código entre bancos • Frameworks ORM de mapeamento completo gratuitos: Hibernate, Apache OJB, iBATIS, JDO • Características do Hibernate: Hibernate Usuario.java Id Nome Descricao Usuario.xml Id_user Nome descricao Mapeamento ORM BD - Mapeamento de objetos em tabelas através de arquivos XML - API capaz de realizar inserções, remoções, atualizações e consultas - Linguagem de seleção orientada a objetos (Hibernate Query Language) Frameworks para Injeção de Dependência Promovem o acoplamento fraco entre componentes através de injeção de dependência Forum <<Interface>> Mensagem <<Interface>> Mensagem Forum <<setMensagem>> MensagemImpl <<create>> Montador MensagemImpl <<create>> Figura 1-Relações sem Injeção de dependência Figura 2-Relações com Injeção de dependência - Frameworks para Dependency Injection / Lightweight containeres: Excalibur, Hivemind, NanoContainer, PicoContainer, Spring Características do Spring: Gerenciamento de transações, segurança Programação distribuída, Programação orientada a aspectos Arquiteturas Orientadas a Serviços (SOA) Lógica de negócios disponibilizada como uma coleção de serviços O desenvolvimento novas aplicações se resumiria em selecionar os serviços disponíveis e encaixa-los numa determinada seqüência de execução, de acordo com as regras de negócio a serem atendidas. Um serviço é a menor unidade de uma aplicação SOA. Representa a realização de uma tarefa dentro de um processo de negócio. Ex: verificar saldo, registrar pedido, obter cotação, entre outras. Todas as funções em SOA são agregadas como serviços reutilizáveis; Web Services é a tecnologia atual mais difundida que dá suporte a implementação deste tipo de arquitetura. Arquiteturas Orientadas a Serviços (SOA) Uma das áreas onde arquitetura orientada a serviços mais vem sendo empregada é a integração de aplicações corporativas (EAI – Enterprise Application Integration). Figura 3 – Arquitetura de acesso a sistemas legados Resultados Obtidos: Sistema Opus ibank -O sistema opus ibank é um software de automação bancária que visa o gerenciamento operacional entre todos os terminais da agência e além do gerenciamento de todas as informações operacionais de um banco, como transação bancária, cadastro de funcionários e gerenciamento de equipamentos da rede. - Tecnologias utilizadas: Frameworks Hibernate, Java Server Faces e Spring API Java reflection APIs de criptografia Serviços remotos: EJB, Web Services Log4J apache Commons Chain e Commons BeanUtils Programação orientada a aspectos com Aspect J Resultados Obtidos: Sistema Opus ibank Módulo Cadastro Banco de Dados Módulo Monitoração Email Módulo Estatística Servidor Ldap Módulo Transacional Módulo Auditoria Módulo Gerenciamento Módulo Distribuição Versão CANAIS DE ATENDIMENTO (APPLICATION FRONTENDS) Figura 4 – Visão Macro de Processos MIDDLEWARE JAVA CAMADA DE RECURSOS Sistemas Legados Camada Recursos Segurança Módulo Controle Versão Resultados Obtidos: Sistema Opus ibank Camada apresentação Front JSP Controller Componentes JSF JSF JSF Backing Bean Usa VO Intercepting Filter Camada Negócios + Integração Service Locator IFaçade Localiza IFaçade Delega Obtém Referencia Local Business ou Remota Delegate BDBDBD Filter Filter Filter Chamada VO VO VO Value Object como valor de retorno. Proxy Remoto (Spring) Usa Data Access Objects DAO DAO DAO Usa Usa Hibernate Mapeamento O-R Chamada Clientes Log Façade VO Internet Web Browser Proxy (Spring) Beans Serviço Serviço Serviço Remoto Transação Aplicação Terminal Apresentação + Negócios Web Service Firewall Retorno BD Sistemas Legados Camada de recursos Figura 5 – Arquitetura técnica do Servidor ibank MAC0499-Trabalho de Formatura Alexandre Eiki Onishi http://www.linux.ime.usp.br/~xandonix/mac499 Supervisor(IME): Prof. Siang Wun Song Supervisor(OPUS): Wen Hung Khang Tipo de Trabalho: Estágio Supervisionado www.opuscom.com.br