Arquivo de outubro, 2010

AOPT – Ferramenta de persistência do Allan

Posted in Atividades profissionais on 19/10/2010 by Allan Taborda

Desde 2007, eu estava com um projeto em mente, mas que, até então, eu estava relutando em iniciá-lo e deixando-o indefinidamente para depois. É um projeto de uma ferramenta de persistência de dados em Java (que terá versão para C++ e outras linguagens no futuro) chamada AOPT (Allan’s Object Persistence Tool, ou ferramenta de persistência de objetos do Allan). Eu já tinha em mente mais ou menos como ele iria ser, embora alguns detalhes eu não tinha certeza de como seria feito Cheguei a citar a intenção de desenvolver o AOPT no meu TCC que fiz para a faculdade, ainda em 2007.

No último fim de semana, tive um momento de inspiração e tomei coragem para implementar o AOPT e definir o que estava faltando na especificação deste. Em pouco tempo, eu já tinha um código funcional com a primeira parte do AOPT já implementada, que salvava e recuperava dados em XML, de três formas diferentes: o XML bruto gravado no disco, o XML compactado com GZip e também gravado no disco e o XML armazenado num banco de dados relacional (eu usei o HSQLDB, mas pode ser qualquer banco).

O AOPT consiste numa ferramenta de persistência que salva os dados em arquivos XML (um arquivo para cada tabela/objeto) e que permite a recuperação desses dados posteriormente. Diferente da proposta inicial, que previa que apenas objetos pudessem ser persistidos, o AOPT permite também a inserção direta dos dados em mapas do tipo chave-valor (usando a interface java.util.Map, nesta implementação em Java). Na verdade, os objetos são traduzidos pelo AOPT em mapas chave-valor e então estes são salvos em XML. O salvamento dos dados pode ser feito de imediato (ao inserir um objeto), com uma chama explícita ao método de salvar todos os objetos ou de tempos em tempos (como no Prevayler). E a recuperação dos dados pode ser feita utilizando APIs semelhantes às do banco de dados orientado a objetos Db4o e das ferramentas de persistência Prevayler e Perola, permitindo, dependendo de como o AOPT estiver configurado, buscar os dados a partir dos XMLs salvos ou a partir da memória (o chamado modo de prevalência de dados, à la Perola e Prevayler).

Ou melhor, o AOPT consistirá nisso após tudo o que eu desejar implementar estiver implementado, por enquanto, há só um esqueleto básico funcional do AOPT. No futuro, eu implementarei mais algumas partes essenciais e então eu hospedarei o AOPT no Sourceforge.

Mais para o futuro, quando eu souber programar em C++ (estou estudando por conta própria a linguagem C, e depois estudarei C++), implementarei o AOPT nesta linguagem. O AOPT em C++ talvez não terá todos os recursos da versão Java (os que são específicos dessa linguagem, como o mapeamento automático de objetos, visto que isto faz uso de reflections, a não ser que exista reflections no C++), mas implementará, pelo menos, a especificação básica do AOPT e terá compatibilidade de banco de dados com a versão Java, visto que o formato XML é independente de linguagem, bastando um parser disponível para a linguagem desejada).

É possível que o AOPT seja usado na camada de persistência do Robowebert Player, o player de áudio que estou desenvolvendo e que já citei aqui neste blog. Vale lembrar (isto se eu já tiver falado disso aqui no blog, nos posts que fiz sobre o player) que o Robowebert Player permitirá a escolha de como será feita a persistência dos dados, se será com Db4o, banco relacional ou outra forma, como o AOPT.

Assim que tiver mais notícias acerca do desenvolvimento do AOPT, eu postarei aqui neste blog.

Dia 25, estarei mudando de emprego, a fim de obter uma maior experiência profissional, além de começar a trabalhar com carteira assinada. Estou bastante entusiasmado com esse meu novo emprego, que, assim como anterior, também fica situado na capital paulista e também é para ocupar um cargo de desenvolvedor Java.

Neste fim de semana, irei postar dois sonhos que tive no meu outro blog, o blog dos Sonhos do Allan.

Até o próximo post (ou o próximo post do outro blog)!