Validando Sistemas Distríbuidos em Java com RMI Utilizando Injeção de Falhas



Documentos relacionados
Validando Sistemas Distribuídos Desenvolvidos em Java Utilizando Injeção de Falhas de Comunicação por Software

Sistemas Distribuídos

SISTEMAS DISTRIBUIDOS

Princípios de Sistemas Distribuídos. Tecnologias utilizadas em sistemas distribuídos Aula 5

UNIVERSIDADE. Sistemas Distribuídos

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular SISTEMAS DISTRIBUIDOS Ano Lectivo 2015/2016

Java. Marcio de Carvalho Victorino

Adriano Reine Bueno Rafael Barros Silva

Sistemas Distribuídos

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular SISTEMAS DISTRIBUÍDOS Ano Lectivo 2012/2013

FBV - Linguagem de Programação II. Um pouco sobre Java

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Sistemas Distribuídos

3 SCS: Sistema de Componentes de Software

Modelos de Arquiteturas. Prof. Andrêza Leite

RMI: Uma Visão Conceitual

Sistemas Distribuídos

4 Estrutura do Sistema Operacional Kernel

Desenvolvimento Web TCC Turma A-1

Programação de Computadores II TCC Turma A-1

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Distributed Object-oriented Virtual Environment using Web Services on Grid

GERAÇÃO DE RELATÓRIOS

Linguagem de Programação Introdução a Linguagem Java

} Monolíticas Aplicações em um computador centralizado. } Em Rede Aplicações com comunicação em rede. } Distribuídas Comunicação e cooperação em rede

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

1

UFG - Instituto de Informática

Considerações no Projeto de Sistemas Cliente/Servidor

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

INE Sistemas Distribuídos

Noções de. Microsoft SQL Server. Microsoft SQL Server

Sistemas Operacionais

Organização e Arquitetura de Computadores I. de Computadores

Orientação a Objetos

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Análise e Projeto de Sistemas de Informação. Andrêza Leite andreza.lba@gmail.com

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Aula 03-04: Modelos de Sistemas Distribuídos

Importância da Arquitetura de Sistemas Baseados em Componentes para os Testes por Injeção de Falhas

GT Computação Colaborativa (P2P)

Capítulo 8. Software de Sistema

Sistemas Operacionais

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

UFG - Instituto de Informática

Programação Orientada a Objetos

Linguagem de Programação Orientada a Objeto. Introdução a Orientação a Objetos Professora Sheila Cáceres

Aspectos técnicos do desenvolvimento baseado em componentes

Serviços Web: Introdução

Introdução à Programação. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR

DAS Inteligência Artificial Aplicada à Controle de Processos e Automação Industrial

Tópicos Especiais em Redes de Telecomunicações

ATIVIDADE 1 MÁQUINAS VIRTUAIS. 1.1 Arquiteturas não virtualizadas

PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA*

SISTEMAS DISTRIBUÍDOS

CURSO DE PROGRAMAÇÃO EM JAVA

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Componentes para Computação Distribuída

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO -

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Introdução a Java. Hélder Nunes

Distributed Systems Principles and Paradigms

ESTUDO DE CASO WINDOWS VISTA

XIII Encontro de Iniciação Científica IX Mostra de Pós-graduação 06 a 11 de outubro de 2008 BIODIVERSIDADE TECNOLOGIA DESENVOLVIMENTO

Arquitetura dos Sistemas de Informação Distribuídos

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

Modelos Arquiteturais

Sistemas Distribuídos Arquitetura de Sistemas Distribuídos I. Prof. MSc. Hugo Souza

Fault Tolerance Middleware for Cloud Computing

Introdução à Linguagem Java

ESTUDO SOBRE AS LINGUAGENS DE PROGRAMAÇÃO HOSPEDEIRAS SUPORTADAS PELA FERRAMENTA HTML. Aluno: Rodrigo Ristow Orientador: Wilson Pedro Carli

Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS

build UNIP Sistemas de Informação Análise Essencial de Sistemas 3 Prof.Marcelo Nogueira A produção de Software é uma atividade build and fix.

Segurança e Escalabilidade em WebLab no Domínio de Redes de Computadores

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

Sistemas Distribuídos: Conceitos e Projeto Java RMI

Desenvolvimento Cliente-Servidor 1

MASSACHUSETTS INSTITUTE OF TECHNOLOGY Sloan School of Management

Camadas de Software - o Middleware. Sistemas Distribuídos Capítulo 2: Modelos e Arquitecturas. Aplicações. Middleware.

INTEGRAÇÃO DE APLICAÇÕES UTILIZANDO WEB SERVICE 1. Kellen Kristine Perazzoli 2 ; Manassés Ribeiro 3

Everson Scherrer Borges João Paulo de Brito Gonçalves

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA. Sistemas Distribuídos

CAPITULO 4 A ARQUITETURA LÓGICA PARA O AMBIENTE

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

Exemplos práticos do uso de RMI em sistemas distribuídos

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

PROGRAMAÇÃO JAVA. Parte 1

UML - Unified Modeling Language

Transcrição:

Validando Sistemas Distríbuidos em Java com RMI Utilizando Injeção de Falhas Vieira, Marcio. J. 1 1 Departamento de Informática Universidade Federal do Paraná (UFPR) Curitiba PR Brasil marciojv@inf.ufpr.br Abstract. This article presents as fault injection of imperfections for experimental validation of Java applications with RMI (Remote Method Invocation),and the behavior of these distributed systems, after the injection of software imperfections affecting attributes and public object methods of the interface Through an application they are intercepting the remote calls of protocol RMI during the execution of the class stub, for the injection of imperfections. Resumo. Este artigo apresenta como realizar injeção de falhas para validação experimental de aplicações Java com RMI ( Remote Method Invocation ), e o comportamento deste sistemas distribuídos, após a injeção de falhas de software afetando atributos e métodos de objeto público da interface. Através de uma aplicação são interceptando as chamadas remotas do protocolo RMI durante a execução da classe stub, para a injeção de falhas. 1. Introdução Sistemas distribuído é uma referência à computação paralela e descentralizada, realizada por dois ou mais computadores conectados através de uma rede, cujo objetivo é concluir uma tarefa em comum. Os Sistemas distribuídos em Java são muitos usados para serviços de alta disponibilidade que exigem que mecanismos de tolerância a falhas sejam validados, para que não apresentarem um comportamento inesperado no momento que que são requisitados no ambiente operacional. Injeção de Falhas é uma técnica para melhorar a cobertura de um teste introduzindo falhas ao sistema. Java é uma linguagem de programação orientada a objeto desenvolvida pela Sun Microsystems [Spec 2007] e o RMI (Remote Method Invocation) é uma interface de programação que permite a execução de chamadas remotas no estilo RPC em aplicações desenvolvidas em Java. Para validar este ambiente sugerimos neste trabalho a injeção de falhas para validação experimental de aplicações Java com RMI. As falhas injetadas serão baseadas em falhas de interface seguindo um sistema de padrões para injeção de falhas [Leme 2001]. A incorporação de sistemas computacionais ao cotidiano para o atendimento de serviços de missão crítica exige confiança no comportamento deste serviço, pois uma falha descoberta após o sistema estar em operac cão pode gerar consequências desastrosas. O middleware para objetos distribuídos, Remote Method Invocation (RMI) da SUN Microsystem [Spec 2007] é muito utilizado para o desenvolvimento de aplicações Java

distribuídas, embora ainda disponha de uma infra-estrutura básica para a construção de aplicações distribuídas, devem existir mecanismos de tolerância a falhas para que estes sistemas não apresentem um comportamento inesperado no momento que são requisitados no ambiente operacional. Este artigo apresenta o comportamento de sistemas distribuídos desenvolvidos sobre Java com RMI na injeção de falhas, auxiliando na validação de aplicações desenvolvidas sobre esta plataforma, utilizando uma aplicação para injeção de falhas de software afetando atributos e métodos de objeto publico da interface [Regina O. M. 2003], e assim definição de um modelo de falhas para RMI. 2. Injeção de Falhas Injeção de falhas é uma técnica de teste em que se procura produzir ou simular falhas e observar o sistema sob teste para verificar sua resposta nesta condição [Hsueh 1997]. Quando conhecemos o modelo de falhas no sistema podemos criar falhas para injeta-las. Experimentos de injeção de falhas também podem revelar problemas de software, que não são encontrados com técnicas tradicionais de testes e métodos formais [Voas 1997]. 2.1. Injeção de falhas por Software Uma ferramenta de injeção de falhas por software geralmente é um trecho de código que usa todos os ganchos ( hooks ) possíveis do processador e do sistema para criar um comportamento incorreto de maneira controlada [Carreira 1998]. Está técnica pode simular folhas de hardware, de software e de interface. Neste artigo vamos injetar falhas por software em uma aplicação distribuída desenvolvida sobre a arquitetura da RMI. 2.2. Ferramentas de Injeção de Software Para que se possa injetar falhas é necessário dispor de ferramentas apropriadas. Essas ferramentas executam o sistema sobre teste e produzem ou simulam a presena de falhas, monitorando o sistema para verificar qual é o seu comportamento [Gabriela J.; Regina O. M.; Taisy S.; Martins 2004].Jaca é uma ferramenta de Injeção de Software desenvolvida em Java com alta portabilidade [Regina O. M. 2003] usando um o Javassist reflection toolkit [Chiba 1998], compatível com JVM padrões, tanto o Jaca como Javassist não necessitam do código fonte da aplicação para serem utilizados, porém e necessário conhecer o mínimo de informação sobre a aplicação Java Distribuída. 2.3. Sistemas padrões de Injeção de Falhas No desenvolvimento de software e comum deparar-se com problemas que são recorrentes dentro de um determinado domínio de aplicações e nã o raro, resolvem-se esses problemas de forma similar a outras solucoes já utilizadas por outros desenvolvedores.essas solucoes podem ser documentadas em forma de padrões que são independentes de linguagens de programacao. Esses padrões auxiliam o desenvolvimento mais eficiente,robusto, portável e reutilizável [Schmidt 1995], facilitando o entendimento e

instanciando soluções que tém sido consideradas eficientes para solucionar os problemas a que se propõem. 3. Remote Method Invocation RMI A RMI permite que objetos Java executados num mesmo computador ou em computadores separados se comuniquem entre si via chamadas de métodos remotos. A RMI está baseada em uma tecnologia anterior semelhante para programação procedural, chamadas de chamadas de procedimento remoto ( remote procedure call RPCs ). A RPC permite que um programa procedural chame uma função de outro computador tão convenientemente como esta função fosse parte do mesmo programa executado no mesmo computador [Deitel 2004]. A RMI é a implementação da RPC por Java para comunicação distribuída de um objeto Java com outro. Uma vez que um método (ou serviço) de um objeto Java é registrado como sendo remotamente acessível, um cliente pode pesquisar ( lookup ) esse serviço e receber uma referência que permita ao cliente utilizar esse servio. Como com RPC, a ordenação (marshal) de dados é tratada por RMI. A RMI oferece transferência de objetos de tipos de dados complexos através do mecanismo de serialização de objeto [Deitel 2004]. 4. Reflexão Computacional De acordo com Maes [Maes 1987], computação reflexiva é a atividade desempenhada por um sistema computacional quando a computação realizada é sobre a sua própria computação. A Reflexo Computacional é definida como uma técnica de programaç ão que permite ao programador obter informações a respeito do próprio programa, com o objetivo de monitorá-lo, adicionar novas funcionalidades e mesmo fazer alterações adaptativas em tempo de execuo [Silveira 2003]. Sua utilização no processo de teste possibilita realizar uma anlise da aplicao de forma dinãmica, sem a necessidade de instrumentar o cdigo-fonte da aplicao. Atravs da reflexão é possível monitorar classes e objetos específicos, realizando uma intervenção na computação da aplicação em teste [Silveira 2003]. neste trabalho usaremos como apoio a ferramenta Javassist. [Chiba 2004] para reflexão. 4.1. Javassist Javassist (Java Programming Assistant) faz simples manipulação bytecode java. Isto é, uma biblioteca para editar bytecodes em Java, habilita programas desenvolvidos em Java para definir uma nova classe em tempo de execução modificando o arquivo da classe que a JVM ( Java Virtual Machine ) está carregando [Chiba 2006]. 5. Metodologia Através de uma aplicação será interceptando as chamadas remotas do protocolo RMI ( Remote Method Invocation ) durante a execução da classe stub, para a injeção de falhas, as interceptações serão realizadas em um sistema distribuída simples que será utilizado apenas como base de estudos. Todas as falhas apresentadas serão catalogadas.

As classes stub são geradas pelo compilador RMI ( rmic ) e não são considaredas classes do sistema podendo ser reflexionadas pelo carregador de classes do Javassist. Na Figura 1, demostramos a idéia básica que vamos implementar para validara injeo de falhas em RMI, através da classe stub, uma aplicação exemplo com applet Java, chama um método remoto ( RMI ) de um determinado web-server. Figura 1. Chamada de método remoto por RMI. 6. Cronograma de Atividades A tabela 1 apresenta as atividades e serem desenvolvidas pelo projeto com datas previstas e o estado atual de realização. o contato com os desenvolvedores de uma ferramenta chamada Jaca, que implementa injeções semenhantes foi realizado solicitando o código fonte para darmos continuidade ao trabalho já realizado anteriormente. Data Atividade Estado 10/04/2007 Aplicação distribuída usando RMI. Concluído 16/04/2007 Entrega da proposta de trabalho. A validar 16/04/2007 Fazer Contato com Desenvolvedor do JACA. Concluído 30/04/2007 Alterar Jaca para injetar falhas em RMI. A realizar 01/05/2007 Melhorar e complementar artigo com base em novas referências A realizar 07/05/2007 Analizer Projeto com Prof. Aldri. A eealizar 15/05/2007 Descrever conclusões Sobre testes realizados. A realizar Tabela 1. Cronograma de Atividades.

7. Conclusão O artigo tem intensão de apresentar uma solução para injeção de falhas na arquitetura de sistemas distribuídos baseados em RMI. trabalhos publicados anteriormente não implementaram está solução para arquitetura RMI mas com base no estudo de Martins, E. [Gabriela J.; Regina O. M.; Taisy S.; Martins 2004], podemos afirmar que possivel implementar a proposta descrita neste artigo. Referências Carreira, J. e Silva, J. G. (1998). Why do some (weird) people inject faults? acm sigsoft. In Software Engineering Notes. Volume 23, Número 1, pp. 42-43. Janeiro 1998. Chiba, S. (1998). Javassist - a reflection-based programming wizard for java. In Proc. of the ACM OOPSLA 98. Outubro, 98. Chiba, S. (2004). Javassist: Java bytecode engineering made simple java. In Developerś Journal. vol. 9, issue 1, January 8, 2004. Chiba, S. (2006). Javassist. url: http://www.csg.is.titech.ac.jp/ chiba/javassist/ acessado em 20/04/2007. Deitel, H. M. (2004). Java, como Programar. Bookman, 4 edition. Gabriela J.; Regina O. M.; Taisy S.; Martins, E. (2004). Validando sistemas distribuídos desenvolvidos em java utilizando injeção de falhas de comunicação por software. In SBRC 2004. Hsueh, M. T. T. I. R. (1997). Fault injection techniques and tools. In IEEE Computer. Volume 30, Número 4, pp. 75-82.Abril 1997. Leme, N.G.M. e Martins, E. R. e. C. (2001). A software fault injection pattern system. In Proc. of the IX Brasilian Symposium on Fault-Tolerant Computing. Florianópolis,SC, Brasil, Març01, pag99-113. Maes, P. (1987). Concepts and experiments in computational reflection. In Proceeding of OOPSLA 1987. Orlando,Estados Unidos,outubro 1987. Regina O. M., Martins, E. (2003). Jaca a software fault injection tooll. In DNS 2003. Schmidt, D. C. (1995). Using design patterns to develop reusable object-oriented communication software. In Communications of the ACM. v. 38(10), pp. 65-74. Outubro 1995. Silveira, F. F. (2003). Ferramenta de apoio ao teste de aplicações java baseada em reflexão computacional. In Disponível em: http://www.inf.ufrgs.br/pos/semanaacademica/semana2000/fabiosilveira. Acesso em: 20 set. 2003. Spec, J. (2007). Java Especification. url: http://java.com.sun/ acessado em 10/04/2007.

Voas, J. (1997). Software fault injection: Growing safer system. In Proceedings of IEEE Aerospace Conference 1997. v.2, pp.551-561.aspen, Estados Unidos. Fevereiro 1997.