SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Integração de Frameworks de Objetos
               Prevalecentes, Distribuídos, Robustos e
                                 Livres




Nelson Moraes Sozinho, João Augusto G. de Queiroz e
                Flávio J. M. Coelho
Roteiro
 Introdução

 Prevalência de Objetos
    Prevayler

 Distribuição de Objetos
    JacORB

 Testes de Objetos
    JUnit

 Protótipo
    Diagrama de pacotes
    Ambiente


 Conclusão
Introdução
 Conflitos entre paradigmas
   Bancos de dados relacionais
   Orientação a objetos

 Solução:
   Uso de Frameworks
     Conjunto de classes cooperantes para a construção de
     projetos reutilizáveis, ditando arquitetura do sistema.
   Exemplo: Framework de persistência (JDO, Hibernate,
   EJB).
Quebra de encapsulamento dos atributos.
Necessidade de gerar mais um diagrama.
Não é adequado para aplicações que necessitam de desempenho.
Introdução
 Alternativa:
   Conceito de Prevalência.
   Framework Prevayler

 Requisitos Adicionais:
   Distribuição
   Interoperabilidade
   Robustez

 Necessidade de integração
Objetivos
Apresentar os principais conceitos e resultados
obtidos com a integração de frameworks:
  Prevalência
  Distribuição
  Testes


Propósito
  Verificar viabilidade técnica de se ter uma infra-
  estrutura de software livre e robusta.
Prevalência de
   Objetos
Prevalência de Objetos
 Conceito idealizado por Klaus Wuestefeld.
    Quebra de paradigmas

 Prevayler: Infra-estrutura de classes para armazenamento de
 objetos em memória.
    Suporte a transações
    Balanceamento de carga
    Tolerância a falhas

 Utiliza padrões de projetos (design patterns) para manipulação de
 objetos.
      Efetuar transações.
        GoF Command
Prevayler – Serialização e Snapshot

 Serialização de Objetos
   Processo de transformação dos objetos em seqüência de bytes.
   Torna possível operações feitas sobre os objetos prevalecentes.
   Em Java: Implementar a interface java.io.Serializable


 Snapshot
   “Fotografia” armazenada em disco de todos os objetos
   presentes na memória.
   Ao iniciar um sistema prevalecente, todas as transações são
   executadas, restaurando o estado anterior do sistema.
Prevayler – Forma de Acesso
Visão geral de um sistema prevalente
Prevayler - Transações
 Interfaces de Transações
   org.prevayler.Transaction
     Execução da transação em um sistema
     prevalente.

   org.prevayler.TransactionWithQuery
     Execução transação, sendo retornado o objeto
     (em caso de sucesso) para a confirmação da
     operação.
Prevayler - Transações
Prevayler - Replicação
          Sistemas Distribuídos
             Introduzir Redundâncias

          Replicação
             Redundância

          Redundâncias em Grupos
             Balanceamento de Carga
Distribuição de
   Objetos
Distribuição de Objetos – Especificações
  Middleware:
    Camada intermediária
    Interfaces para resolução
     de problemas de
     distribuição.

 Tecnologias
    RMI – SUN
    COM/DCOM – Concorrente
    CORBA - OMG
Objetos Distribuídos -
 Arquitetura interoperável e heterogênea

 Modelo integrador COM (Core Object Model)
   Definição da arquitetura ORB.
   Inclusão de uma linguagem de definição de interfaces (IDL)

 Padrão de comunicação de objetos.
   Interação
   Transparência de localização      module saudacao {
                                         interface Ola {
   Ambiente NÃO PROPRIETÁRIO                 string ola_simples();
                                             wstring ola_param( in wstring msg );
                                         };
                                     };
Objetos Distribuídos -
  Mapeamento para diversas linguagens Através da IDL
Objetos Distribuídos

   ORB Open Source

   Desenvolvido na Universidade de Berlim

   Licenciado sobre GNU/GPL

   100% Java

   Flexibilidade de configuração através de arquivos.

   GUIs de monitoração de serviços

   Características da versão CORBA 3.0
       Passagem de parametros por cópia.
Testes
  de
Objetos
Testes de Objetos
Requisitos

   Auxiliar o processo de integração.


   Necessidade de um framework de testes com suporte para a
 linguagem Java
      Testes unitários


   Open Source

   Garantir a robustez final da infra-estrutura
Testes de Objetos

  Conjuto de classes que possibilitam a automação de
testes.
    Descarta o processo de escrita de códigos de saída.

 Projetado por Erick Gamma e Kent Beck.

 Distinção de tipos de erros.

 Fortemente baseado em padrões de projetos (Design
Patterns).
Test
                                                                      Composite: Component

                                              run(TestResult)




           Command          TestCase                            TestSuite         Composite

                            run(TestResult)                     run(TestResult)
          Template Method
                                                                addTest(Test)
                            runTest()
                            setUP()
    TestResult              tearDown()                   Composite: Leaf

                            fName                    Plug Pluggable Selector
Colleting Parameter




                            runTest()                     Adapter(Class)
Integração de
 Frameworks
Protótipo
Distribuição Slackware 9.1

Ambiente de desenvolvimento: Eclipse

Versão do Prevayler: 2.0.1
    Dificuldade em obter documentação formal
        Engenharia reversa (Diagrama de Classes e Pacotes)
    Testes de prevalência

Versão do JacORB: 2.2
    Testes de chamadas remotas efetuando transações.
    Oferece uma série de serviços encontradas em ORBs comerciais.

JUnit: 3.2
Engenharia Reversa – Diagrama de Pacotes (Prevayler)
Engenharia Reversa – Diagrama de
Classes
Testes
Aplicação de Testes:
Scalability
  Scalability: Contêm classes que
  proporcionam ações sobre o
  repositório de dados.

  JDBC: Interface de conexão de
  aplicações Java entre SGDBs.

  Classes contendo as tarefas a
  serem executadas sobre os
  Objetos Prevalentes.
Testes
   Número de Objetos
      100.000 - Ok
      1.000.000 - Ok
      10.000.000 - Ok
      20.000.000 – Falha
          Quantidade de memória insuficiente.
          Swap afeta drasticamente o desempenho da aplicação

Somatória dos Testes (Operações p/s)
JacORB – Funcionalidades
 Servidor de Nomes
   NS
        Localização de objetos através de nomes.
        Obter referências usando o nome.


 Configuração
   Arquivo de configuração (Indicação do servidor de nomes)
        ORBInitRef.NameService=corbaloc::10.0.0.1:38693/home/nelson/NS_Ref


 Repositório de Implementação
   Registro das implementações de objetos CORBA existentes no
   domínio.
– Distribuição
    Servidor de Nomes do JacORB
Protótipo
Funcionalidades clássicas de um banco.
  Saques, depósitos, inclusão e remoção de contas.

Uso de Design Patterns:
  GoF Mediator
  GoF Façade

Distribuição com JacORB e Prevalência com Prevayler

Aplicação de Testes com JUnit
  Efetuar testes unitário em cada classe gerada
  Efetuar testes unitários sobre o ambiente distribuído
Protótipo
Processo de Armazenamento
Protótipo - Transações
Protótipo – Distribuição

Iniciar o Servidor AplServidor
Registrar os objetos no
servidor de nomes
    Facade
    Conta
    Cliente
    Endereco
Protótipo – Distribuição
  JacORB Name Manager
Protótipo - Cliente
Protótipo - Testes
 Testes efetuados sobre as principais
 classes
   FacadeDistribuido
   GestaoPrevalenciaMediator


 Objetos transmitidos através do ORB
   Efetuar a prevalência
   Confirmação através de testes bem sucedidos
Protótipo - Testes
 Testes executados sobre o FacadeDistribuido
Protótipo - Testes
 Testes executados sobre o GestaoPrevalenciaMediator
Conclusão

 A integração das duas camadas mostrou-se
 viável através de uma infra-estrutura de
 software alternativa e aberta.

 Garantia da robustez com testes unitários.

 Proporciona um ambiente extensível a diversas
 plataformas compatíveis com CORBA.
Referências Bibliográficas

 Beck, K e Gamma, E. (2004), “JUnit Cookbook”, www.junit.org


 Gamma, E., Helm, R., Johnson, R. e Vlissides, J. (2000), “Padrões de
 Projetos – SoluçõesReutilizáveis de Software Orientado a Objetos”, Ed.


 JacORB (2003), “JacORB Programming Guide”, www.jacorb.org.


 Vilela, C. E. (2002), “An Introduction to Object Prevalence”, IBM
 Developer Works – Agosto.
Integração de Frameworks de Objetos Prevalentes Distribuidos,
                    Robustos e Livres




                         Obrigado...



     Flávio J. M. Coelho, João Augusto G. de Queiroz e Nelson Sozinho

Contenu connexe

Similaire à Integração de frameworks de objetos prevalentes, distribuídos, robustos e livres

001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma javaJunior Souza
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Javaelliando dias
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoÉberli Cabistani Riella
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
Merlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginasMerlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginasMarcelo Mrack
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareEdison Moreira
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersElias Nogueira
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"sbcars
 

Similaire à Integração de frameworks de objetos prevalentes, distribuídos, robustos e livres (20)

001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Apache e Java
Apache e JavaApache e Java
Apache e Java
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
PlayFramework
PlayFrameworkPlayFramework
PlayFramework
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Merlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginasMerlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginas
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do Software
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
 
Java 01
Java 01Java 01
Java 01
 

Integração de frameworks de objetos prevalentes, distribuídos, robustos e livres

  • 1. Integração de Frameworks de Objetos Prevalecentes, Distribuídos, Robustos e Livres Nelson Moraes Sozinho, João Augusto G. de Queiroz e Flávio J. M. Coelho
  • 2. Roteiro Introdução Prevalência de Objetos Prevayler Distribuição de Objetos JacORB Testes de Objetos JUnit Protótipo Diagrama de pacotes Ambiente Conclusão
  • 3. Introdução Conflitos entre paradigmas Bancos de dados relacionais Orientação a objetos Solução: Uso de Frameworks Conjunto de classes cooperantes para a construção de projetos reutilizáveis, ditando arquitetura do sistema. Exemplo: Framework de persistência (JDO, Hibernate, EJB).
  • 4. Quebra de encapsulamento dos atributos. Necessidade de gerar mais um diagrama. Não é adequado para aplicações que necessitam de desempenho.
  • 5. Introdução Alternativa: Conceito de Prevalência. Framework Prevayler Requisitos Adicionais: Distribuição Interoperabilidade Robustez Necessidade de integração
  • 6. Objetivos Apresentar os principais conceitos e resultados obtidos com a integração de frameworks: Prevalência Distribuição Testes Propósito Verificar viabilidade técnica de se ter uma infra- estrutura de software livre e robusta.
  • 7. Prevalência de Objetos
  • 8. Prevalência de Objetos Conceito idealizado por Klaus Wuestefeld. Quebra de paradigmas Prevayler: Infra-estrutura de classes para armazenamento de objetos em memória. Suporte a transações Balanceamento de carga Tolerância a falhas Utiliza padrões de projetos (design patterns) para manipulação de objetos. Efetuar transações. GoF Command
  • 9. Prevayler – Serialização e Snapshot Serialização de Objetos Processo de transformação dos objetos em seqüência de bytes. Torna possível operações feitas sobre os objetos prevalecentes. Em Java: Implementar a interface java.io.Serializable Snapshot “Fotografia” armazenada em disco de todos os objetos presentes na memória. Ao iniciar um sistema prevalecente, todas as transações são executadas, restaurando o estado anterior do sistema.
  • 10. Prevayler – Forma de Acesso Visão geral de um sistema prevalente
  • 11. Prevayler - Transações Interfaces de Transações org.prevayler.Transaction Execução da transação em um sistema prevalente. org.prevayler.TransactionWithQuery Execução transação, sendo retornado o objeto (em caso de sucesso) para a confirmação da operação.
  • 13. Prevayler - Replicação Sistemas Distribuídos Introduzir Redundâncias Replicação Redundância Redundâncias em Grupos Balanceamento de Carga
  • 14. Distribuição de Objetos
  • 15. Distribuição de Objetos – Especificações Middleware: Camada intermediária Interfaces para resolução de problemas de distribuição. Tecnologias RMI – SUN COM/DCOM – Concorrente CORBA - OMG
  • 16. Objetos Distribuídos - Arquitetura interoperável e heterogênea Modelo integrador COM (Core Object Model) Definição da arquitetura ORB. Inclusão de uma linguagem de definição de interfaces (IDL) Padrão de comunicação de objetos. Interação Transparência de localização module saudacao { interface Ola { Ambiente NÃO PROPRIETÁRIO string ola_simples(); wstring ola_param( in wstring msg ); }; };
  • 17. Objetos Distribuídos - Mapeamento para diversas linguagens Através da IDL
  • 18. Objetos Distribuídos ORB Open Source Desenvolvido na Universidade de Berlim Licenciado sobre GNU/GPL 100% Java Flexibilidade de configuração através de arquivos. GUIs de monitoração de serviços Características da versão CORBA 3.0 Passagem de parametros por cópia.
  • 20. Testes de Objetos Requisitos Auxiliar o processo de integração. Necessidade de um framework de testes com suporte para a linguagem Java Testes unitários Open Source Garantir a robustez final da infra-estrutura
  • 21. Testes de Objetos Conjuto de classes que possibilitam a automação de testes. Descarta o processo de escrita de códigos de saída. Projetado por Erick Gamma e Kent Beck. Distinção de tipos de erros. Fortemente baseado em padrões de projetos (Design Patterns).
  • 22. Test Composite: Component run(TestResult) Command TestCase TestSuite Composite run(TestResult) run(TestResult) Template Method addTest(Test) runTest() setUP() TestResult tearDown() Composite: Leaf fName Plug Pluggable Selector Colleting Parameter runTest() Adapter(Class)
  • 24. Protótipo Distribuição Slackware 9.1 Ambiente de desenvolvimento: Eclipse Versão do Prevayler: 2.0.1 Dificuldade em obter documentação formal Engenharia reversa (Diagrama de Classes e Pacotes) Testes de prevalência Versão do JacORB: 2.2 Testes de chamadas remotas efetuando transações. Oferece uma série de serviços encontradas em ORBs comerciais. JUnit: 3.2
  • 25. Engenharia Reversa – Diagrama de Pacotes (Prevayler)
  • 26. Engenharia Reversa – Diagrama de Classes
  • 27. Testes Aplicação de Testes: Scalability Scalability: Contêm classes que proporcionam ações sobre o repositório de dados. JDBC: Interface de conexão de aplicações Java entre SGDBs. Classes contendo as tarefas a serem executadas sobre os Objetos Prevalentes.
  • 28. Testes Número de Objetos 100.000 - Ok 1.000.000 - Ok 10.000.000 - Ok 20.000.000 – Falha Quantidade de memória insuficiente. Swap afeta drasticamente o desempenho da aplicação Somatória dos Testes (Operações p/s)
  • 29. JacORB – Funcionalidades Servidor de Nomes NS Localização de objetos através de nomes. Obter referências usando o nome. Configuração Arquivo de configuração (Indicação do servidor de nomes) ORBInitRef.NameService=corbaloc::10.0.0.1:38693/home/nelson/NS_Ref Repositório de Implementação Registro das implementações de objetos CORBA existentes no domínio.
  • 30. – Distribuição Servidor de Nomes do JacORB
  • 31. Protótipo Funcionalidades clássicas de um banco. Saques, depósitos, inclusão e remoção de contas. Uso de Design Patterns: GoF Mediator GoF Façade Distribuição com JacORB e Prevalência com Prevayler Aplicação de Testes com JUnit Efetuar testes unitário em cada classe gerada Efetuar testes unitários sobre o ambiente distribuído
  • 34. Protótipo – Distribuição Iniciar o Servidor AplServidor Registrar os objetos no servidor de nomes Facade Conta Cliente Endereco
  • 35. Protótipo – Distribuição JacORB Name Manager
  • 37. Protótipo - Testes Testes efetuados sobre as principais classes FacadeDistribuido GestaoPrevalenciaMediator Objetos transmitidos através do ORB Efetuar a prevalência Confirmação através de testes bem sucedidos
  • 38. Protótipo - Testes Testes executados sobre o FacadeDistribuido
  • 39. Protótipo - Testes Testes executados sobre o GestaoPrevalenciaMediator
  • 40. Conclusão A integração das duas camadas mostrou-se viável através de uma infra-estrutura de software alternativa e aberta. Garantia da robustez com testes unitários. Proporciona um ambiente extensível a diversas plataformas compatíveis com CORBA.
  • 41. Referências Bibliográficas Beck, K e Gamma, E. (2004), “JUnit Cookbook”, www.junit.org Gamma, E., Helm, R., Johnson, R. e Vlissides, J. (2000), “Padrões de Projetos – SoluçõesReutilizáveis de Software Orientado a Objetos”, Ed. JacORB (2003), “JacORB Programming Guide”, www.jacorb.org. Vilela, C. E. (2002), “An Introduction to Object Prevalence”, IBM Developer Works – Agosto.
  • 42. Integração de Frameworks de Objetos Prevalentes Distribuidos, Robustos e Livres Obrigado... Flávio J. M. Coelho, João Augusto G. de Queiroz e Nelson Sozinho