Voltar
Por que eu devo ler este artigo:

O artigo mostra a importância das ferramentas da Spring Source através da primeira parte de um tutorial, que tem como objetivo construir uma aplicação web completa. Tudo isso de forma simples, rápida, com qualidade e usando apenas frameworks Spring.

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

A utilização de diversas tecnologias de uma mesma empresa traz como principal benefício a possibilidade de integrá-las sem traumas. Além disso, não é qualquer framework que alia produtividade, desempenho e boas práticas, como é o caso do Spring Roo, que, em conjunto com os outros projetos da Spring Source, traz “super poderes” para os desenvolvedores.

Resumo DevMan:

O desenvolvimento de aplicações Java para web é uma tarefa complexa que costuma envolver um grande número de frameworks com o objetivo de aumentar a qualidade do produto final. Neste contexto, a Spring Source é uma empresa que possui mais de 20 projetos para facilitar a vida do desenvolvedor. Podemos combinar suas principais tecnologias para resolver grande parte das necessidades dos sistemas. Com isso, a fim de demonstrar o que é possível fazer, este artigo apresenta a primeira parte da construção de um site de compras coletivas utilizando os frameworks Spring Core, Spring Roo, Spring Data e Spring Security.

A escolha de tecnologias para a construção de aplicações nunca foi uma tarefa trivial. São diversos os fatores, ligados aos requisitos não funcionais do sistema e aos interesses dos stakeholders, que devem ser levados em consideração. Entre eles, existem alguns que são sempre desejáveis, como: modularidade, onde o software é organizado em componentes coesos e fracamente acoplados; desempenho, permitindo respostas rápidas às requisições; segurança, garantindo a autenticação e autorização dos usuários; e testabilidade, possibilitando testar facilmente o software. A escolha ainda tem que garantir características relacionadas às metas de negócio, como por exemplo, tempo para chegar ao mercado (time to market) e custo-benefício.

No mercado, atualmente, existem muitos frameworks que ajudam a alcançar estes objetivos de projeto. Entretanto, são poucas as tecnologias que contemplam em uma única estrutura grande parte das características desejadas. Este é o caso do framework Spring, uma opção open source que auxilia os desenvolvedores na construção de aplicações com qualidade e produtividade. Além do mais, usando apenas as ferramentas da Spring Source, você não precisa se preocupar com a integração de vários frameworks de fornecedores diferentes, reduzindo assim os riscos envolvidos.

A Spring Source mantém um conjunto de projetos que podem ser combinados para atender as necessidades específicas das aplicações. Entre as opções disponíveis, estão soluções para: gerenciar componentes, criar e manipular web services, trabalhar com transações, cuidar da segurança, comunicação remota, acesso a dados, programação orientada a aspectos (AOP), manipular informações de provedores de Software as a Service (SaaS), entre diversas outras possibilidades. Algumas soluções fazem parte do principal projeto da empresa, o Spring Core. Entre suas funções, está prover um container de Inversão de Controle (IoC), que fornece configuração centralizada e automatizada para os componentes Java. Este container traz vantagens para as aplicações como modularidade e testabilidade.

A Java Magazine reconhece a importância do arsenal tecnológico da Spring Source e, com isso, está sempre publicando artigos com seus últimos avanços (Edições 93, 88, 87, 84, 81, 80, 79, 78, 77, 74 e 73), assim como sua integração com outros frameworks (Edições 95, 92 e 83). Esta edição traz a primeira parte de um tutorial com o objetivo de mostrar o potencial e a produtividade dos frameworks da empresa através da construção de um site de compras coletivas. De forma complementar, buscaremos ainda contemplar as características de qualidade discutidas anteriormente.

Deste modo, nessa etapa discutiremos os projetos do Spring que serão utilizados em nossa aplicação, como é o caso do Spring Core, Spring Data, Spring Roo e Spring Security. Em seguida, iniciaremos a construção do site, apresentando o escopo, a modelagem conceitual estrutural e a arquitetura. Por fim, começaremos o passo-a-passo detalhado do desenvolvimento que será finalizado na segunda parte do artigo.

Modelagem conceitual estrutural: Segundo Antoni Olivé, um modelo conceitual é uma representação do domínio utilizada para analisar um determinado contexto. A modelagem conceitual estrutural, especificamente, é desenvolvida para criar modelos que distinguem objetos, relacionamentos e conceitos. Um exemplo conhecido é o diagrama de classes da UML. Um esquema conceitual não inclui aspectos de projeto, como tecnologias.

Ferramentas da família Spring

Nesta seção discutiremos os aspectos relevantes dos frameworks considerados na construção do site. Além disso, entenderemos de que maneira eles podem aumentar a qualidade das aplicações. Como não serão contempladas as mais de 20 tecnologias da Spring Source, vale a pena o leitor conhecer melhor os outros projetos (veja na seção Links o endereço para eles).

Spring Core

O Spring Core, ou Spring framework, como costuma ser chamado, é o projeto mais conhecido da Spring Source, com grande importância por ser uma dependência para todos os demais projetos da empresa. Seu objetivo principal é gerenciar os objetos de negócio das aplicações através do uso de POJOs. Ele também oferece um container que implementa o padrão de projeto Inversão de Controle (IoC). Este padrão diminui o acoplamento dos componentes do sistema e facilita a realização de testes. Com isso, ao utilizar o framework, seus projetos são beneficiados com duas características de qualidade desejáveis, a modularidade (com a diminuição do acoplamento) e a testabilidade.

O Spring framework possui ainda diversos módulos para: gerenciamento de transações, abstração de acesso a dados, programação orientada a aspectos (AOP) e desenvolvimento web, sendo os dois últimos empregados no site de compras coletivas e descritos a seguir.

AOP é um paradigma que permite aos desenvolvedores separar os interesses comuns do sistema com o objetivo de remover comportamentos que ocorrem em diversas classes e que não se encaixam naturalmente dentro delas. Para resolver este problema, este paradigma introduz o conceito de aspectos, os quais são responsáveis por encapsular os comportamentos que afetam estas classes. O módulo AOP que o Spring oferece é capaz de gerenciar transações declarativas, auxiliando na abstração de transação do Spring framework. Ele ainda permite o uso de aspectos personalizados para a resolução de problemas específicos. No caso deste artigo, AOP será utilizada pelo framework Roo (descrito nesta seção) para separar em arquivos distintos códigos mantidos pelo Roo das classes Java.

Quando falamos em desenvolvimento web com Spring, podemos contar com o apoio do módulo Spring Web MVC. Este framework possui integração com o container IoC do Spring Core, permitindo a construção de aplicações web com baixo acoplamento. Suas annotations trazem flexibilidade e produtividade para a definição de controllers e configurações. Além disso, ele também fornece a infraestrutura necessária para a criação de web services REST. No site de compras coletivas, este módulo permitirá a utilização do padrão arquitetural MVC na camada de apresentação, com a intenção de separar as responsabilidades, apoiar o controle e simplificar a comunicação com a camada de serviços.

Spring Data

Nos últimos anos, houve o surgimento de um grande número de soluções de bancos de dados não relacionais, os chamados NoSQL (Not only SQL). Esta nova onda ganhou força no mercado por resolver problemas como escalabilidade de uma forma simples. Com esta novidade, a Spring Source percebeu uma nova oportunidade de negócio, e criou o Spring Data, um projeto com o objetivo de tornar mais fácil a integração de aplicações Spring a estes novos modelos de bancos de dados, aproveitando ainda para melhorar o suporte aos bancos de dados relacionais. Podemos também chamá-lo de projeto “guarda-chuva”, pois está organizado em vários subprojetos específicos, como é o caso do MongoDB, Neo4J, Redis e JPA.

No site de compras coletivas adotaremos o subprojeto JPA para armazenar as informações das entidades da aplicação (discutidas na seção “Modelagem Conceitual do Sistema”). A escolha deste subprojeto, ao invés do suporte de acesso a dados disponível no Spring Core, possui bons motivos. O primeiro diz respeito às vantagens que o Spring Data traz, sendo a mais relevante a redução dos códigos necessários para implementação do acesso a dados através do conceito de repositório de dados. Um repositório disponibiliza todos os métodos de um CRUD com apoio da interface JpaRepository, além do mais, outras funções complexas de manipulação de dados podem ser desenvolvidas normalmente. O projeto ainda fornece vantagens como: suporte ao QueryDSL (semelhante a API Criteria do JPA), auditoria transparente das classes de domínio e suporte a paginação. Outro bom motivo para utilizá-lo é que provavelmente a Spring Source reduzirá o apoio ao módulo de acesso a dados disponível no Spring Core para focar apenas no Spring Data.

Com o subprojeto JPA as aplicações ganham uma maneira eficiente e produtiva de garantir o acesso às informações.

Spring Roo

Sabemos que desenvolver aplicações web com Java não é uma tarefa simples. A equipe está sempre sujeita a codificar um grande número de configurações e classes que não dizem respeito à lógica de negócio. A Spring Source reconhece esta complexidade, e pensando nisso, lançou o Spring Roo, uma ferramenta que permite a construção rápida de aplicações Java. Este projeto torna possível um desenvolvimento com boas práticas, alta qualidade e desempenho, deixando o programador se preocupar apenas com questões específicas de cada sistema.

O Spring Roo funciona através de um “shell”, onde podemos digitar comandos para criar projetos e gerar automaticamente grande parte do código e configurações básicas. Outra maneira de utilizá-lo é junto com IDEs como Eclipse e Spring Tool Suite.

A ferramenta faz uso da programação orientada a aspectos (AOP), disponível no Spring framework, para manter os códigos gerados em uma unidade de compilação diferente. Isso significa, na prática, que ele faz uso de Inter-Type Declaration (ITD) para criar arquivos no formato *_Roo_*.aj. Estes arquivos isolam atributos e métodos das classes Java que o Roo julga importante por ocorrerem com frequência. Alguns exemplos de atributos são: id e version, e de métodos são: getters, setters e o toString(). No momento da compilação do código, o AspectJ Compiler irá realizar um merge entre os arquivos .aj e os respectivos .java, produzindo os .class completos. A vantagem desta abordagem é que podemos trabalhar normalmente com as classes Java e não precisamos nos preocupar com os arquivos .aj (que não devem ser modificados). Além disso, os aspectos permitem um processo transparente, no qual não existem referências aos arquivos ITD dentro das classes Java.

O Spring Roo cria automaticamente um atributo id para todas as classes definidas. Dessa forma, torna-se desnecessário definirmos outro atributo com o mesmo propósito de identificação para os objetos.

Nós utilizamos o Spring Roo no site de compras coletivas para criação de todos os códigos e configurações básicas nos primeiros passos do desenvolvimento. O restante da codificação será feita na IDE Eclipse.

Com o apoio do Spring Roo, podemos garantir características como manutenibilidade e produtividade. Isto significa que você pode fazer alterações nas classes Java, como por exemplo, inserir um novo atributo, e a ferramenta irá alterar automaticamente os arquivos .aj para incluir os métodos get() e set() deste atributo. A produtividade fornecida pelo framework pode auxiliar a equipe de desenvolvimento a alcançar uma das metas de negócio, o tempo para chegar ao mercado (time-to-market). Com isso o produto pode ser entregue antecipadamente e/ou os requisitos funcionais e não funcionais serem validados previamente, permitindo mudanças antes da entrega e garantindo a satisfação do cliente. A ferramenta ainda gera códigos de qualidade que adotam boas práticas. Isso pode ser observado, por exemplo, na forma como o código é estruturado e na utilização adequada dos recursos do Spring framework.

Spring Security

Entre as várias questões relacionadas à qualidade dos sistemas, uma das principais preocupações está na garantia da segurança. Uma aplicação precisa proteger das pessoas mal intencionadas os dados e informações armazenados. Com este objetivo a Spring Source possui um projeto específico, denominado Spring Security, que busca resolver o problema lidando com dois elementos básicos de segurança, a autenticação e a autorização.

A autenticação é um processo de verificação para garantir que um usuário possa ter acesso à aplicação. No Spring Security ela pode ser realizada de várias maneiras. Uma forma simples é através da geração automática de um formulário de identificação. A ferramenta permite ainda muitas outras técnicas avançadas, que envolvem a integração com outras ferramentas e sistemas, como por exemplo, Kerberos e OpenID.

...
Quer ler esse conteúdo completo? Tenha acesso completo