Artigo Java Magazine 50 - Spring com Struts e JPA

Artigo publicado pela Java Magazine 50.

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

Clique aqui para ler esse artigo em PDF.

Spring com Struts e JPA

Da camada de apresentação ao acesso a dados com Spring

 

Nesse artigo veremos como o Spring se integra com o Apache Struts e o seu controle transacional através de anotações. Apresentaremos também o suporte à Java Persistence API (JPA), em dois modelos: utilizando as classes utilitárias do Spring e fazendo uso apenas das classes e anotações do JPA (neste último modelo é como se estivéssemos trabalhando com EJB 3.0 puro).

 

Exemplo e preparação do ambiente

O exemplo apresentado neste artigo consiste de uma aplicação web simples de cadastro de usuários. Para cada usuário, mantemos email, nome, senha, sexo e o departamento em que trabalha. A Figura 1 apresenta a arquitetura da aplicação. A aplicação está dividida nos seguintes pacotes:

 

• br.com.jm.springjpa – Contém as classes Usuario e Departamento e a enum Sexo. Essas classes são tornadas persistentes através de anotações do JPA.

• br.com.jm.springjpa.action – Inclui as actions e outras classes relacionadas à camada de apresentação e controle.

• br.com.jm.springjpa.facade – Contém a classe Facade utilizada na aplicação. Nosso Facade é responsável pela lógica de negócios (que praticamente não existe neste exemplo simples, já que apenas delegamos chamadas à camada de acesso a dados) e pelo controle transacional, realizado através dos recursos do Spring.

• br.com.jm.springjpa.dao – Compreende as classes e interfaces que representam a camada de acesso a dados. Na primeira versão do exemplo, essas classes se apóiam nos utilitários do Spring para facilitar o acesso a dados. Já na segunda versão, são utilizadas somente as anotações do JPA.

 

Figura 1. Estrutura do projeto de exemplo

 

Preparando o ambiente

Para entender melhor o exemplo (contidos em um ZIP disponível para download no site da Java Magazine), é importante criar o ambiente para execução e instalá-lo. Para a compilação e execução, utilizaremos o Eclipse + WTP (Web Tools Project) e um container web suportado pelo WTP. Recomendamos o Apache Tomcat, em sua versão 5.5 ou superior.

Utilizamos a versão 5.0 do Java SE ou mais recente, e o banco de dados MySQL. O ZIP do exemplo contém o driver deste BD na raiz. Copie o arquivo mysql-connector- java-5.0.x-bin.jar para a pasta common/ lib de sua instalação do Tomcat (ou lib, caso esteja utilizando o Tomcat 6).

Em seguida, dentro do Eclipse, importe os dois WARs (springjpa.war e springjpadao. war), presentes no ZIP, através de File|Import>Web>WAR. Utilize o nome dos arquivos como os contextos das aplicações (sem a extensão .war, é claro), e na tela seguinte não selecione nenhum dos JARs. A estrutura dos projetos deverá ser similar à da Figura 2.

 

Figura 2. Estrutura dos projetos, contendo as duas versões do exemplo, após importação no Eclipse

 

Entendendo a infra-estrutura dos exemplos

Como vamos trabalhar com dois mecanismos diferentes para o acesso a dados,criamos dois exemplos, que são idênticos em todas as camadas exceto na de acesso a dados. O objetivo dessa separação é simplificar o entendimento e os testes pelos leitores. É utilizado o Struts 1.3 na camada de apresentação e controle, e na camada de serviço utilizamos o controle transacional do Spring, através de anotações na classe e nos métodos. Já na camada de acesso a dados, fazemos uso da Java Persistence API.

Quatro arquivos fundamentais estão na  pasta WEB-INF. O arquivo applicationContext. xml é a configuração do Spring, lido por um listener registrado no web.xml. O action-servlet.xml é outro arquivo do Spring que contém apenas as configurações das actions do Struts. Nele, é importado o arquivo applicationContext.xml para a obtenção dos beans que serão injetados nas actions. Por fim, temos o arquivo strutsconfig. xml, que como sabemos, armazena a configuração do Struts.

O exemplo utiliza uma base de dados chamada “login”, que deve ser criada no MySQL. Crie as duas tabelas e insira os dados necessários à execução do exemplo, conforme o código apresentado na Listagem 1.

 

Listagem 1. Script para a criação da tabela no MySQL

CREATE TABLE Departamento (

id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

nome VARCHAR(255) NOT NULL," [...] continue lendo...

Artigos relacionados