Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML.
Spring com JSF e JDBC
Da camada de apresentação ao acesso a dados com o Spring
Veja na prática como o Spring se integra ao JSF e reduza a quantidade de código para acesso a dados com JDBC
Daniel Cicero Amadei
O Spring, além de ser um container capacitado a realizar a injeção de dependências, oferece uma série de abstrações para facilitar tarefas comuns
O framework aumenta a produtividade do desenvolvedor, ao reduzir a quantidade e a complexidade do código-fonte.
Este artigo mostra como fazer a integração com o JSF, permitindo injetar nos beans gerenciados pelo JSF objetos registrados no Spring. Vemos também como o Spring realiza o controle transacional declarativos e a sua arquitetura para acessos a dados, com foco no suporte facilitado a JDBC. Nessa área, o framework fornece recursos para reduzir a quantidade de código necessária através de utilitários e templates.
Sobre o exemplo
O exemplo que criaremos neste artigo baseia-se em uma aplicação web simples, de cadastro de contatos (com nome, e-mail e telefone). A Figura 1 apresenta a arquitetura da aplicação, que está dividida nos seguintes pacotes:
l br.com.jm.springjsf – Contém a classe Contato, utilizada como objeto de domínio.
l br.com.jm.springjsf.form – Contém o managed bean utilizado pelo JSF dentro da aplicação.
l br.com.jm.springjsf.facade – Inclui a classe que representa o Facade utilizada na aplicação. Como veremos adiante, essa classe é responsável pela lógica de negócios (que é trivial), já que apenas delegamos chamadas à camada de acesso a dados) e pelo controle transacional, realizado através dos recursos do Spring.
l br.com.jm.springjsf.dao – Classes e interfaces da camada de acesso a dados. Essas classes se apóiam em recursos do Spring para facilitar o acesso a dados.
Figura 1. Arquitetura da aplicação de exemplo.
Preparação do ambiente
O projeto de exemplo está disponível para download no site da Java Magazine. Para a sua criação e execução, utilizaremos o Eclipse + WTP (Web Tools Project) que pode ser obtido no site download.eclipse.org/webtools/downloads. Se você já tem o Eclipse instalado, pode instalar o WTP separadamente através do site de atualizações do Callisto. Além disso, é necessário um container web suportado pelo WTP. Recomendamos o Apache Tomcat, em sua versão 5.5 ou mais recente. Por fim, deve ser utilizada a versão 5.0 ou superior do Java SE.
Como banco de dados, adotamos o MySQL, preferencialmente a versão 5. Precisaremos também do seu driver JDBC. O arquivo ZIP do exemplo inclui o driver na raiz. Extraia do ZIP o arquivo mysql-connector-java-<versão>-bin.jar e copie-o para a pasta common/lib de sua instalação do Tomcat (ou lib, caso esteja utilizando o Tomcat 6).
Com o Eclipse funcionando, basta importar o arquivo springjsf.war também incluído no ZIP, através de File\Import>Web>WAR. Utilizamos “springjsf” como contexto da aplicação. A estrutura do projeto deverá ser similar à da Figura 2.
Podem ocorrer problemas com a versão do código-fonte utilizada no projeto, se mais de uma versão do Java SE estiver configurada no Eclipse. Para corrigir esse problema, clique com o botão direito sobre o projeto, escolha Properties>Java Compiler, e mude Compiler compliance level para 5.0.
Também podem ocorrer problemas caso o Facet instalado para a versão do Java não for o da versão 5. neste caso, clique com o botão direito sobre o projeto e escolha Properties>Project Facet. Para alterar a versão do Facet, clique em Add/Remove Project Facets .
Figura 2. Estrutura do projeto importado no Eclipse.
Entendendo a infra-estrutura do exemplo
Três arquivos importantes estão na pasta WEB-INF. O applicationContext.xml, como sabemos é o arquivo de configuração do Spring. Este arquivo é lido por um listener registrado no web.xml. No arquivo faces-config.xml, definimos a integração do JSF com o Spring.
O exemplo utiliza a base de dados denominada contato, que deve ser criada no MySQL. O DDL de criação da sua única tabela está na Listagem 1.
Como vimos no início, a classe de domínio do exemplo é Contato (Listagem 2). Essa classe é utilizada tanto para enviar quanto para trazer as informações de um contato do banco de dados. O exemplo inclui também a página index.jsp, que utiliza JSF (Listagem 3). Quando o exemplo estiver sendo executado, essa página se torna acessível através da URL http://localhost:8080/springjsf/index.jsf. A Figura 3 apresenta o exemplo em execução.
Figura 3. Tela do exemplo em funcionamento.
Listagem 1 Script para a criação de tabela noMySQL
create table CONTATO (id integer primary key auto_increment.
nome VARCHAR(255)
email VARCHAR(255).
telefone VARCHAR(255)) engine=InnoDB;
Listagem 2 Classe de domínio do exemplo
package br.com.jm.springjsf:
public class Contato {
private Long id:
private String email;
private String nome;
private String telefone;
// gets e sets...
}
Listagem 3 Página index.jsp
<%@ pag session=”false” contentType=”text/html;charset=utf-8”%>
<%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h”%>
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f”%>
<html><head>
<style type=”text/css”>
...
</style> ...