quarta-feira, 27 de maio de 2015

Spring o que ? SPRING ROO !!!!!

Olá amigos do Preciso Estudar Sempre. Antes que vocês perguntem porque eu fiquei quase 1 mês sem publicar nada, eu já antecipo a resposta. Tempo, foi o que faltou. Assuntos não faltam embora sugestões sejam sempre bem vindas mas, sem tempo as coisas ficam difícies. Peço desculpa à todos pelo grande intervalo.

Bem, já que terminamos a parte mi mi mi, vamos falar de algo bom (e não é da texpix) ? Você já ouviu falar sobre o Spring Framework, né !? Aposto que sim mas, você já ouviu algo sobre os outros projetos da comunidade Spring ? Não ? Como não ?!  É amigo, eu imagino que você deve estar se sentindo assim:

"Ainnnn João, eu mal sei o Spring normal, quem dirá os outros projetos ??? O que eu faço agora ?? Ai meu deusssuuu"

Calma amigão, o mundo não vai acabar. A Spring community possuem vários projetos, não tem como você saber de todos mas, caso você queira conhecer eles, eu sugiro que você dê uma olhada no site. Deixarei linkado nas referências.

Um desses projetos é o Spring Roo. Com ele é possível criar sistemas com linhas de comando. Sim, você não leu errado, eu disse linhas de comando assim como, as que digitamos em um console de um sistema operacional.

Sua reação: "Meuuuuuu deuuuussuuuu, to passsadddaa, não acredittttôôô !!!"

Não irei explicar neste post o que significa inversão de controle e injeção de dependência. O intuito aqui não é esse. O que iremos abordar aqui hoje é como realizar a instalação do Spring Roo e como usar. É recomendado conhecimento pleno em programação e Java para que, seja possível absorver todo o conhecimento que estou tentando passar.

Agora que você já se recuperou do choque de que, é possível construir aplicações Java de uma forma veloz com linhas de comando, você se pergunta o motivo de usar isso na sua empresa e o que é na verdade esse framework.

Vamos retirar um trecho do manual (deixarei linkado nas referências):
Spring Roo is an easy-to-use productivity tool for rapidly building enterprise applications in the Java programming language. It allows you to build high-quality, high-performance, lock-in-free enterprise applications in just minutes. Best of all, Roo works alongside your existing Java knowledge, skills and experience. You probably won't need to learn anything new to use Roo, as there's no new language or runtime platform needed. You simply program in your normal Java way and Roo just works, sitting in the background taking care of the things you don't want to worry about. It's an approach unlike anything you've ever seen before, we guarantee it!
Segundo a documentação, o Spring Roo é uma ferramenta de fácil uso para construção rápida de aplicações corporativas na linguagem de programação Java. Ele permite que você construa aplicações com alta qualidade, performance e flexibilidade em poucos minutos. O melhor de tudo é que o Roo trabalha junto com o conhecimento, habilidade e experiências Java que já existem. Você provavelmente não precisará aprender nada novo para usar o Roo, pelo fato de não ser necessário nenhuma nova linguagem ou plataforma de execução. Você simplesmente programa da forma que sempre programou e o Roo simplesmente funciona, ficando no background da aplicação, tomando conta das coisas que você não quer se preocupar. É uma abordagem diferente de tudo que você já viu antes, nós garantimos isso.

Acho que não é necessário mais explicações sobre o que é o Roo e porque usar. Para podermos começar a usar o Roo, precisaremos:
  • Java 6 ou 7, com varíavel $JAVA_HOME instalada.
  • Maven, deixarei nas referências linkado como faz a instalação.
  • Spring Roo 3.11, clique aqui para baixar.
  • Console do seu sistema operacional.
OBS.: Estou usando o Windows.

Vamos começar a instalação do Spring Roo.

1 - Ponha o arquivo .zip do Spring Roo em uma pasta de sua preferência, e descompacte o arquivo.

2 - Depois de descompactado, abra seu painel de controle.

3 - Abra as variáveis do sistema.
Figura 1 - Tela das variáveis de sistema
4- Crie a variável de sistema ROO_HOME, onde seu valor será o lugar aonde você descompactou o arquivo com extensão zip.
Figura 2 - Instalação da variável de sistema ROO_HOME
5 - Edite a variável de sistema Path e adicione no fim do valor da variável (não se esqueça dos pontos e vírgula) o seguinte valor: %ROO_HOME%\bin
Figura 3 - Edição da variável Path
6 - Confirme as alterações e reinicie sua máquina.

7 - Abra o prompt de comando e digite roo, espere um pouco e a tela abaixo deverá ser exibida.
Figura 4 - Spring Roo
Agora que já terminamos a instalação da ferramenta, podemos começar a produzir. Como disse acima, iremos construir um sistema em poucos minutos e ele será web com acesso à um banco de dados através de um provedor. Mas antes de começarmos a construção precisamos definir um escopo para ele. Então, vamos pensar um sistema de um lava-carros. Esse sistema será bem simples, até porque senão for simples não conseguiremos terminar este post.

O dono do lava-carros, o sr Prohazca, nos contratou para a construção de um sistema onde, ele quer cadastrar seus funcionários, os carros dos clientes e os serviços de lavagem.

Depois do levantamento de requisitos, construímos o diagrama de classes.
Figura 5 - Diagrama de classe
Não nos preocuparemos com a simplicidade da modelagem, nosso intuito aqui é construir o sistema.

Podemos por a mão na massa e construir o sistema ?

Sim !! 

Crie uma pasta e nomeie como workspace_roo. Dentro dessa pasta crie uma pasta chamada lavacarros e abra o prompt de comando. Após aberto, acesse a pasta recém criada e execute o comando roo.

Execute os comandos abaixo:

 project --topLevelPackage br.com.lavacarros  

Este comando cria um projeto Maven. Nele é possível determinar o caminho de pacote. Este pacote será o nosso pacote de nível mais alto. Com base nele, nosso groupId será determinado. Podemos referenciar esse nosso pacote através do caractere ~.

O Spring Roo oferece um comando chamado hint. Esse comando oferece uma dica onde, ele indica qual o próximo passo tomar, por exemplo: Se você acabou de criar a pasta do projeto, iniciou o roo ali dentro, não sabe o que fazer e executou o hint, o roo ensinará como é possível construir um projeto. Essa ajuda é muito importante para usuários não tão experientes.

Temos agora algo parecido com isso:
Figura 6 - Estrutura do nosso projeto
Agora vamos determinar a camada de persistência da nossa aplicação.

 jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY  

É possível especificar diversos provedores de persistência e bancos de dados. Para mais detalhes consulte o manual o qual, estará linkado aqui embaixo com os dados do nosso projeto.

Vamos criar nossas entidades agora. Execute o seguinte comando.

 entity jpa --class ~.model.entity.Carro --testAutomatically  

Lembra do ~ que citamos acima ? Aí está ele. Estamos informando ao comando entity que queremos criar uma entidade JPA no pacote entity, pertencente ao pacote model do nosso pacote principal. Note também que marcamos esse comando com --testAutomatically. Isso significa que nosso projeto já estará integrado com testes automatizados do Selenium. Execute o comando acima para as entidades Servico e Funcionario.

Já estamos quase terminado, aguenta firme !!

Vamos criar os atributos das nossas entidades. Vamos começar pela classe Servico.

 field number --fieldName id --type java.lang.Long --class ~.model.entity.Servico  
 field date --fieldName dtServico --type java.util.Date --class ~.model.entity.Servico  

Adicione agora os atributos da classe Carro.

 field number --fieldName id --type java.lang.Long --class ~.model.entity.Carro
 field string --fieldName placa --class ~.model.entity.Carro --notNull
 field number --fieldName ano --type java.lang.Integer --class ~.model.entity.Carro
 field string --fieldName marca --class ~.model.entity.Carro --notNull
 field string --fieldName modelo --class ~.model.entity.Carro

Os comandos são auto explicativos. Adicione os atributos da classe Funcionario,

 field number --fieldName id --type java.lang.Long --class ~.model.entity.Funcionario  
 field string --fieldName nomeCompleto --class ~.model.entity.Funcionario --notNull --sizeMax 100
 field number --type java.lang.Long --fieldName cpf --class ~.model.entity.Funcionario --notNull
 field number --type java.lang.Long --fieldName rg --class ~.model.entity.Funcionario --notNull
 field date --type java.util.Date --fieldName dtNascimento --class ~.model.entity.Funcionario

Agora que já adicionamos os atributos em nossas classes, vamos criar seus relacionamentos.

 field reference --fieldName funcionario --type ~.model.entity.Funcionario --class ~.model.entity.Servico  
field reference --fieldName carro --type ~.model.entity.Carro --class ~.model.entity.Servico --notNull

Falta muito pouco para terminarmos. Execute os seguintes comandos:

 web mvc setup
 web mvc all --package ~.web

O comando acima escaneia todo o projeto a fim de, analisar todas as entidades e criar a camada web pertinente à ela. O atributo package é usado a fim de especificar o pacote padrão para a camada web de nossa aplicação.

Pronto !!! Agora sim !!! Terminamos !! Podemos por para funcionar. Digite exit no roo e execute o comando:

 mvn tomcat:run  

Além de termos um sistema construído em poucos instantes, conseguimos realizar seu deploy através de comando único. É importante ressaltar que os comandos do maven só funcionarão, se a pasta corrente do prompt for onde está o arquivo pom.xml.

O Spring roo oferece suporte a segurança, utilizando Spring Security, entre outras características. Para baixar nosso projeto pronto com a documentação do roo e o diagrama de classes, clique aqui.

Sugestões ?! Críticas ?! Elogios ?! 

Deixe aí nos comentários ou na nossa página do facebook.


Referências:
Site oficial do Spring: https://spring.io/
Link para baixar Spring Roo: http://projects.spring.io/spring-roo/#running-from-shell
Instalação do maven: https://maven.apache.org/download.cgi - seção Installation Instructions
Nosso projeto: https://www.dropbox.com/s/f4v7361gkwkml61/workspace_roo.rar?dl=0
Leia Mais ››