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

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 em aplicações Java SE a Java EE. O framework aumenta a produtividade  do desenvolvedor, ao reduzir a quantidade e a complexidade do código-fonte.

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> ...

Quer ler esse conteúdo completo? Tenha acesso completo