face=Verdana>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
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
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
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
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,
PRIMARY KEY(id)
)
ENGINE=InnoDB;
CREATE TABLE Usuario (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
departamento_id INTEGER UNSIGNED NOT NULL,
email VARCHAR(255) NOT NULL,
senha VARCHAR(20) NOT NULL,
nome VARCHAR(255) NOT NULL,
sexo VARCHAR(20) NOT NULL,
PRIMARY KEY(id, Departamento_id),
...