De 0 a 100 com JRuby on GlassFish

O objetivo deste post é guiar você em sua primeira viagem com JRuby on GlassFish, partindo do zero e terminando com uma pequena aplicação JRuby on Rails rodando num servidor de aplicações GlassFish.

A idéia aqui não é explanar muito profundamente os produtos e assuntos relacionados, mas proporcionar um começo rápido e deixar fontes de pesquisa onde você poderá se aprofundar à medida que desejar.

Por que trabalhar com essa combinação?

A maioria das pessoas que trabalham com desenvolvimento sério de aplicações corporativas, grandes portais e sistemas complexos, que precisam de integração eficiente com sistemas em alta ou baixa plataforma, sabem que a Plataforma Java é excelente para isso.

A linguagem Java, por sua vez, todos nós também sabemos que é um tanto verbosa, isto é verdade, mas ainda assim é muito poderosa; e a combinação desse poder somado à excelência da plataforma e às inumeras API’s, frameworks e ferramentas,  tem se mostrado ser uma ótima opção para implementar outras linguagens. E é aqui que começa a nossa história com JRuby on GlassFish.

  • JRuby é a combinação da beleza e pragmatismo incontestável da linguagem Ruby, com a robustez e credibilidade da consolidada plataforma Java.
  • GlassFish é um reconhecido servidor de aplicações Java EE, parrudão e totalmente compliant com a especificação Java EE 5.

Usar essa a combinação para prover aplicações Rails é sinônimo de:

  • Ambiente de produção maduro e parrudo
  • Deployment facilitado
  • Ferramentas de monitoramento e gerenciamento de aplicação
  • Transação, mensageria, segurança
  • Integração completamente transparente com qualquer código Java
  • … e muito mais!!!

E ai, está motivado a continuar com esse tutorial?

É fato que JRuby é uma implementação de Ruby muito poderosa, rápida, confiável, thread-safe, etc, etc, etc. Mas não acho que faça muito sentido usar JRuby se você não precisa de integração com código Java, seja de um software legado ou mesmo uma API xyz específica. Se este não é o seu caso, aconselho dar uma olhada na combinação Ruby Enterprise Edition + Passenger (a.k.a. mod_rails) da Phusion.

Mãos à obra!

Antes da primeira coisa a fazer, você precisa se certificar de que possui o requisito mínimo necessário para esse tutorial: Um Java SDK instalado em sua máquina. No meu caso, estou com a versão 1.6.0_07. O ideal é que você tenha ao menos a versão 1.5.0. Caso não tenha, você pode fazer o donwload da versão apropriada ao seu SO e instalar conforme as instruções do produto, ou usar seu gerenciador de pacotes favorito. Você decide!

A primeira coisa a fazer: Instalar o JRuby

1- Baixe aqui a versão do JRuby mais atual (eu estou com a 1.2.0RC2);

2- Descompacte ele no diretório onde você deseja manter sua instalação;

3- Defina as variáveis de ambiênte conforme o exemplo a seguir:

# JRUBY-HOME, CLASSPATH and PATH to JRuby 1.2.0RC2
JRUBY_HOME=/home/leandro/ruby/tools/jruby-1.2.0RC2
CLASSPATH=$JRUBY_HOME/lib/jruby.jar:$CLASSPATH
PATH=$JRUBY_HOME/bin:$PATH
export JRUBY_HOME CLASSPATH PATH

4- Veja se está tudo funcionando, digitando no terminal:

$ jruby --version

A saída deve ser algo mais ou menos assim:

jruby 1.2.0RC2 (ruby 1.8.6 patchlevel 287) (2009-03-06 rev 9369) [i386-java]

Se você teve uma saída semelhante a essa, ótimo, tudo parece estar funcionando perfeitamente. Hora de ir para o próximo passo.

A segunda coisa a fazer: Instalar as gem necessárias

Instalar as gems pode demorar um pouquinho, dependendo de o quaão boa é sua conexão de internet. Tenha paciência! :)

Bem, vamos lá. No terminal…

1- Instale a gem jruby-openssl:

$ jruby -S gem install jruby-openssl

Isso se faz necessário porque o JRuby não suporta o openssl padrão do Ruby. Um pequeno detalhe. :)

-S, pra que isso?

O parâmetro -S serve para dizer ao JRuby que você quer que ele use prioritariamente os scripts que estão em seu diretório bin; ou, em segundo caso, no PATH do sistema.

2- Instale o Rails:

$ jruby -S gem install rails --include-dependencies

Esse comando instalará a versão mais atual do Rails, que no caso deste tutorial é a 2.3.2.

3- Instale o adaptador JDBC:

$ jruby -S gem install activerecord-jdbc-adapter

Este adaptador é genérico e possibilita conectar qualquer banco de dados que suporte JDBC. No entanto, ele faz necessário que você configure uma ou duas coisinhas a mais. Mas como no nosso caso vamos tratalhar com MySQL, vamos instalar também o adaptador JDBC especifico para MySQL. (Aliás, assegure-se de ter MySQL 5 instalado.)

$ jruby -S gem install activerecord-jdbcmysql-adapter

4- Instale o GlassFish v3 GEM:

$ jruby -S gem install glassfish

Pronto! Todas as ferramentas necessárias já estão instaladas. Vamos para o próximo [e mais interessante passo].

A terceira coisa a fazer: Criar uma aplicação

Em seu diretório de trabalho, faça o seguinte:

1- Crie uma aplicação Rails:

$ jruby -S rails jogapp

Como somos todos aficcionados por siglas, mandamos uma aqui: jogapp – JRuby on GlassFish Application. :)

Atenção!

A partir daqui, entre no diretório da aplicação jogapp e execute todos os script neste diretório.

2- Configure o banco de dados development no arquivo config/database.yml:

adapter: jdbcmysql
database: jogapp_development
username: root
password: senhadoroot
hostname: localhost

Lembre-se: Estamos usando uma instalação de MySQL 5 local.

3- Crie um cadastro bizarrão básicão:

$ jruby -S script/generate scaffold contato nome:string telefone:string

4- No terminal do MySQL, criar o banco de dados de desenvolvimento:

mysql> create database jogapp_development;

5- Migrar o esquema de banco de dados [para o banco de desenvolvimento]:

$ jruby -S rake db:migrate

Excelente! Tudo está criado e devidamente configurado. Agora…

A quarta coisa a fazer: Rodar a aplicação

Essa é a parte mais dificil. Prepare-se!

$ jruby -S glassfish_rails

É isso. Aqui na minha máquina, que nem é tão parruda assim, em 1 segundo, o GlassFish está de pé.

Agora você já pode abri seu browser preferido – que certamente não é o IE – apontar para a URL http://localhost:3000 para ver sua aplicação rodando no JRuby on GlassFish.

Dificil, não? :)

Pra finalizar, a quinta e última coisa a fazer: Se divertir!

Basta acessar http://localhost:3000/contatos e mandar bala! :)

Espero que você tenha se divertido até aqui, porque eu tenho me divertido bastante mesmo com essa combinação explosiva.

Como você pôde ver nesse tutorial, não há segredo. É muito trivial colocar uma aplicação para todar no GlassFish. É claro que eu também não mostrei nada de mais, além de usar um adaptado JDBC para tirar proveito dessa  ferramenta lapidadíssima e largamente usada no mercado. Vamos ver se logo, logo, eu escrevo um outro artigo mostrando um truque ou dois bem legal de integração com aplicações Java legadas (EJB, por exemplo).

É isso ai. Comentários são bem-vindos!

{ 6 comments to read ... please submit one more! }

  1. Show!!! Mto bom artigo… Fiquei até interessado em brincar um pouco com JRuby e perder o preconceito.

    Parabéns!

  2. Opa! Que bom que você se interessou em brincar com JRuby, você não vai se decepcionar.

    Mas, diz ai: que tipo de preconceito você tem com a parada? Quem sabe não posso te ajudar esclarecendo um ponto ou outro…

    Valeu!

  3. Salve,

    Excelente artigo, sempre quis brincar com JRuby mas tinha preguiça de procurar um tutorial para começar, agora não tenho mais desculpa :)

    Assim que tiver um tempinho vou fazer uns testes e escrever uma notícia no Ruby Inside Brasil indicando seu artigo. Aliás, obrigado por colocar o banner no seu blog, valeu pelo apoio.

    Até mais

  4. Fala Rafael!

    Se o site tem um bom conteúdo e é comunidade, por que não apoiar? :)

    E, lógico, indicações são sempre bem-vindas… hehehe

  5. Show de bola…

    tudo o que estava precisando… hehehe

    []’s

{ 1 Pingbacks/Trackbacks }

  1. Ruby + Rails no mundo Real 2009: Como foi? | CØdeZØne!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>