O Spring Roo é uma ferramenta para o desenvolvimento rápido e fácil de aplicações em Java. O principal objetivo dessa ferramenta é gerar parte do código fonte de uma aplicação com apenas algumas configurações e alguns comandos iniciais feitos em linhas de comando. O Spring Roo gera código com alguns dos principais frameworks da plataforma Java como Spring, Hibernate, JSF e GWT. Todos os projetos criados pelo Spring Roo utilizam o Maven.

A primeira versão do Spring Roo foi disponibilizada em 2009 como parte do projeto Spring. Hoje a ferramenta está na versão 1.2.5, lançada em Janeiro de 2014, e atualmente suporta diversas ferramentas na criação de projetos como MVC com os frameworks JSF, Spring ou GWT, persistência de dados com os frameworks Hibernate, EclipseLink e OpenJPA, criação de serviços REST, entre outros.

Diferentemente de outras ferramentas para a geração de código, o objetivo do Spring Roo é que o código gerado seja extensível e de fácil entendimento para que um programador consiga continuar o projeto com ou sem o auxilio do Spring Roo. A ferramenta disponibiliza comandos para que, após a geração de código, seja possível abrir o código fonte na IDE Eclipse. Além disso, a ferramenta também gera testes unitários e funcionais automatizados com os frameworks JUnit e Selenium.

Neste artigo será mostrado como baixar e configurar o Spring Roo e como desenvolver uma aplicação web de forma fácil e rápida, o exemplo será executado no sistema operacional Windows, mas os passos e comandos são os mesmos para qualquer sistema operacional. Para que o exemplo funcione é necessário ter a JDK instalada e configurada na máquina.

Configurando o Spring Roo

O primeiro passo para utilizar o Spring Roo é baixar a ferramenta do site oficial. O Spring Roo necessita do Maven para a criação de um projeto e para a execução de alguns comandos, por isso, também é necessário baixar (também do seu site principal) e configurar o Maven na máquina.

Para configurar o Maven é necessário configurar as variáveis de ambiente M2_HOME e PATH. Conforme mostra a Figura 1, a variável M2_HOME recebe como valor o caminho onde o arquivo do Maven foi descompactado, e na variável PATH é adicionado o valor %M2_HOME%\bin. Para testar se o maven foi configurado corretamente, basta ir ao prompt de comando e digitar o comando:

 mvn –version

Configuração das variáveis de ambiente do Maven

Figura 1 – Configuração das variáveis de ambiente do Maven.

Para configurar o Spring Roo é necessário configurar as variáveis de ambiente ROO_HOME e PATH. Conforme mostra a Figura 2, a variável ROO_HOME recebe como valor o caminho onde o arquivo do Spring Roo foi descompactado, e na variável PATH é adicionado o valor %ROO_HOME%\bin. Para verificar se o Spring Roo foi configurado corretamente, basta ir ao prompt de comando e digitar o comando “roo”.

Configuração das variáveis de ambiente do Spring Roo

Figura 2 – Configuração das variáveis de ambiente do Spring Roo.

Desenvolvendo a Primeira Aplicação com o Spring Roo

Para criar uma aplicação com o Spring Roo é necessário entrar na ferramenta via linha de comando. Um novo projeto será criado no diretório corrente, por isso, antes de criar o projeto é recomendável criar um diretório para o projeto. A Listagem 1 mostra como criar um diretório via linha de comando e entrar no Spring Roo. A Figura 3 mostra a tela inicial da ferramenta.

Listagem 1 – Criação do diretório do projeto e inicialização do Spring Roo.

  mkdir loja
  cd loja
  roo

Tela inicial do Spring Roo

Figura 3 – Tela inicial do Spring Roo.

Na Listagem 1, o comando mkdir cria o diretório loja, onde será criado o projeto de exemplo deste artigo. O comando cd loja entra no diretório loja e o comando roo inicializa a ferramenta Spring Roo. A primeira vez da execução de alguns comandos do Spring Roo pode ser um pouco demorada porque será necessário baixar algumas dependências do maven, mas depois da primeira vez a ferramenta fica mais rápida.

Já com o Spring Roo inicializado, o primeiro passo é criar o projeto e para isso é necessário executar o comando project, como apresentado na Listagem 2.

A opção --topLevelPackage define qual é o pacote padrão da aplicação. A última parte do nome do pacote (no exemplo, loja) é importante, pois será o nome que o Spring Roo dará para a aplicação. Conforme ilustra a Figura 4, o Spring Roo cria um projeto com padrão do maven com as pastas java e test, o arquivo pom.xml e como o projeto utilizado o framework Spring, o arquivo applicationContext.xml.

Listagem 2 – Criação do projeto no Spring Roo.

  roo> project --topLevelPackage br.com.devmedia.loja

Criação do projeto Loja

Figura 4 – Criação do projeto Loja.

Depois que o projeto é criado, pode ser definido qual banco de dados será utilizado na aplicação. Para isso, é usado o comando jpa setup, como é mostrado na Listagem 3. A opção --provider define com qual framework será feita a persistência (no exemplo, com o Hibernate). O Spring Roo também dá suporte ao OpenJPA e ao EclipseLink. A opção --database define qual o banco de dados utilizado (neste exemplo será usado HYPERSONIC em memória, mas poderia ser escolhido diversos outros bancos de dados, como PostgreSQL, MySQL ou Oracle).

Listagem 3 – Definição do banco de dados utilizado no projeto.

roo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY 

Como mostra a Figura 5, com esse comando o Spring Roo gera diversos arquivos, como o persistence.xml e o database.properties. A ferramenta também altera o applicationContext.xml para inserir as opções do banco de dados e, por último, a ferramenta inclui todas as dependências necessárias para o projeto, como o driver JDBC do banco de dados escolhido e o Hibernate.

Arquivos gerados após a definição do banco de dados da aplicação

Figura 5 – Arquivos gerados após a definição do banco de dados da aplicação.

Depois da criação do banco de dados, podem ser definidas as entidades da aplicação, além de definir o nome das entidades. Ttambém podem ser definidos os atributos e os relacionamentos entre as entidades, além das restrições de cada um dos atributos.

No exemplo deste artigo serão definidas cinco entidades: Cliente, Produto, Fornecedor, Pedido e PedidoItem.

  • A entidade Cliente terá os atributos nome, cpf, endereço, data de nascimento e telefone.
  • A entidade Fornecedor terá os atributos nome, cnpj, endereço e descrição.
  • A entidade Produto terá os atributos nome, descrição e preço e um relacionamento com a entidade Fornecedor.
  • A entidade Pedido terá os atributos preço total e data da venda, além dos relacionamentos com um cliente e com vários ProdutosItem.
  • A entidade PedidoItem terá os atributos quantidade e desconto e os relacionamentos com a classe Pedido e Produto.

Como mostra a Listagem 4, o comando para criar uma entidade no Spring Roo é o entity jpa. A opção --class define o nome da entidade e a opção --testAutomatically define que devem ser criados testes unitários com o framework JUnit para estas entidades.

Também na Listagem 4 está o comando para criar um atributo em uma entidade: o field. A primeira opção define o tipo do atributo (string, number ou date). Se o tipo for number ou date, é necessário utilizar a opção --type, que define a classe Java que será utilizada no atributo. Além disso, a opção --fieldName define o nome do atributo. Existem diversas outras opções para definir restrições no campo, como --notNull, --sizeMin, --sizeMax, --unique, entre outras.

Além dos atributos, também é necessário criar os mapeamentos dos relacionamentos entre as entidades. Para isso, também é utilizado o comando field. O tipo utilizado no comando depende do tipo relacionamento: se for OneToOne é utilizado reference, se for ManyToMany ou OneToMany é utilizado o set. A opção --type define com qual a entidade que o relacionamento será feito.

Listagem 4 – Criação das entidades e dos atributos.

  roo> entity jpa --class ~.model.Cliente --testAutomatically
  roo> field string --fieldName nome –-notNull
 roo> field string --fieldName endereco –-notNull –-sizeMin 10 
 roo> field string --fieldName cpf –-notNull –-sizeMin 11 –-unique
 roo> field string –-fieldName telefone –-notNull –-sizeMin 10
 roo> field date --fieldName dataNascimento –-notNull -–type java.util.Date
  roo> entity jpa --class ~.model.Fornecedor --testAutomatically
 roo> field string --fieldName nome –-notNull 
 roo> field string --fieldName cnpj –-notNull –-sizeMin 11 –-unique
 roo> field string --fieldName descricao –-notNull –-sizeMin 10
 roo> field string --fieldName endereco –-notNull 
  roo> entity jpa --class ~.model.Produto –-testAutomatically
 roo> field number --fieldName preco –-notNull –-type java.lang.Float
 roo> field string --fieldName nome -–notNull –-sizeMin 5
 roo> field string --fieldName descricao –-notNull –-sizeMin 10
 roo> field reference --fieldName fornecedor --type ~.model.Fornecedor
  roo> entity jpa --class ~.model.Pedido --testAutomatically
 roo> field number --fieldName precoTotal -–notNull –-type java.lang.Float
 roo> field date --fieldName dataPedido –-notNull –-type java.util.Date
 roo> field set --fieldName produtos --type ~.model.PedidoItem
 roo> field reference --fieldName cliente --type ~.model.Cliente
  roo> entity jpa --class ~.model.PedidoItem -–testAutomatically
 roo> field number --fieldName quantidade –-notNull –-type java.lang.Integer
 roo> field number --fieldName desconto –-notNull –-type java.lang.Integer
 roo> field reference --fieldName produto --type ~.model.Produto
 roo> field reference --fieldName pedido --type ~.model.Pedido

Quando uma entidade é criada, o Spring Roo automaticamente começa a trabalha sobre aquela entidade, mas em alguns casos, precisamos voltar a editar uma entidade, previamente criada. Para isso, é utilizado o comando focus, que permite a edição de uma entidade previamente criada. A Listagem 5 mostra como executar esse comando.

Listagem 5 – Comando para editar uma entidade previamente criada.

roo> focus --class ~.model.Pedido

Depois de criada as entidades, os atributos e mapeado os relacionamentos entre as entidades, é possível executar o comando web mvc setup para configurar o projeto para ser um projeto Java web, como mostra a Figura 6.

Esse comando importa todas as bibliotecas que são necessárias para a parte web da aplicação e cria os arquivos de configuração necessários, como o web.xml e a pasta WEB-INF. Também é criado o arquivo messages.properties para que seja feita a internacionalização do projeto. A Listagem 6 exibe como executar esse comando no Spring Roo.

Listagem 6 – Comando para definir que o projeto, é um projeto web.

roo> web
mvc setup

Criação dos arquivos de configuração com o comando web mvc setup

Figura 6 – Criação dos arquivos de configuração com o comando web mvc setup.

Depois de definir que o projeto é web, podemos definir para quais entidades queremos criar as telas automaticamente. Com isso, o Spring Roo já cria as views e os controllers das entidades do projeto. Para essa criação é utilizado o comando web mvc all, onde, para todas as entidades do projeto, serão criadas as views e os controllers. A opção --package define o nome do pacote onde os controllers devem ser criados. O ~.web, significa que o pacote será o padrão criado no comando project, mais o .web. A Listagem 7 mostra a execução deste comando no Spring Roo.

Listagem 7 – Criação das telas e controllers para todas as entidades do projeto.

roo> web mvc all --package ~.web

Com esse comando são criados os controllers e os jsps para a criação, edição, listagem e remoção para todas as entidades definidas no projeto. A Figura 7 mostra a criação desses arquivos.

Depois desse comando, a aplicação base, com o CRUD criado para todas as entidades do projeto, já está pronta para ser usada. O código gerado utiliza o framework Spring MVC.

Criação das views e controllers do projeto. Figura 7 – Criação das views e controllers do projeto.

Por fim, para sair do Spring Roo e testar a aplicação, é executado o comando quit, que sai do Spring Roo e volta para a prompt de comandos do Windows. A Listagem 8 mostra como executar esse comando.

Listagem 8 – Comando para finalizar o Spring Roo.

roo> quit

Como mostra a Listagem 9, para executar e testar o projeto basta executar o comando do Maven tomcat:run no diretório do projeto. Com isso, será iniciado o servidor Tomcat com a aplicação criada no Spring Roo já rondado. Como mostra Figura 8, o Spring Roo gera uma aplicação com cadastro, remoção, listagem e edição para todas as entidades do projeto.

Tela da aplicação gerada com o Spring Roo

Figura 8 – Tela da aplicação gerada com o Spring Roo.

Listagem 9. Inicializado o Tomcat para executar a aplicação gerada.

mvn tomcat:run

Alguns comandos opcionais no Spring Roo são os comandos perform, sendo esses os mais utilizados: perform test e perform eclipse.

O comando perform test executa os testes unitários gerados automaticamente pelo Spring Roo. Esses testes foram criados com a opção --testAutomatically definido na criação das entidades. A Listagem 10 mostra como executar este comando.

Listagem 10 – Comando para executar os testes unitários gerados para as entidades do projeto.

roo> perform test

O comando perform eclipse prepara o projeto para ser aberto na IDE Eclipse. Para isso, são criados os arquivos de configuração do projeto necessários para o Eclipse. A Figura 9 apresenta uma tela do Eclipse com o projeto criado aberto. A Listagem 11 mostra como executar esses comandos.

Listagem 11 – Comando para configurar o projeto para ser aberto na IDE Eclipse.

roo> perform eclipse

Eclipse com o projeto criado pelo Spring Roo

Figura 9 – Eclipse com o projeto criado pelo Spring Roo.

Mais recursos do Spring Roo

O Spring Roo permite a criação de aplicações com diversas tecnologias e no exemplo da seção anterior foi apresentado como criar uma aplicação web básica com a ferramenta, mas além disso, a ferramenta permite a utilização de diversas outras tecnologias, como o JSF para a criação de aplicações MVC e a utilização do banco de dados MongoDB.

Outra funcionalidade interessante do Spring Roo é a geração de testes funcionais automatizados com o framework Selenium. Com o comando selenium test, são gerados testes para todas as telas de uma entidade. A Listagem 12 mostra o comando para isso, onde a opção --controler define para qual controller será gerado o teste, além de ser possível a escolha de um ou mais dos controllers gerados para a aplicação. A Listagem 12 mostra como executar este comando.

Listagem 12 – Comando para geração de testes automatizado com o framework Selenium.

 roo> selenium test --controller ~.web.PedidoController
 roo> selenium test --controller ~.web.ProdutoController 
 roo> selenium test --controller ~.web.FornecedorController
 roo> selenium test --controller ~.web.PedidoItemController
 roo> selenium test --controller ~.web.ClienteController

O Spring Roo permite a criação de aplicações MVC também com o framework Java Server Faces (JSF). Para isso, como mostra a Listagem 13, é necessário executar o comando web jsf setup e o comando –implementation, que define qual implementação do JSF será usada (Mojarra e o MyFaces). A opção --library define qual biblioteca de componentes será usada como, por exemplo, o Primefaces ou o RichFaces.

Listagem 13 – Configuração do projeto para utilizar o Java Server Faces.

roo> web jsf setup –-implementation APACHE_MYFACES -–library PRIMEFACES
roo> web jsf all –-package ~.jsf

O Spring Roo permite também fazer a persistência dos dados de um projeto utilizando o bando de dados NoSQL MongoDB. Para isso, basta substituir os comandos do exemplo que utilizavam o Hypersonic e o Hibernate.

Como mostra a Listagem 14, o comando mongo setup prepara o projeto para utilizar o MongoDB. Com isso, é importada a biblioteca do MongoDB e são criados os arquivos de configuração do banco. Para criar as entidades do projeto é utilizado o comando entity mongo. A opção --class define o nome e o pacote da classe Java onde será criada a entidade. Além disso, também é possível utilizar a opção –testAutomatically para criar os testes automatizados para a entidade.

Para criar os atributos das entidades é utilizado o mesmo comando mostrado anteriormente (field), que tem as mesmas opções que para a criação dos atributos de uma entidade que utiliza um banco de dados normal. No exemplo da Listagem 14 são criados os atributos nome, preço e descrição na entidade Produto, e os atributos nome, endereço, cpf, telefone e dataNascimento na entidade Cliente.

Listagem 14. Criação do banco de dados utilizando o MongoDB.

 roo> mongo setup --databaseName loja --host localhost --port 27017
 roo> entity mongo --class ~.model.Produto --testAutomatically 
 roo> field number --fieldName preco –-notNull –-type java.lang.Float
 roo> field string --fieldName nome -–notNull –-sizeMin 5
 roo> field string --fieldName descricao –-notNull
 roo> entity mongo --class ~.model.Cliente –testAutomatically
 roo> field string --fieldName nome –-notNull
 roo> field string --fieldName endereco –-notNull –-sizeMin 10 
 roo> field string --fieldName cpf –-notNull –-sizeMin 11 –-unique
 roo> field string –-fieldName telefone –-notNull –-sizeMin 10
 roo> field date --fieldName dataNascimento --type java.util.Date –-notNull

O Spring Roo é uma excelente ferramenta para a criação de aplicações em Java, com ele é possível criar rapidamente uma grande parte do código fonte de uma aplicação, com alguns dos principais frameworks do mercado como JSF, GWT, Spring e Hibernate.

A ferramenta também permite a criação da aplicação utilizando diversos bancos de dados, como MySQL, PostgreSQL e Hypersonic, e também permite a utilização do banco de dados NoSQL MongDB.

O código fonte gerado pela ferramenta é extensível e fácil de entender, possibilitando que o projeto seja iniciado com o Spring Roo e depois continuado diretamente em uma IDE, como o Eclipse.

Espero que o artigo seja útil e até a próxima!