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.

terça-feira, 18 de junho de 2013

Treinamento de MongoDB

A 10gen (empresa ligada ao MongoDB, um banco de dados NoSQL), em parceria com a EdX, criou uma série de treinamentos ao estilo MOOC (Massive Online Open Course).
Trata-se de treinamentos para quem quiser conhecer mais sobre o MongoDB e como utilizá-lo. Uma grande notícia é que eles estão criando cursos tanto para quem é desenvolvedor quanto para quem é DBA. Atualmente eles possuem 3 treinamentos:

  • MongoDB For Java Developers
  • MongoDB For Developers (Esse utilizando Python como linguagem)
  • MongoDB For DBAs

Somente os dois primeiros treinamentos estão em curso no momento, mas logo eles irão disponibilizar mais treinamentos. Para quem quiser conferir, basta criar um conta no site:

https://education.10gen.com/

E depois aplicar nos treinamentos já em andamento. Irei explorar um pouco sobre MongoDB num próximo post utilizando o novo módulo do Hibernate: O Hibernate OGM. Aguardem!

segunda-feira, 17 de junho de 2013

Novidades do OpenShift Online

Nesta semana está sendo realizado em Boston o Red Hat Summit, o maior evento que a Red Hat promove sobre suas tecnologias e sobre Open Source. Como em qualquer evento que uma grande empresa promove, sempre há lançamentos na véspera ou no período em que o evento ocorre, portanto eu quero apresentar algumas das novidades que foram apresentadas até agora para o OpenShift.

Downloadable Cartridges e outras tecnologias disponíveis

Uma das maiores funcionalidades para mim é a liberdade de utilizar linguagens e tecnologias no OpenShift. Java, Python, Perl, PHP e outras linguagens podem ser utilizadas e ainda por cima pode-se utilizar o famoso cartridge faça-você-mesmo(DIY, ou Do-It-Yourself). Além de linguagens, há também as tecnologias de backend (MySQL, PostgreSQL e MongoDB) e Jenkins.
Na nova versão do OpenShift (atualizado recentemente), você tem agora mais liberdade de escolha porém sobre qualquer tecnologia e linguagem. Isso se deve ao novo conceito chamado de Downloadable Cartridges, onde você pode apontar para o repositório git desse cartridge e o OpenShift irá baixar o código, preparar o ambiente e já apresentar um Hello World clássico daquela linguagem.

Uma aplicação Ceylon de exemplo rodando no OpenShift
Abaixo uma listagem das novas linguagens/tecnologias disponíveis:

API de criação de cartridges simplificada

Antes era possível ter acesso a API de criação de cartridges para assim a comunidade poder adicionar suas próprias tecnologias, porém infelizmente só era possível utilizar quem utilizava a versão da comunidade (OpenShfit Origin, falarei sobre ele em outro post). Além disso, a API era muito complexa e levava muito tempo para poder adicionar novas tecnologias.
Recentemente, a equipe do OpenShift lançou a segunda versão da API que facilitou bastante a criação de cartridges para o OpenShift, e também pode ser utilizado com o OpenShift Online com a nova funcionalidade de Downlodable Cartridges (ver seção anterior)
Você pode conferir mais informações no blog do OpenShift sobre como criar um cartridge no OpenShift:

https://www.openshift.com/blogs/introducing-the-openshift-cartridge-api-version-2

Caso alguém queira fazer um projeto de cartridge, tenho algumas sugestões e iniciei o desenvolvimento deles. A quem interessar, me mandem mensagens que eu passo maiores informações.

Silver Plan

We are open for business! Agora o OpenShift Online possui um plano pago para quem quiser ter um apoio do suporte da Red Hat e dispor de mais gears (unidade do OpenShift que limita memória e storage) para suas aplicações. A versão gratuita ainda está disponível e todos aqueles que ainda não possuem ainda podem criar suas contas gratuitas, ou ainda fazer um upgrade. Startups podem criar uma conta gratuita, avaliar a ferramenta e o ambiente e quando quiserem (ou perceberem que já precisam de mais recursos) podem fazer o upgrade.
Para quem quiser saber mais sobre o Silver Plan, pode verificar na página do OpenShift:

https://www.openshift.com/products/pricing

Infelizmente, o Silver Plan é restrito a EUA/Canadá mas fiquem atento às novidades. A equipe de desenvolvimento já está trabalhando para um plano no Brasil. \o/

Templates para criação do ambiente OpenShift Origin em Openstack

Para quem conhece o OpenShift sabe que ele é uma solução conhecida como PaaS (Platform-as-a-Service), mas há soluções Open Source no mercado que permite criar um IaaS (Infrastructure-as-a-Service) e assim criar um ambiente local de OpenShift dentro dele.
Uma dessas soluções é o Openstack, que é uma comunidade com um monte de empresas com o propósito de criar uma solução para IaaS. E para quem quiser instalar o OpenShift Origin (versão do OpenShift Online da comunidade), pode utilizar os scripts automatizados para provisionamento do ambiente OpenShift de forma automatizada. Você pode conferir em:

https://github.com/openstack/heat-templates/tree/master/openshift-origin

Bom, por hora são essas as novidades. Eu particularmente achei muit boa as novidades, principalmente os Downloadable Cartridges. E vocês, o que acharam?