Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

O artigo apresenta diversos recursos do Grails através do desenvolvimento de uma aplicação de exemplo, ilustrando assim o potencial do framework.


Para que serve:

Este artigo serve para demonstrar a implementação de diversas funcionalidades de uma aplicação web, realizada de maneira simples e produtiva utilizando o framework Grails.


Em que situação o tema é útil:

O framework Grails provê um ambiente já pré-configurado e integrado, permitindo ao desenvolvedor não perder tempo com configurações iniciais. Além disso, oferece diversos recursos que são comumente utilizados nas aplicações, de forma ágil e fácil, como a geração de CRUDs, acesso a dados, configuração de logs, filtros de segurança, Ajax etc.

Resumo DevMan:

O Grails é um framework MVC que utiliza a linguagem dinâmica Groovy e que roda sobre a máquina virtual Java (JVM). Sua arquitetura foi construída em cima de frameworks consolidados de mercado, como o Hibernate, Spring, Log4J e Sitemesh.

Além do CRUD, que é gerado facilmente pelo framework, outros recursos habitualmente usados em aplicações web são disponibilizados por este de forma bastante simples e produtiva, tais como criação de filtros de pesquisa, segurança, criação de taglibs, Ajax, gráficos e relatórios. Dessa forma o desenvolvedor pode manter o foco no domínio da aplicação, deixando de gastar tempo com arquiteturas complexas e questões de infraestrutura.

O desenvolvimento de aplicações web utilizando a plataforma Java EE tem crescido demasiadamente nos últimos anos, e para atender a essa demanda são oferecidas diversas opções de frameworks e bibliotecas. Neste contexto, a arquitetura proposta pela plataforma Java para aplicações web é bastante rica, porém muito complexa, dado que foi construída para atender a diferentes situações e propósitos.

Essa complexidade, aliada ao leque enorme de opções de frameworks, trazem alguns problemas à plataforma Java que a tornam pouco produtiva comparada a outras tecnologias web. Seguem alguns dos problemas percebidos pelo mercado na prática:

• Leva-se muito tempo para configurar uma aplicação e deixá-la pronta para iniciar o desenvolvimento. Para isso, é necessário configurar frameworks, bibliotecas externas, arquivos XML, properties, etc.;

• O processo de integrar os diversos frameworks na maioria das vezes não é trivial, pois existem versões que são incompatíveis umas com as outras;

• Algumas funcionalidades, que existem em qualquer aplicação, são implementadas toda vez que uma nova aplicação é criada. Dentre estas podemos citar: desenvolvimento de CRUDs, configuração de logs, internacionalização, acesso a dados, relatórios, etc.;

• Com certa frequência, muitos softwares são construídos com arquiteturas mais complexas do que realmente necessitam.

Para resolver tais problemas, surgiram no mercado frameworks como Ruby on Rails e Grails (Groovy on Rails). Ambos possuem os mesmos princípios, entretanto o diferencial do Grails é ser executado em cima da máquina virtual Java (JVM), aproveitando toda a maturidade e robustez da plataforma. Seguem suas principais características:

• Utiliza os conceitos:

o Convention over Configuration: Convenção ao invés de configuração significa obter mais produtividade através de convenções previamente definidas, aumentando a padronização e evitando configurações trabalhosas de XML, arquivos de propriedades, logs etc.;

o Don't Repeat Yourself: O framework já oferece tarefas padrões do desenvolvimento de aplicações, como a geração de CRUDs, log pré-configurado etc.;

• Utiliza a linguagem dinâmica Groovy, que estende a linguagem Java oferecendo suporte a closures, duck typing, facilidade na manipulação de listas, hashes, tipos primitivos, invocação de métodos dinamicamente etc.;

• Fornece um ambiente de desenvolvimento completo pré-configurado e integrado, permitindo o foco no domínio da aplicação;

• Sua arquitetura foi construída em cima de frameworks consolidados no mercado, tais como Hibernate, Spring, Sitemesh e Log4j.

A proposta desse artigo não é ensinar o básico do framework, e sim mostrar, através de um exemplo prático, a produtividade do Grails para outros aspectos comuns no desenvolvimento de uma aplicação. Filtros de busca, segurança, Ajax, gráficos e relatórios são alguns desses aspectos abordados pelo artigo. Os artigos Grails: do Groovy à Web – Partes 1 a 5 (Edições 75-79 da Java Magazine) são uma excelente opção para iniciar o aprendizado com o framework.

Closure: Uma closure é uma estrutura de código contendo um bloco de instruções que realiza uma determinada operação. Ela é mais abrangente que um método, pois sua estrutura pode ser atribuída a uma variável e também ser passada como parâmetro na chamada de outras funções. No exemplo abaixo entenderemos melhor esses conceitos. Definimos uma closure que retorna como resultado o parâmetro passado elevado ao quadrado e atribuímos esta closure à variável square. Depois definimos a função aplicaFuncaoMatematica, que recebe como parâmetro uma função e uma lista qualquer. A função aplicaFuncaoMatematica irá aplicar a função passada como parâmetro (em nosso caso, square) em cada elemento da lista.


  //definindo a closure square
  def square = {it*it}
   
  //definindo a função matemática
  def aplicaFuncaoMatematica = {funcao, lista ->
   
    def retorno = []
    for (obj in lista) {
      retorno += funcao(obj)
    }
      
    return retorno
  }
   
  // imprimindo o resultado na tela
  println aplicaFuncaoMatematica(square, [1, 2, 3, 4])   // imprimirá [1, 4, 9, 16] 

Duck typing: É o conceito de linguagens orientadas a objetos que define que: se um objeto de uma classe X se comporta como um objeto de uma classe ou interface Y, então este objeto pode ser tratado como um objeto do tipo Y sem ter que herdar ou implementar Y. No exemplo abaixo, a classe Bicicleta, embora não seja um veículo no mundo real, se comporta como um ao possuir o método mover(). Dessa forma, Bicicleta pode ser vista como um veículo. Então, podemos criar uma lista contendo diferentes instâncias de carros e bicicletas e chamar o método mover(), independente de termos uma superclasse comum ou uma interface definida com este método.


  class Carro {
    public void mover() {
      println 'O carro se nove'
    }
  }
   
  class Bicicleta {
    public void mover() {
      println 'A bicicleta se nove'
    }
  }
   
  def veiculos = [new Carro(), new Bicicleta()]
  for (v in veiculos) {
    v.mover()
  } 

A aplicação locacar – uma locadora de veículos

A aplicação que iremos utilizar como base para todos os nossos exemplos é uma locadora de veículos, que batizamos de “locacar”. Seu objetivo é sistematizar as operações de locação de veículos realizadas por diferentes usuários. A Figura 1 mostra a definição do domínio do problema.

Figura 1. Diagrama de classes de domínio da aplicação locacar.

Configurando o ambiente

Antes de iniciar o desenvolvimento da aplicação propriamente dita com o Grails, vamos explicar como instalar o framework, uma ferramenta de suporte e como configurá-la. Também vamos mostrar como criar a aplicação locacar e fazer alguns ajustes iniciais.

Instalando o Grails

A instalação do framework Grails é bastante simples. Segue uma descrição detalhada de como instalar e configurar o ambiente no sistema operacional Windows:

• Baixe a última versão do Grails em www.grails.org/Download e descompacte-a em um diretório;

• Configure a variável de ambiente JAVA_HOME apontando para o diretório raiz do JDK. Ex: D:\Documents and Settings\CYEW\Meus documentos\samuel\java\jdk1.6.0_14;

• Configure a variável de ambiente GRAILS_HOME apontando para o diretório raiz de instalação do Grails. Ex: D:\Documents and Settings\CYEW\Meus documentos\samuel\java\grails\grails-1.3.4;

• Configure a variável de ambiente PATH para adicionar as variáveis JAVA_HOME e GRAILS_HOME;

• Execute grails help na linha de comando e verifique se é exibida uma lista com os comandos disponíveis pelo Grails.

Instalando a ferramenta

A ferramenta que iremos utilizar é a STS, uma IDE da Spring Source baseada na plataforma Eclipse. Segue um passo-a-passo para a sua instalação:

• Baixe a última versão do STS em www.springsource.com/products/springsource-tool-suite-download e descompacte-a em um diretório;

• Execute o programa [DIR-INSTALACAO]\springsource\sts-2.3.2.RELEASE\STS.exe e ao iniciar:

o Configure o proxy, caso necessário, em Window > Preferences > General > Network Perspectives. Selecione a opção Manual e informe HOST, usuário e senha do seu proxy;

o Configure o JDK em Window > Preferences > Java > Installed JREs para apontar para o JDK e não para um JRE (vem por default);

o Acesse a opção de menu Help > Dashboard e verifique se aparecem os Feeds, pois indica que a configuração de internet está funcionando;

o Ainda na tela de Dashboard, vá na aba Extensions e selecione as opções Grails e Groovy e depois clique em Install;

o Configure o GRAILS_HOME em Window > Preferences > Groovy > Grails apontando para o diretório de instalação do Grails;

o Acesse a opção de menu File > New > Grails Project e verifique se não é exibida alguma mensagem de erro. Caso esteja tudo correto, significa que o ambiente está devidamente configurado para a criação de projetos com o Grails.

Criando a aplicação

Para criar o projeto locacar basta acessar o menu File > New > Grails Project e informar o nome do projeto. A IDE irá executar internamente o comando grails create-app locacar. Feito isso, a ferramenta irá exibir a estrutura de diretórios da Figura 2.

Figura 2. Estrutura de diretórios da aplicação locacar.

A estrutura de diretórios convencionada pelo Grails facilita a padronização de aplicações, pois existe uma pasta específica para cada tipo de recurso, como classes Groovy, classes Java, classes de domínio, controladores etc. Segue uma descrição sucinta destas:

src/java ...

Quer ler esse conteúdo completo? Tenha acesso completo