quarta-feira, 26 de junho de 2013

NoSQL e Hibernate - Será que vai dar samba?

NoSQL é a nova hype do momento, e todos estão aprendendo um pouco mais sobre novas formas de armazenamento. O termo foi introduzido por funcionários da Rackspace que queriam organizar um evento para discutir Bancos de Dados distribuídos. A idéia era discutir sobre Bancos de Dados que não se preocupam pelo ACID(Atomicidade, Consistência, Isolamento e Durabilidade).
Neste post, irei mostrar um pouco sobre adotar um banco de dados nosql em sua aplicação OpenShift utilizando java e um projeto recente da família Hibernate: o Hibernate OGM.

OpenShift e NoSQL

Desde o lançamento do OpenShift ele oferece três Bancos de Dados como repositório de dados para suas aplicações. Dentre eles, há 1 Banco de Dados NoSQL: O MongoDB.
O MongoDB é um Banco de Dados NoSQL que utiliza o conceito de armazenamento baseado em documentos, ou seja, ele guarda as informações em coleções e expressando o dado em um formato JSON, ou como o próprio site do MongoDB diz: um armazenamento orientado a documentos.

Rockmongo

Assim como o MySQL e o PostgresSQL possuem interfaces de gerenciamento na web (o phpMyAdmin, por exemplo), o MongoDB também possui uma interface de gerenciamento: o Rockmongo.

Hibernate OGM

O Hibernate OGM (Object Grid Mapping) é um subprojeto do Hibernate que permite utilizar os mesmos conceitos do ORM(Object Relational Mapping) em Bancos de Dados NoSQL. Assim podemos mapear objetos e persisti-los no Banco de Dados sem precisar conhecer as formas de inserir esses dados.

Como fazer deploy de uma aplicação Hibernate OGM no OpenShift?

Para dar início, vamos criar uma aplicação Java no OpenShift e adicionar os cartridges MongoDB e Rockmongo:
$ rhc app create -t jbossas-7 -a nosql
$ rhc app add-cartridge mongodb-2.2
$ rhc app add-cartridge rockmongo-1.1
Para esse post, eu utilizei o repositório do Github do próprio OpenShift com o projeto kitchensink (um pequeno CRUD muito utilizado para criar quickstarts para o JBoss) adaptado para utilizar o Hibernate OGM. Você pode encontrar o projeto em:

https://github.com/openshift/openshift-ogm-quickstart

Agora, iremos adicionar a URL do repositório Github em nosso projeto OpenShift:

$ cd nosql
$ git remote add upstream -m master git://github.com/openshift/openshift-ogm-quickstart.git
$ git pull -s recursive -X theirs upstream master
$ git push
Agora, basta acessar o endereço: http://nosql-${namespace}.rhcloud.com e ver a aplicação rodando:

Aplicação NoSQL com Hibernate OGM e MongoDB
Como instalamos também o Rockmongo, você pode acessar utilizando o endereço http://nosql-${namespace}.rhcloud.com/rockmongo:

Aplicação Rockmongo

Considerações

  • Apesar de utilizar Hibernate EntityManager e com isso poder fazer uso de JPA, infelizmente ele não escaneia automaticamente pelas classes marcadas com @Entity. Você terá que referenciá-las no arquivo persistence.xml, senão não irá funcionar.
  • O projeto utilizado também faz uso de Hibernate Search para busca de dados, o que possibilita utilizar Full-Text Search em suas aplicações
  • Caso tenha feito o deploy do projeto mas não tenha encontrado as coleções da aplicação no Rockmongo, não se preocupe. O MongoDB (ou o Hibernate OGM, não entendi o processo nesse caso) só cria a coleção quando o primeiro registro é persistido.
Bom pessoal, é isso. Eu tive um bocado de trabalho para fazer o build por conta dessas considerações e também por conta da build Maven. Quem precisar de ajuda, posta um comentário que eu procuro ajudar o mais rápido possível.

Nenhum comentário:

Postar um comentário