Este documento apresenta a integração de três frameworks de código aberto - Prevayler para prevalência de objetos, JacORB para distribuição de objetos e JUnit para testes de objetos - com o objetivo de verificar a viabilidade técnica de se ter uma infraestrutura robusta e livre. Os autores descrevem cada framework, mostram como integrá-los através de um protótipo de sistema bancário distribuído e testado, e concluem que a integração foi viável garantindo robustez e extensibilidade.
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.
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.
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.
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 );
};
};
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).
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
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.
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
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
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