Artigo Java Magazine 50 - Spring com Struts e JPA
Artigo publicado pela Java Magazine 50.
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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo