Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki
Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável logicamente com o uso da camada de prevalência de objetos. Sua primeira implementação foi disponibilizada em novembro de 2001 como um projeto open-source. Atualmente, o Prevayler está na versão 2.02.006: http://sourceforge.net/project/showfiles.php?group_id=36113
Framework Solução para um conjunto de problemas em comum, com uso de classes e interfaces, que disponibilizam objetos com capacidades de capturar funcionalidades comuns a várias aplicações.
O que é Prevalência? Prevalência x Persistência Um objeto persistente pode continuar existindo mesmo após o encerramento da execução do programa que o criou. Persistência é uma característica dos sistemas informatizados com utilização de banco de dados relacionais Em um sistema dito prevalente, todos os objetos são armazenados em memória RAM.
Como o Prevayler Funciona? Em intervalos regulares (e no momento de fechar a aplicação) todos os objetos em memória são serializados para o disco; isso é chamado de snapshot. Todas as manipulações de objetos são registrados num log de comandos, o qual é escrito imediatamente em disco, via serialização.
Serialização de Objetos É o processo de escrever o estado (dados) de um objeto para uma seqüência de bytes. A serialização é útil para armazenar o estado de um objeto num repositório persistente, por exemplo arquivo.
Arquivos Serializados
Arquivos Serializados
Desserialização de Objetos Uma vez que o estado de um objeto esteja armazenado num arquivo, pode-se usar o processo de desserialização para restaurar o estado do objeto em memória.
Snapshot O Snapshot é um printscreen do estado total do sistemas, criado de tempos em tempos. Busca os objetos em memória e salva em disco como se fosse um sistema de backup.
Transações Serializadas As transações serializadas são operações realizadas nos objetos em memória e que são armazenadas em arquivos log antes de serem executadas. Quando uma aplicação é reiniciada, as seguintes atividades acontecem: Desserialização do último Snapshot (se houver). Desserialização e execução das transações seriadas após o último Snapshot. As transações dependem de 4 propriedades (ACID): Atomicidade Consistência Isolamento Durabilidade
Transações Serializadas Aplicação executada pela primeira vez usando o Prevayler:
Transações Serializadas Quando a aplicação é reiniciada usando o Prevayler, os objetos voltam para a memória em seu estado original:
Vantagens Velocidade é muito mais rápida comparada aos SGBD pois todos os objetos estão na memória RAM; 9.000 vezes mais rápidas do que no Oracle com JDBC 3.000 vezes mais rápidas do que no MySQL com JDBC Simplicidade sua arquitetura é baseada fundamentalmente em conceitos de serialização Independência o programador tem independência para desenvolver sua aplicação (isso pode ser uma desvantagem)
Desvantagens Utilização massiva dos recursos computacionais é necessária uma boa CPU para que a velocidade de execução das transações seja a maior possível. Maior esforço no planejamento da aplicação o programador deve implementar mecanismos que por default já estão implementados em alguns sistemas SGDBs.
Conclusão O Prevayler é uma ótima solução para aplicações nas quais o tempo de resposta é crítico. A simplicidade na implementação de sistemas utilizando sua API, que utiliza conceitos simples de serialização, também é uma grande vantagem. O correto funcionamento da aplicação é de inteira responsabilidade do programador. O Prevayler não é uma opção muito atraente para bases de dados muito grandes ou que crescem rapidamente.
Perola PEROLA - Persistence Object Layer Existem duas versões disponíveis: Perola Full e Perola Lite O Projeto Perola utiliza recursos oferecidos pela POA (Programação orientada a Aspectos) permitindo detectar mudanças no estado dos objetos da camada de negócio e transferi-los automaticamente para uma camada especializada em armazenamento persistente, que captura as informações do objeto e salvando-as no formato XML.
Programação Orientada a Aspectos "Quando a Orientação a Objetos apareceu, causou um efeito dramático em como os softwares eram desenvolvidos. Os desenvolvedores podiam visualizar sistemas como grupos de entidades e o relacionamento entre estas entidades, permitindo a construção de sistemas mais complexos e em um menor tempo de desenvolvimento... Um problema da programação Orientada a Objetos é que é essencialmente estática, e uma mudança nos requisitos pode causar um profundo impacto no desenvolvimento. A programação Orientada a Aspectos complementa a programação Orientada a Objetos permitindo ao desenvolvedor modificar dinamicamente o modelo estático da Orientação a Objetos para criar um sistema que pode atender a novos requisitos. Como objetos no mundo real podem mudar seus estados durante seu ciclo de vida, uma aplicação pode adotar novas características conforme é desenvolvida."
Perola Full Perola Lite Perola Full utiliza recursos POA para automaticamente transferir objetos da camada de negócio para a camada de armazenamento persistente, cada vez que mudanças no estado do objeto são detectadas. É necessário possuir um compilador de Aspectos, como o AspectJ, instalado para poder utilizar esta versão do Perola Perola Lite permite ao programador determinar em quais métodos os objetos da camada de negócios serão armazenados. Não é necessário o uso de um compilador de Aspectos
Sistema Agenda e Sistema DiskPizza O Sistema agenda é um exemplo de aplicação utilizando o Perola Full O Sistema DiskPizza é um exemplo de aplicação utilizando o Perola Lite
Como os Objetos são armazenados Perola Full Exemplo - Sistema Agenda O pacote perola.util possui uma classe ArrayList, pois as classes de coleções da API do Java devem ser reescritas para a interceptação de seus métodos pelo compilador de Aspectos O Perola possui dois Drivers a disposição, e o usado para este exemplo é o DriverPerolaForFileSystem, que grava cada objeto em um arquivo.xml dentro de uma pasta destinada aos dados do sistema (neste exemplo, esta pasta está definida como Dados
Como os Objetos são armazenados Perola Full Exemplo - Sistema Agenda O Sistema Agenda é dividido em camadas. Observando a estrutura, é possível identificar os pacotes da camada de apresentação e de negócio, bem como a persistência sendo representada pelo pacote perola
Com o uso do DriverPerolaForFileSystem, os objetos são armazenados em arquivos conforme mostra a figura a seguir
Como os Objetos são armazenados Perola Lite Exemplo Sistema DiskPizza O desenvolvedor deve identificar quais métodos realizam alterações nos atributos do objeto e assim inserir uma chamada ao método que é capaz de persisti-lo O Driver utilizado para este Sistema foi o DriverPerolaForJDBC
Comparando a Classe Contato
Curiosidade - Drivers O Perola dispõe de dois drivers: DriverPerolaForFileSystem: faz a gravação de cada objeto em um arquivo separado no formato XML DriverPerolaForJDBC: Permite armazenar os objetos fazendo uso de um Banco de Dados Relacional através da interface JDBC. Neste caso, haverá apenas uma tabela chamada Objects com os campos uid para armazenar a referência de cada objeto e contents para armazenar seu conteúdo também em formato XML
Considerações Finais É responsabilidade do Perola gravar e recuperar objetos da base persistente, sem necessidade de inserir código para isso. Outro ponto importante, é que não é necessária a preocupação com a realização de Snapshots, já que o Perola mantém uma base persistente dinâmica, refletindo exatamente a estrutura de objetos existentes na memória, pois, dependendo da quantidade de objetos existentes, tal tarefa (Snapshot) pode levar um tempo considerável. No Perola, isso não é necessário.
Referências Prevayler http://www.prevayler.org/wiki.jsp http://www.prevayler.org/upload/julien/prevayler_tutorial_pt.rtf http://www.javafree.com.br/forum/viewtopic.php?t=3922 http://www.javafree.com.br/forum/viewtopic.php?t=4297 Pérola Revista Mundo Java Número 14 Ano III http://perola.sourceforge.net/ http://www.lisha.ufsc.br/~guto/teaching/sce/ine5612-2001-/work/aop.htm http://www.mundooo.com.br/php/modules.php?name=news&file=article