↓ Arquivos ↓

Arquivo → August, 2008

Grails Brasil tomou fermento!

 

Grails Brasil

Uou! Hoje ao acessar o Grails Brasil me deparei com uma surpresa: mais de 600 mensagens e quase 200 usuários!

Incrível como estamos crescendo. E pensar que criei o Grails Brasil porque não tinha com quem conversar a respeito. Parece que foi ontem. Na realidade, foi em fevereiro, e é uma história bem engraçada.

Já estava acompanhando o Grails bem de longe, esperando por uma versão 1.0 do bichinho, até que a mesma saiu em fevereiro. Me lembro de ter ficado incrívelmente empolgado com aquele release mas, para minha surpresa, ninguém conhecia Grails! Muitos já haviam ouvido falar de Groovy (que salva meu dia todos os dias há mais de um ano), mas de Grails, nada.

Então, no trabalho, na hora do almoço, criei uma conta no meu servidor de hospedagem, instalei o phpBB e, em 15 minutos no máximo, Grails Brasil estava no ar (acho que foi em 2 de fevereiro de 2008). Logo em seguida, publiquei a notícia no GUJ e, para meu espanto, no mesmo dia, mais de 30 pessoas já haviam se cadastrado no site. Incrível!

De fevereiro a agosto, no entanto, algumas coisas interessantes aconteceram: luta com spammers (fui auxiliado pelos próprios membros do grupo sobre como lidar com o problema), queda no número de acessos (entre abril e junho, cheguei a achar que parariamos nos 60, 70 usuários (e com estes usuários, já eramos o maior grupo do mundo em número de participantes!)), crescimento da comunidade e eu, pessoalmente, divulgando o Grails a partir de minhas aulas no portal da DevMedia (http://aulas.itexto.com.br), artigo na WebMobile e, finalmente, no dia 23 deste mês, minhas palestras no evento WebDays 2008.

E, passado estes poucos meses, uma coisa fica nítida pra mim: Grails está crescendo, e como! Deixou de ser aquele framework que só eu conhecia (no meu círculo), passou a fazer parte do cotidiano destas quase 200 pessoas e, de quebra, mudou bastante a maneira como eu via o desenvolvimento de aplicações web. A a sensação de aprendê-lo (ao menos pra mim) é a mesma que senti ao migrar da plataforma Windows para o Mac: alívio. Desenvolvimento pra web não precisa ser doloroso!

Realmente fantástico!

Gambiarra esperta: trabalhando com mais de um banco de dados usando Hibernate (ou qualquer ferramenta ORM)

Hibernate é fenomenal, mas tem um problema: quando precisamos lidar com mais de um banco de dados, as coisas se complicam. Neste post pretendo mostrar como superar esta “limitação” do Hibernate usando um padrão (confesso: orientado a gambi, mas funciona bem!) que facilita esta tarefa.

Porém, antes de começar, vamos supor a seguinte situação: existem dois bancos de dados: bdUsuarios, aonde estão armazenadas informações relativas aos usuários do seu sistema e outro, chamado bdNegocios, aonde ficam as tabelas relativas às suas classes de negócio.

Para piorar um pouco mais a situação, vamos supor que todas as suas classes relativas ao gerenciamento de seus usuários já se encontrem prontas, armazenadas em um arquivo jar (traduzindo: já se encontram inclusive mapeadas para acessar os dados presentes no banco de dados bdUsuarios).

Ok: suponhamos agora que exista uma classe chamada Evento, que encontre-se definida tal como no código abaixo:

class Evento {
          private String id
          private Date data
          private Usuario usuario
          private String mensagem
          // gets e sets omitidos
}

Os dados da classe Evento deverão ser armazenados no banco de dados bdNegocios. A primeira coisa que poderá passar pela cabeça do leitor será: “hmm… bastaria alterar as configurações de acesso ao banco de dados do Hibernate!”. Porém, a solução é bem mais simples. Basta criar o que chamo de “propriedades ORM only“.

Uma propriedade ORM only seria aquela utilizada APENAS pelo mecanismo de ORM. No nosso caso, suponhamos que queiramos armazenar os dados referentes à classe Evento na tabela evento, cuja estrutura encontra-se exposta abaixo:

   create table evento (
          id varchar(36) not null,
          idUsuario varchar(36) not null,
          data timestamp not null,
          mensagem varchar(255) not null,
          primary key(id)
    )

Incluiriamos as nossas propriedades ORM only em nossa classe Evento tal como no código abaixo:

  (...)
   // Para uso somente do ORM
   public String getIdUsuario() {
         return getUsuario() == null ? null : getUsuario().getId();
   }

   // Para uso somente do ORM
   public void setIdUsuario(String valor) {
         // Suponha que exista um construtor para usuario que carregue seus dados a partir do id
         try {
               setUsuario(new Usuario(valor));
           } catch (ErroUsuarioNaoEncontrado ex) {
              setUsuario(null);
           }
   }
  (...)

Em seguida, vamos ao nosso arquivo de mapeamento da classe Evento:

(...)
<class name="meupacote.Evento" table="evento">
     <id name="id" column="id">
          <generator class="uuid"/>
     </id>
     <property name="data"/>
     <property name="mensagem"/>
     <!-- O pulo do gato! -->
     <property name="idUsuario" column="idUsuario"/>
</class>

No mapeamento, mapeamos uma propriedade chamada idUsuario, que corresponderá à respectiva ORM only de nossa classe Evento. O Hibernate pensará que se trata de apenas uma propriedade do tipo varchar(36), no entanto, no interior do set e do get, estaremos, na realidade, lidando com a classe Usuario.

Como já mencionei, trata-se de uma solução um tanto quanto “gambi”, no entanto, foi a única que encontrei para solucionar o problema e, espero, o seu também!

Como criar chaves primárias do tipo UUID com Grails

Devo confessar, detesto chaves primárias do tipo auto incrementais. Sempre preferi utilizar UUID: podem ocupar mais espaço em armazenamento em disco, mas são ideais quando lidamos com aplicações paralelizadas ou mesmo quando queremos ter um controle maior sobre o valor que devemos armazenar nestes campos.

Ao iniciar meu contato com Grails, fiquei um pouco decepcionado ao me deparar com a utilização padrão de campos do tipo auto incrementais, porém este problema pode ser resolvido de uma maneira extremamente simples: basta apenas customizar o mapeamento objeto relacional da classe, tal como faço no código abaixo:

class AmandoUUID {
      String id // Defina o campo chave como String.
     // Repare no mapeamento: basta definir o generator uuid!
     static mapping = {
             id generator:'uuid'
     }
}

Simples, não acha?

WebDays 2008

Dia 23 fiz duas palestras entituladas “Introdução ao Grails” no WebDays 2008. Que experiência fantástica! A todos aqueles que compareceram às minhas palestras, seguem aqui os meus agradecimentos. Espero poder, em um futuro próximo, repetir a experiência. A propósito, sintam-se a vontade para me adicionar no msn (kicolobo@itexto.net)!

Nesta palestra, demonstrei os conceitos básicos do Grails na primeira parte e, na segunda, expus tarefas que considero difíceis de serem feitas com frameworks tradicionais mas que, com Grails, são executadas em poucas linhas. Infelizmente, devido a restrições do tempo, não deu para mostrar toda a aplicação que desejava criar naquele momento, mas acredito que 90% do que intencionei fazer consegui.

Para aqueles que se interessarem em baixar o código fonte da aplicação que criei nestas duas palestras, basta clicar neste link.

No final da palestra, também menciono algumas fontes de pesquisa relacionadas ao assunto. Dado que apresentei estes dados apenas no final da segunda palestra (muito próximo do horário do almoço), repito portanto aqui as fontes:

Livros:

Getting Started with Grails: de Jason Rudolph (download gratuito, mas é preciso ser registrado no site InfoQ).
Trata-se do texto básico para quem deseja iniciar o aprendizado mais aprofundado do Grails. Encontra-se um pouco defasado em relação à versão atual do framework, mas mesmo assim ainda é um ponto de partida extremamente válido 

Groovy em Ação: de D. Konig. Se você quer aprender Groovy (e eu acho que deve!), este livro também é um excelente ponto de partida. Assim como no caso anterior, trata de uma versão anterior do Groovy (1.0), mas também se aplica ao nosso caso.

Sites:
Grails Brasil: http://grails.com.br 
Grails: site oficial: http://grails.org

Introdução ao Grails na WebMobile n. 19

Acaba de sair a introdução a Grails que escrevi no número 19 da revista WebMobile e, para minha surpresa, fiquei sabendo que a revista havia saido nas bancas por causa de um e-mail que recebi de um leitor me dando os parabéns. Não é o máximo? Espero que com este artigo, mais pessoas se interessem pela tecnologia.

Adoraria ouvir os comentários de vocês a respeito do artigo, sendo assim, METAM BRONCA! :)

Como instalar o Grails

Muita gente me pergunta como instalar o Grails. Dada a quantidade de pedidos, resolvi escrever um guia bem simples sobre como instalar o Grails.

Requisitos:
Tenha o JDK 1.4 ou posterior (opte por pelo menos o 1.5, ok?) instalado.
Ter o Grails baixado
Observação: você não precisa instalar o Groovy, porque o Grails já vêm com o Groovy embutido

Passo 1: baixe o Grails em seu site oficial: http://grails.org. Para facilitar sua vida, baixe a versão binária (vêm nos formatos zip (comum no Windows) e gz (comum na plataforma *nix).

Passo 2: descompacte o conteúdo do arquivo que você baixou no diretório de sua escolha. Em nosso exemplo, vamos supor que você o descompactou no diretório raiz do seu sistema (~/grails se você está em um sistema *nix (corresponde ao meu diretório home), C:\Grails se está no Windows (raiz do sistema)).

Passo 3: Definindo variáveis do sistema.
Este é o passo no qual a maior parte das pessoas passam por dificuldades, e é exatamente neste ponto que os procedimentos irão variar de acordo com seu sistema operacional.
Apenas duas variáveis precisam ser editadas:
GRAILS_HOME = O diretório no qual o Grails foi instalado
PATH = Você deverá incluir no path do seu sistema o diretório bin, incluido na sua instalação do Grails.

Windows
Fiz um vídeo rápido (me desculpem pela qualidade da imagem) no qual vocês poderão ver como alterar estas variáveis no Windows Vista (no caso do XP e anteriores, é basicamente o mesmo procedimento, só que mais simples. Você será direcionado direto para a janela de Propriedades do Sistema do Windows).

Mac OS X, Linux, *nix em geral
Se estiver utilizando o bash, simplesmente edite o arquivo .bash_profile (Mac OS) ou .bashrc (Linux), presente no seu diretório home, tal como no exemplo abaixo:

export PATH=~/grails/bin:$PATH
export GRAILS_HOME=~/grails

Observação: só testei este procedimento no Mac OS X, mas acredito que deverá funcionar sem problemas no Linux e outros *nix da vida.

Passo 4: Testando sua instalação
Na sua interface de linha de comando, digite o comando grails.
Caso você seja recebido por uma mensagem de boas vindas do Grails, sua instalação esta concluída.

Simples assim.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes