BT

Grails 2.0: melhorias de usabilidade, recarga de classes e DSL para consultas

por Rick Hightower , traduzido por Eder Magalhães em 19 Dez 2011 |

O time de desenvolvimento do Grails anunciou a nova versão do framework para desenvolvimento web em Java e Groovy, o Grails 2.0. A nova versão traz diversas novidades, entre elas: melhor usabilidade na ferramenta de console; um novo mecanismo mais eficaz para recarga de classes Java/Groovy; suporte à versão mais atual do Groovy (1.8); melhorias no mecanismo de persistência, maximizando o suporte a DSL, e mais opções para ferramentas NoSQL.

A equipe do Grails trabalhou durante um ano para implementar as novas funcionalidades da versão 2.0, que são, em mais detalhes:

  1. A ferramenta de console está mais interativa. Agora conta com a funcionalidade de autocompletar com a tecla tab (tab completion) e saída de dados colorida (no console);
  2. Mecanismo de recarga de classes (class reloading) mais confiável, trazendo ao Grails a mesma sensação de dinamismo do PHP quando uma página é atualizada;
  3. Aperfeiçoamento no suporte a depuração, com melhorias em relatórios de erros e no diagnóstico de problemas, tornando a análise mais precisa;
  4. Suporte a bibliotecas atualizadas: Groovy 1.8, Spring 3.1, Hibernate 3.6 e Servlet 3.0;
  5. Um framework para gerenciar a distribuição de conteúdo estático (CSS, JavaScript etc). Com isso, caso uma biblioteca JavaScript seja utilizada por vários plugins diferentes do Grails na mesma página, o framework não inclui esse conteúdo várias vezes.
  6. Novas APIs para geração de links e renderização de páginas;
  7. Novas funcionalidades do GORM: critérios detached, consultas where, múltiplos data sources, mais alternativas para NoSQL e melhorias no suporte a DSLs;
  8. Testes unitários podem ser executados com Spock, JUnit ou TestNG;
  9. Novo plugin para migrar bases de dados;
  10. Melhorias no mecanismo de engenharia reversa para bases de dados.

O InfoQ teve a chance de conversar com Peter Ledbrook, da SpringSource, importante evangelista Grails, atuando com a tecnologia desde o início de 2006, quando o framework ainda era chamado de Groovy on Rails.

InfoQ: Quais são as principais mudanças dessa última versão?

A primeira que se vai notar é a nova ferramenta de console interativa. Já existe um screencast que demonstra como a ferramenta funciona. Basicamente implementamos a funcionalidade de autocompletar, um histórico com as últimas instruções executadas, suporte a realce de sintaxe e mais performance na execução dos comandos. Outro benefício é o mecanismo para recarregar classes, agora feito por um agente da máquina virtual. A recarga de classes se tornou muito mais confiável; os usuários anteriormente precisam reiniciar o container de servlets com frequência; agora isso deve mudar.

Peter ainda mencionou a flexibilidade do Grails em relação ao uso de frameworks para testes unitários como JUnit, Spock, TestNG e outros. Outra novidade é o emulador do GORM para testes unitários, que simula o acesso a base de dados sem efetivamente utilizar uma base.

InfoQ: Qual é o suporte do Grails para cloud, especificamente nos ambientes Cloud Foundry, Amazon EC2 e Google App Engine?

Não existe suporte nativo do Grails para cloud, mas através de plugins é possível adicionar esse suporte. O Cloud Foundry, por exemplo, tem uma ferramenta VMC para implantação, mas temos um plugin que faz quase tudo que essa ferramenta faz, com a vantagem de garantir a replicação dados entre o ambiente de desenvolvimento e o Cloud Foundry.

Quanto ao Amazon Web Services (AWS), Peter mencionou que existem plugins disponíveis para mensageria, storage e outros serviços da Amazon. Sobre o ambiente em cloud do Google, existe um plugin do Grails para deploy no GAE; mas são necessários alguns ajustes na camada de persistência, espeficicamente no GORM, com a implementação JPA utilizada pelo Google. Atualmente o adaptador do GORM suporta JPA 1.0; é necessário um trabalho de atualização para JPA 2.0.

InfoQ: Quais são as mudanças para o GORM?

Várias melhorias foram implementadas, uma das mais perceptíveis é a possibilidade de utilizar o GORM com vários data stores, incluindo data stores para NoSQL. Lançamos versões recentes dos plugins para MongoDB e Redis, e existem outros em desenvolvimento. Os desenvolvedores podem acessá-los através de uma API padrão.

Também implementamos uma nova sintaxe para consultas; ela pode assumir o lugar dos finders (geradores de consultas) dinâmicos e a API de critérios. Chamamos essa funcionalidade de where queries. Ela é útil para os desenvolvedores utilizarem os operadores lógicos do Java/Groovy na elaboração da clausula where.

A funcionalidade where para SQL/Java/Groovy adotada pelo Grails parece uma DSL customizada. O InfoQ questionou como isso foi implementado. Para resumir, esse mecanismo uitiliza o Groovy AST (Abstract Syntax Tree), um mecanismo que provê a capacidade de metaprogramação a uma linguagem compilada. Ele permite que consultas sejam construídas através de uma DSL (linguagem de domínio específico), tirando proveito da checagem de tipos e de validações realizadas pelo compilador.

InfoQ: O GORM é um projeto independente? Pode ser utilizado sem Grails?

Sim e não. Atualmente boa parte do GORM é implementado em um conjunto de projetos para mapeamento de dados em Grails, que são basicamente construídos sobre o Spring Data. Normalmente quando as pessoas falam sobre utilizar o GORM sem Grails, estão se referindo ao GORM com Hibernate. Nesse caso algum trabalho extra será necessário. A integração do GORM com Hibernate é realizada através de código Grails, mas é possível utilizar o GORM integrado ao MongoDB sem utilizar Grails.

InfoQ: Como é feita a atualização de um aplicativo antigo para Grails 2.0?

Para vários projetos é necessário apenas executar o comando update na ferramenta de console. De qualquer forma, todas as alterações e ajustes para lidar com projetos antigos estão sendo documentadas para orientar o desenvolvedor. Para utilizar o novo mecanismo de testes unitários, o trabalho é um pouco maior; o desenvolvedor precisa gerar novos testes.

Foi realizado um trabalho importante para garantir a atualização dos principais plugins para o Grails 2.0. Mas ainda existem vários que precisam ser atualizados; vamos tentar trabalhar em conjunto com os autores desses plugins para promover a atualização para a versão 2.0.

InfoQ: Como está indo a adoção ao Grails; você percebe uma adoção cada vez maior?

Definitivamente. O volume da lista de discussão está crescendo constantemente. As pessoas a cada dia falam mais sobre Grails; é possível acompanhar isso no Twitter por exemplo. Uma coisa interessante que tenho visto são pessoas vindo de PHP para Grails. Isso nos ajudou a mudar nossa perspectiva de que Grails não é apenas para desenvolvedores Java, mas também para os de outras plataformas.

InfoQ: O que você acha de projetos semelhantes à proposta do Grails como Roo, Rails e o framework Play?

O Rails sempre teve uma forte influência sobre o Grails desde o início. Não estou certo se há algo recente, porém. Por exemplo, implementamos o mecanismo para carregar conteúdo estático de forma otimizada; logo depois o pessoal do Rails implementou a funcionalidade parecida.

De qualquer forma não somos avessos a adotar boas ideias. Certamente a console iterativa do Spring Roo nos influenciou, mostrando os benefícios dessas funcionalidades em projetos Java. Tentamos ficar atentos aos outros frameworks, mas isso é difícil. É provável que usuários solicitem mudanças a partir de ideias de outros frameworks, mas nem sempre conhecemos as outras alternativas.

Para os desenvolvedores interessados no Grails 2.0, foi disponibilizado um guia com as principais novidades e a documentação de referência atualizada para a versão 2.0. Já está disponível o download do Grails 2.0.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT