Cv,dah uma lidinha no q vou colocar na monografia…tô meio sem inspiração,posso tah escrevendo um bando de m… derrepente…
.::::::::::::::::::::::Uma Breve Introdução a Prevalência De Objetos:::::::::::::::::::::::.
Durante mais de trinta anos,a principal forma de persistência de dados no mundo da informática foi direcionada pelo modelo de banco de dados relacionais(BDRs), que organiza seus dados em relações,onde cada relação pode ser vista como uma simples tabela,e uma coluna corresponde a atributos da mesma(ou campos da tabela),e as linhas são os elementos dessa relação(ou registros dessa tabela),também conhecidas por tuplas.
Essa estrutura de fácil acesso e esse modelo de organização de dados em tabelas,permitiu uma forte popularização do modelo relacional,assim como a padronização por meio de uma linguagem de consulta estruturada(SQL-Struture Query Language),da forma de como manipular esses dados e a forte base matemática nela embutida.
Com o passar dos anos,uma gama de linguagens de programação foi surgindo,novos ambientes,novas máquinas,com diversos recursos novos,e o outrora revolucionário modelo relacional foi ficando defasado em preencher lacunas criadas pelas novas necessidades do incessante(e metamórfico) mundo digital.
Nos anos 70,guardar(armazenar) dados era fundamental,haja vista que os mais modernos computadores não possuíam sequer alguns megas de disco rígido.Os BDRs preencheram essa lacuna muito bem,pois permitiam um modelo de fácil compreensão e asseguravam facilmente que seus dados seriam corretamente persistidos.Surgiram conceitos revolucionários como chave,que permitia diferenciar um registro de outro,e o modelo de entidade-relacionamento que estabelecia uma ligação entre as diversas tabelas existentes num Sistema de Bancos Relacionais.Naquele tempo,persistir a informação era o necessário,e garantir a integridade das informações,dava aos BDRs longa vida no mundo da informática,num universo que a cada 18 meses dobram a capacidade dos microprocessadores.
Como era esperado,esse modelo foi esgotando sua infinidade de recursos(que hoje se mostram escassos)e,novos modelos de organização e persistência de dados se fizeram necessários surgir.Novos paradigmas de persistência de dados surgiram não porque os bancos ficaram necessariamente ultrapassados,mas sim porque a inportância da informação cresceu cada vez mais(já era grande),e a forma de como lidar com as mesmas se tornaram cada vez mais diversificadas e complexas.Um modelo baseado em consultas SQL não pode representar um modelo rico de objetos,como os representados em linguagens Orientadas a Objetos,e mesmo simular isso,mostra-se estremamente trabalhoso e ineficiente.
Representar dados de objetos em tabelas é possível(por meio de ferramentas de mapeamento Objeto-Relacional),mas não é indicado,pois dará uma visualização plana demais de um modelo orientado a objetos.Prevalecer objetos,permite persistir os objetos oriundos de um programa feito em linguagem OO,mantendo os atributos desses objetos com o encapsulamento definidos originariamente para os mesmos em sua origem.Detalhe:a prevalência persiste os objetos em RAM(Memória Principal),permitindo acesso aos mesmos numa velocidade muito superior aos persistidos diretamente em disco,mantendo a transparência necessária aos seus objetos.
A prevalência de objetos(em Java) evita o mapeamento objeto-relacional,geralmente feito por meio de XMLs,Strings SQL e arquivos que não sofrem um meio de compilação,gerando prováveis erros de execução por vezes difíceis de serem depurados.Quando um Sistema apresenta poucas classes,os erros são facilmente rastreáveis(em geral),mas em Sistemas com centenas de classes(ou mais),deixar cada uma dessas classes mapeadas em banco é necessário e a chance de erros cresce significativamente.Quando se altera o Banco,pode ser necessário(depende da aplicação) alterar cada uma dessas classes e seus respectivos mapeamentos.
Prevalência de objetos não é algo exclusivo da Linguagem Java,pois pode ser usada por qualquer linguagem que esteja habilitada a prover algum mecanismo de serialização ou escrever alguma forma de registro dos dados em disco existentes em ram(snapshots).Existem camadas de prevalência em distintas linguagens como Delphi,C# e Perl.
.::::::::::::::::::::::::::::Introdução ao Prevayler:::::::::::::::::::::::::::::::::::::::.
Prevayler é um framework que permite persistir objetos em RAM(1).Em outras palavras,é um mecanismo de prevalência feito para a plataforma Java.
Como é um sistema prevalente,seus dados são mantidos em RAM,e através de comandos(por meio do Prevayler) e objetos seriáveis(por meio de programação do desenvolvedor),toda a informação necessária a ser persistida é passada ao disco rígido(em logs de transacao e snapshots em disco).Como as manipulações de dados(consultas,inserções,exclusões) são feitas em código Java puro,a flexibilidade de API´s como java.util.Collection e Jakarta Commons Collections dão a liberdade necessária ao correto desenvolvimento orientado a objeto,além de uma simplicidade muito grande no código,sendo apenas necessário garantir que seus objetos de negócios(que serão persistidos) e suas respectivas transações sejam seriáveis e determinísticas permitindo que as mudanças nesses objetos de negócio sejam persistidas transparentemente, e recuperadas ao reiniciar a aplicação, serializando as mudanças em sequência(a chamada fila de serialização), e reaplicando estas em ordem, ao reiniciar a aplicação.Uma vez reiniciada a aplicação após sua finalização ou depois de uma falha no sistema,o sistema prevalente devolve o último estado salvo em um snapshot(se algum for tirado),e então lê os comandos criados em arquivos de log desde que o último snapshot foi tirado.
Algumas Vantagens do Prevayler:
-Simplicidade(Para quem conhece Java)
-Mantém a abordagem orientada a objetos pura em seu sistema.
-velocidade absurda comparado a um BDR(podendo ser milhares de vezes mais rapido).
-É a abordagem ideal de persistência quando todos os dados de um Sistema cabe na memória principal(RAM).
-É de código aberto,permitindo a um (bom)programador alterar seu código se necessário for para sua necessidade.
-É uma abordagem ideal para aplicações de única thread(sem concorrência),pois todas as modificações são executadas em série(devido a serialização).
-Facilita o reuso de software,pois não há abordagem mapeamento-relacional,dispensando administradores de banco de dados(uma camada de abstração a mais),menos
-permite usar um sistema profissional “limpo” de licenças de software,podendo utilizar uma plataforma Linux-Java,o que acarreta um alto custo-benefício em relação a sistemas
Algumas Desvantagens do Prevayler:
-Exige do programador um bom conhecimento da linguagem,pois exige que todos os controles de todas as transações necessárias sejam escritas(controle de índices,consultas,além da própria persistência em si).É simples,mas não é para amadores na linguagem Java.
-não é indicado quando seus objetos de negócio não são totalmente armazenáveis em memória(Base de dados muito maior que a RAM).
-Possui uma migração custosa(e trabalhosa) em sistemas que são dependentes demais de Banco de Dados e cuja velocidade de acesso não é fator significante.
-Um badblock pode inutilizar todo o log(Problema facilmente contornável com um espelhamento -RAID1-ou um servidor extra para redundância dos dados).
Considerações Finais:
O Prevayler é uma ótima opção para sistemas que dependam de velocidade de acesso a dados,e cuja base de dados não seja maior do que a RAM,ou legada a um banco(seria custosa a migração se a velocidade de acesso não é um grande diferencial).Caso um projeto que necessite de persistência de objetos ainda não foi iniciado,não deve ser descartada uma adoção de um sistema prevalente,pois corretamente projetada,apresentará um custo-benefício altíssimo.
Notas/Glossário:
API:Application Program Interface(interface de programação de aplicações)é um sistema de rotinas(instruções) que permite que vários programas se liguem entre si.
Serialização/Objetos seriáveis:São objetos que possuem a capacidade de serem integralmente lidos/gravados de(ou para) um fluxo de bytes(para o disco).Em Java a serialização permite que objetos e tipos primitivos possam ser encapsulados em um fluxo de bytes apropriado para o seu tipo,trafegando por uma rede ou um sistema de arquivos,visando facilitar seu armazenamento em disco e uma posterior manipulação.
determinísticos:Dada uma entrada de dados esperada em um método de um objeto de negócio no sistema,uma saída esperada deve ser dada(os erros devem ser facilmente detectáveis).
framework:conjunto de classes reunidas para uma finalidade em comum,geralmente prover alguma funcionalidade ou estabelecer algum padrão de desenvolvimento.
snapshot:tirar uma “fotografia” do sistema,ou seja,salvar todos os objetos em disco para evitar a re-execução dos arquivos de log num sistema prevalente.Pode ser feita em uma máquina diferente da que se executa o sistema para prevenir quebras e salvar os dados do sistema sem precisar o servidor principal entrar em modo de leitura(read-only).
(1)-O Prevayler não armazena os objetos na RAM,quem faz isso é a máquina virtual Java,ele é apenas um meio para permitir essa persistência em memória.
Tá legalzim Cv?Algum erro,ou algo a destacar q esqueci???Isso é soh para uma visão geral…por isso não entrei em detalhes de implementação e talz…