Em Maio, a VMWare e o Google anunciaram uma colaboração entre os engenheiros do Spring Roo da WMWare e o compilador GWT Java-to-Javascript do Google. A colaboração visa fornecer a produtividade adquirida com o Spring Roo para as aplicações ricas baseadas em Java com GWT.
O Spring Roo, liderado por Ben Alex da SpringSource, é um conjunto de componentes leves para desenvolvimento de aplicações web que visam trazer rápido feedback produtividades que os desenvolvedores adoram quando usam outras soluções (e.g. Ruby on Rails Groovy on Rails) para a comunidade de desenvolvedores Java. Ele fornece uma interface que gera e gerencia o ciclo de vida de classes por meio de comandos de uma linguagem simples que descreve a configuração do projeto, de entidades, controladores e muito mais.
O Spring Roo também possibilita que os desenvolvedores criem uma camada de domínio usando a interface, mas tenha em mente que a abordagem difere do método corporativo tradicional do Java de utilizar DAOs dando preferência ao, já muito discutido, padrão Entity Manager. Da referência do Spring Roo:
A maioria das aplicações corporativas Java terão uma camada DAO, uma camada de serviços, uma camada de domínio e uma camada controladora. Em uma aplicação típica com o Roo você verá apenas a camada de entidades (a qual é similar a camada de domínio) e a camada web. ... a camada de serviços pode ser adicionada se sua aplicação necessitar, mas a camada DAO é adicionada muito raramente.
O Google Web Toolkit (GWT) é um compilador Java-to-JavaScript que permite que a os desenvolvedores programem usando IDEs e Java em seus códigos. A aplicação “compilada” final é JavaScript, e pode ser utilizada para construir aplicações web interativas independentes de navegadores. O GWT inclui a extensão Speed Tracer do Chrome, uma ferramenta que permite a depuração e perfilação no lado do cliente. O Speed Tracer inclui um perfilador no lado do servidor mas o suporte é limitado ao Google App Engine (GAE) e ao SpringSource tc Server Developer Edition. Como é declarado no site do projeto GWT:
Com essa integração, você poderá ver as métricas das chamadas ao banco de dados, uso do memcache, recursos utilizados, bem como outras chamadas no lado do servidor.
A nova colaboração com o Google permite ao desenvolvedor extender sua aplicação com o GWT, além de oferecer a possibilidade de instalar sua aplicação no GAE com suporte a persistência do DataNucleus. O Spring Roo - no segundo plano - automatiza o ciclo de vida do projeto; desde a junção da camada de apresentação do GWT MVP até a configuração do compilador GWT, configurando o domínio de persistência, as dependências com o Maven e muito mais. O Spring Roo fornece um comando para gerar testes integração do Junit para a camada de domínio. Um conjunto de casos de teste - construídos com base na infraestrutura de testes intregados do Spring - são produzidos para verificar que operações comuns da JPA, como o CRUD, estejam todos funcionando. Adicionalmente, o Spring Roo baseia-se na ferramenta Selenium para criar os testes automatizados para cada controlador web do projeto. Para testar a camada web, o Maven inicia uma instância do Tomcat. E então o Spring Roo instala a aplicação final de teste para validação do desenvolvedor.
O Spring Roo depende das declarações de tipos Internos do AspectJ (ITDs) para algumas funcionalidades. Uma IDT é uma apecto descrito por uma sintaxe comum Java inserida em classes Java em tempo de compilação. O Spring Roo gerencia as ITDs, reagindo as mudanças nas classes Java que ele depende. Por exemplo: dado uma classe anotada com @RooToString, o Spring Roo pode gerar, ou atualizar, um método toString() em um aspeto que enumera todas as variáveis da classe. Esse método é compilado no .class resultante, evitando que o desenvolvedor tenha que, manualmente, escrever tal código.
Configurar uma IDE como o Eclipse ou o IntelliJ para reconhecer o código gerado com o ROO necessitará de um plugin que forneça o AspectJ Development Toolkit (ADJT). Isso habilitará o suporte para sugestão de código usando artefatos AspectJ com o ambiente de desenvolvimento. O SpringSource fornece gratuitamente uma distribuição para o Eclipse chamada SpringSource Tool Suite (STS) que inclui um conjunto completo de plugins ideais para o desenvolvimento com o SpringRoo (parecido com o plugin m2eclipse). A IDE é útil, entretanto todos os comandos ainda são executados pelo console do ROO.
Uma aplicação de exemplo foi disponibilizada com instruções por Christian Dupuis em seu blog no SpringSource. Seu post possui todos os passos para configurar o STS, gerar um projeto usando o ROO, e instalar uma aplicação GWT básica no GAE. Mesmo estando ainda nos primeiros estágios de desenvolvimento a integração do STS com o GWT promete muito.