Esse artigo faz parte da revista Java Magazine edição 65. Clique aqui para ler todos os artigos desta edição

AN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

PAN>

m Spring Framework

Desenvolvendo uma aplicação completa com Spring Framework, JSF e JPA

Saiba também como se tornar um profissional certificado em Spring pela SpringSource

 

De que se trata o artigo:

Desenvolvimento de uma aplicação completa para a Web com o Spring Framework e os serviços Java EE de persistência e transação.

 

Para que serve:

Estabelecer um modelo de componentização mais simples que os EJBs e permitir o uso de serviços Java EE de maneira simples, configurável e não intrusiva. Por conseqüência, reduz-se linhas de código e torna a aplicação mais fácil de testar num framework leve e baseado em injeção de dependências.

 

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

Mostra como o Spring Framework pode ser usado para gerenciar os componentes de negócios da aplicação. Através de anotações e algumas configurações em XML, o Spring é usado numa aplicação web integrada com o JSF e JPA. Assim, o artigo apresenta o desenvolvimento completo de uma aplicação desde a componentização definida através de interfaces e a implementação gerenciada através do framework.

 

Criando uma aplicação web com Spring Framework:

O Spring é um dos frameworks mais controversos e populares atualmente que sugere uma abordagem diferente para a componentização de aplicações Java EE sem o uso de Enterprise JavaBeans (EJB). Neste artigo, o Spring Framework é ilustrado através de uma aplicação simples, completa e integrada com JavaServer Faces (JSF). O exemplo cobre desde a modelagem inicial até a implementação dos componentes de negócios e telas na web.

 

O Spring Framework é um projeto open source criado com a intenção de estabelecer uma proposta alternativa ao modelo de componentização do Java EE e boas práticas no desenvolvimento de aplicações corporativas sem o uso de EJBs (Enterprise JavaBeans).

No livro Expert One-on-One J2EE Design and Development publicado em 2002 e escrito por Rod Johnson (criador do Spring), foram apresentados vários exemplos e boas práticas de desenvolvimento de aplicações enterprise. A partir dos códigos ilustrados neste livro nasceu em fevereiro de 2003 a primeira versão do projeto, batizado de Spring Framework e aberto para a comunidade de software livre. Contudo, as idéias que deram origem às práticas descritas no livro foram anteriores e datam de 2000, com base na experiência do autor em sucessivos projetos de sucesso.

O objetivo principal do Spring foi estabelecer um modelo de componentização mais simples que o proposto através dos EJBs da plataforma J2EE. Este modelo visava oferecer uma maneira simples, configurável e não-intrusiva de criar, configurar e manter componentes de negócios com acesso aos serviços J2EE que outrora estariam disponíveis somente através de EJBs. Contudo, os EJBs, na época da concepção do Spring, estabeleciam um modelo de componentização burocrático e trabalhoso que exigia a implementação de algumas interfaces, a criação de arquivos de configuração (deployment descriptors) e o empacotamento complexo para ter acesso aos serviços J2EE disponibilizados através de um contêiner num servidor de aplicações. Em contra partida, a alternativa proposta pelo Spring sugeria o uso de classes simples em Java para a definição da lógica de negócios sem a necessidade de implementar interfaces de um framework para ter acesso a estes serviços.

Características do Spring Framework

Para atender aos seus objetivos, o Spring Framework realiza as seguintes características:

Lightweight - O Spring oferece uma arquitetura modular e consistente que permite o uso de recursos isolados do framework de acordo as necessidades. Assim, torna-se possível usar o Spring, por exemplo, apenas para simplificar os códigos que usam JDBC, ou para gerenciar todos os componentes de negócios da aplicação. Será possível aplicar o Spring incrementalmente numa aplicação existente. Esta característica também está relacionada ao fato do Spring não precisar de um contêiner de um servidor de aplicações para disponibilizar os serviços Java EE para os componentes da aplicação. Assim, a aplicação pode ser executada num ambiente mais leve e exigindo uma capacidade menor da máquina, comparado às exigências dos servidores Java EE.

Orientado a Aspectos (AOP) - Através dos conceitos da programação orientada a aspectos, ao complementar a programação orientada a objetos, o Spring permite separar a lógica de negócios, implementada em componentes de negócios com classes simples, dos serviços de infra-estrutura e serviços tecnológicos implementados pelo Spring ou outros frameworks. Assim, o Spring oferece para as aplicações a implementação dos serviços Java EE via integração com outros frameworks de maneira não-intrusiva. Portanto, os objetos fundamentais da aplicação poderão se limitar a realizar somente a lógica de negócios e não ser responsáveis por gerenciar ou obter os serviços Java EE.

Orientado à Injeção de Dependências - O Spring promove o desacoplamento entre os componentes de negócios da aplicação e os componentes que realizam os serviços Java EE ao gerenciar o ciclo de vida destes objetos. Esta característica do Spring induz à organização da aplicação segundo um padrão de projetos onde os componentes de negócios não são responsáveis por obter a referência para outros objetos que usam, mas recebem do Spring as referências necessárias para estes objetos durante a instanciação dos seus componentes.

Suporte ao conceito de Contêiner - Através de um contêiner simples e leve o Spring pode manter e gerenciar o ciclo de vida dos objetos instanciados para a aplicação. Com esta característica, o Spring permite o controle de como os objetos devem ser instanciados, configurados e relacionados através de Injeção de Dependências.

Framework - O Spring também é um framework ao disponibilizar vários recursos prontos a serem incorporados à aplicação. Estes recursos permitem a integração dos componentes da aplicação com serviços Java EE implementados por outros frameworks. Várias das boas práticas sugeridas pelo Spring estão encapsuladas em classes prontas a serem reusadas, também reduzindo o número de linhas de código na aplicação.

O Framework

Ao longo destes anos de existência e evolução, o Spring tornou-se uma plataforma de desenvolvimento de aplicações Enterprise que promove um modelo de integração dos componentes de negócios da aplicação com os serviços Java EE. Este modelo realizado pelo framework permite os componentes de negócios de uma aplicação ter acesso aos serviços Java EE de maneira simples, leve, configurável e não-intrusiva.

O Spring framework não pretende reinventar a roda. Pretende tornar o desenvolvimento de aplicações enterprise com acesso aos serviços Java EE mais simples, leve e testável. Não estão disponíveis no Spring uma implementação de pool de conexões, um mecanismo de mapeamento Objeto/Relacional ou um gerenciador de transações distribuído. Por outro lado, o Spring disponibiliza um pacote de classes que implementam um modelo consistente para integração com diversos frameworks ou bibliotecas que implementam estes recursos. Estão disponíveis no Spring classes que permitem o uso do Commons DBCP como implementação de pool de conexões, ou DataSource obtido via busca JNDI; integração com o TopLink, Hibernate, JPA ou JDO com gerenciamento de transação realizado por uma implementação de JTA. Além de outras estratégias de gerenciamento de transações e integração com diversos outros frameworks.

A Figura 1 ilustra numa estrutura em árvore os diversos recursos de integração que o Spring disponibiliza. Esta figura apresenta as integrações com tecnologias que implementam serviços Java EE, tais como, mensagens, conectores, acesso remoto, transação e e-mail. Também são ilustradas as integrações com diversos outros frameworks para persistência via mapeamento O/R, desenvolvimento na WEB com o padrão de projetos MVC e tecnologias para desenvolvimento de interfaces ricas.

 

Figura 1. Ilustração dos principais módulos do Spring e integração com as tecnologias.

Os elementos-folha nesta ilustração representam as tecnologias ou frameworks que o Spring permite integrar. Contudo, em alguns casos o Spring traz uma implementação própria como, por exemplo, o Spring MVC e Spring JDBC (templates e datasources).

A partir desta ilustração, pode-se identificar os principais módulos do Spring Framework que trazem classes já prontas para realizar as características de injeção de dependências, AOP e integração com outros frameworks e tecnologias. As seguintes partes do Spring estão ilustradas:

Core

Implementa as classes que realizam um contêiner de Inversão de Controle e Injeção de Dependências. Neste módulo o Spring implementa o conceito de fábrica de objetos (BeanFactory) para gerenciar o ciclo de vida dos componentes de negócios. Esta fábrica permite configurar os componentes através de injeção de dependências ao fornecer referências para outros componentes gerenciados pelo Spring.

O conceito de contexto de aplicação (ApplicationContext) também é implementado neste módulo para prover o serviço de internacionalização (i18N) a partir de arquivos de mensagens, comunicação entre os componentes via propagação de eventos e o uso declarativo e simplificado num contexto específico de uso, tais como, em aplicações desktop ou aplicações web configurados a partir de um descritor (web.xml).

Web

Recursos para implementação de aplicações Web, como integração com frameworks MVC, uma implementação própria de MVC e integração com tecnologias de visualização.

Nesta parte do Spring estão as classes necessárias para integração com JavaServer Faces (JSF), Struts, Portlets (JSR-168) e outras tecnologias de desenvolvimento web e tecnologias de visualização. A partir deste módulo torna-se possível, por exemplo, desenvolver Managed Beans do JSF ou actions do Struts como componentes gerenciados pelo Spring e configurados por injeção de dependência.

DAO

Disponibiliza classes utilitárias para desenvolvimento de DAOs com JDBC e gerenciamento de transações. Tarefas repetitivas e sujeitas a erros de programação são implementadas em classes de template neste módulo. O Spring provê código pronto em classes para realizar os passos necessários nos métodos dos DAOs das entidades persistentes da aplicação via JDBC, TopLink, iBatis, Hibernate, JDO ou JPA. Tarefas como abrir conexão ou sessão, demarcar transação, executar operação de persistência, percorrer o resultado das consultas, fechar a conexão e tratamento de exceções para desfazer a transação corrente.

AOP

Disponibiliza o conceito de aspectos através do frameworks AOP Alliance e AspectJ para integrar os componentes de negócio com os serviços enterprise.

ORM

Implementa o suporte para integração com frameworks de mapeamento objeto/relacional. Neste módulo encontram-se classes que dão suporte, por exemplo, ao Hibernate, JPA, iBatis ou TopLink. Estas classes podem ser declaradas como beans nos arquivos de configuração do Spring para gerenciamento automático pelo framework. Assim, a aplicação não precisa ter linhas de código realizando as atividades de inicialização ou configuração de algum framework de mapeamento objeto/relacional.

Java EE

Disponibiliza classes utilitárias para integração com serviços Java EE. Nesta parte estão implementadas as classes que permitem obter um objeto (inclusive EJBs) via busca JNDI e tratá-lo como um componente gerenciado pelo Spring para injeção de dependência em outros componentes. Simplifica a programação para o envio de mensagens com objetos, através de um serviço JMS ou para um servidor de e-mails.

Remoting

Expõe os métodos dos componentes de negócios para invocação remota. Classes utilitárias deste módulo permitem invocar métodos através de um web service (via JAX-RPC, JAX-WS, Axis ou XFire), chamadas RMI, chamadas HTTP ou envio de mensagens JMS encapsulando a invocação remota a um método.

Considerando esta diversidade de tecnologias integradas ao Spring e o crescimento na procura de profissionais qualificados, a empresa SpringSource anunciou um programa de certificação. Este programa visa promover uma maneira efetiva de medir o nível de conhecimento dos desenvolvedores na plataforma Spring. Através deste programa de certificação os desenvolvedores terão um instrumento para demonstrar a sua expertise em Spring. Para mais informações, veja o quadroA certificação SpringSource Framework Professional (S2FP)”.

Spring Portfólio

A popularidade do Spring na comunidade open source foi tão grande que motivou outros desenvolvedores a criar projetos que promoviam outras integrações ou simplesmente o complementavam. Vários utilizam o mesmo modelo de organização usado pelas classes do próprio Spring para facilitar o uso. A Figura 2 ilustra num diagrama os diversos frameworks complementares que compõem o chamado Spring Portfólio.

 

Figura 2. Ilustração dos principais produtos do Spring Portfólio que complementam o Spring Framework.

Nesta ilustração, os elementos vinculados ao Spring Framework são pacotes distribuídos separadamente e disponíveis em um ou mais arquivos JAR. Cada produto tem uma página própria de documentação e download, acessível na página Spring Projects (http://www.springframework.org/projects).

Spring Security - Segurança declarativa via XML ou anotações com suporte a AOP e integração com tecnologias de segurança: JAAS, LDAP, DAO, OpenID, CAS, X509, Windows NTLM;

Spring Web Services - Suporte a web services a partir da definição do XML Schema e WSDL (Data Contract e Service Contract);

Spring Web Flow - Suporte ao controle de fluxo de navegação web, integração com JSF, conversação e Ajax;

Dynamic Modules for OSGi - Simplifica o uso da API OSGi através do Spring com POJO's;

Spring Modules - Projeto guarda-chuva que implementa a integração com diversos outros frameworks e ferramentas;

Spring Rich Client ...

Quer ler esse conteúdo completo? Tenha acesso completo