Integração de Frameworks de Objetos Prevalecentes, Distribuídos, Robustos e
Livres
Nelson Moraes Sozinho, João Augusto G. de Queiroz eFlá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
� 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.
Objetivos
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� Ambiente NÃO PROPRIETÁRIO
module saudacao {interface Ola {
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 p ara 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).
Template Method
Test
run(TestResult)
TestCase TestSuite
runTest()
fName
TestResult
run(TestResult)addTest(Test)
run(TestResult)runTest()setUP()tearDown()
Command Composite
Adapter(Class)
Composite: Leaf
Composite: Component
Plug Pluggable SelectorColleting Parameter
Integração de Frameworks
� 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
Protótipo
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
� 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
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çãoJacORB 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