Opa! Tudo bom, pessoal?
Resolvi escrever um artigo falando sobre como
criar uma persistência de dados usando Hibernate no Eclipse, tendo o
framework JSF como view. Vejam que não é tão complicado assim, o
chato é configurar o Hibernate no Eclipse.
Let´s
go…
Sobre
a aplicação
Bem, a
ideia aqui é apresentar a vantagem de usar o framework Hibernate
para persistência de dados, então vamos fazer uma aplicação bem
simples e ficaremos mais focados na parte do Hibernate. A nossa
aplicação tem a função do nome de um visitante em uma base de
dados (MySQL).
Sobre
o Hibernate, para não duplicar o que já tem na net, lá vai a
“reutilização da informação” 😉 – O
que é hibernate?
Download
Hibernate – ponto importante, nesse final de semana fiquei
tentando colocar a última versão do hibernate para funcionar, mas não tive sucesso. A última versão veio faltando uns .jars e até
agora não descobrir o motivo, estou pesquisando e verificando se não
é um problema local na hora de descompactar o pacote. Em função
disso, usei uma versão mais antiga, a 3.2.1.ga, e no link anterior
disponibilizei apenas os .jars necessários.
Download
Hibernate versão 3.3.2.GA – essa é a ultima versão que
consta no site Hibernate.org no momento em que escrevo o artigo.
Porém, não a estamos usando.
Requisitos:
- Eclipse
Galileo (versão em uso para este artigo) - JDK
1.5 - Hibernate
3.2.1 (versão em uso para este artigo) - Jboos
tools no Eclipse - MySql
(vamos considerar que criou o DataBase e Table no BD) - TomCat
5.5/Superior
Alguns
problemas:
Para
adiantar, identifiquei alguns “problemas” que podem tirar você
do sério.
Quando você cria um Library no Eclipse e o adiciona ao seu projeto, os arquivos .jars não vão para a pasta
lib. E, se você tentar adicionar .jars diretamente, também
não vai parar no diretório lib do projeto. Não sei por que o
Eclipse não faz isso, desde o dynamic
web project há esse problema.
Em função disso, é
necessário copiar os .jars do Hibernate para a pasta lib
do seu projeto. Abaixo, uma imagem dos .jars necessário para que o
hibernate funcione. Não se esqueça do arquivo .jar do MySql.
Iniciando
01. Crie um projeto JSF PROJECT
02. Agora crie uma página index.jsp com o código a seguir
03. Crie uma pagina sucesso.jsp com o código abaixo.
< %@ taglib uri="http://java.sun.com/jsf/html" prefix="h" % >;
< %@ taglib uri="http://java.sun.com/jsf/core" prefix="f" % >;
04. Crie uma estrutura conforme abaixo no seu projeto. A seguir vamos apresentar os codes de cada classe, não se preocupe.
05. Agora vamos criar os arquivos de configuração e conexão com o BD via Hibernate. Para isso, crie dois arquivos no formato .xml (hibernate.cfg.xml e visitantes.hbm.xml), estes devem estar dentro de Source. Sua estrutura deve estar conforme abaixo:
Pronto, terminamos a configuração do ambiente de desenvolvimento, agora vamos à parte mais interessante.
Desenvolvimento
01. Precisamos criar um Bean para nossa aplicação, então, abra o arquivo Visitante.java e deixe conforme o code a seguir:
public class Visitante {
private String nome;
private int id;
public int getId() {
return id;}
public void setId(int id) {
this.id = id;}
public String getNome() {
return nome;}
public void setNome(String nome) {
this.nome = nome;}}
02. Agora vamos criar o controlador JSF. Para isso, abra o arquivo VisitanteControler.java e deixe conforme o code abaixo:
import br.com.bean.Visitante;
import br.com.dao.InterfaceDAO;
import br.com.dao.VisitanteDAO;
//classe controladora JSF
public class VisitanteControler {
private Visitante visitante;
public VisitanteControler() {
visitante = new Visitante(); }
public Visitante getVisitante() {
return visitante; }
public void setVisitante(Visitante visitante) {
this.visitante = visitante;}
public String salvar(){
InterfaceDAO visitantedao = new VisitanteDAO();
visitantedao.salvar(visitante);
return "salvar";}}
03. O objetivo agora é configurar e fazer o mapeamento com Hibernate. Para isso, atualize o arquivo hibernate.cfg.xml conforme o código a seguir:
< !-- CONFIGURANDO O HIbernate -- >
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost/livraria
camilo
bahia
< !-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD -- >
org.hibernate.dialect.MySQLDialect
<!-- pega a tabela -->
04. Agora atualize o arquivo visitantes.hbm.xml.
< !-- ARQUIVO DE QUE FAZ O MAPEAMENTO COM BD/TABELA -->
< hibernate-mapping>
< !-- INFORMANDO O LOCAL DO BEAN E O NOME DA TABELA NO BD -- >
< class name="br.com.bean.Visitante" table="visitante">
< !-- CHAVE PRIMARIA DA TABELA -- >
<id column="id" name="id" type="integer">
<generator class="assigned"/>
</id>
<property column="nome" name="nome" type="string"/>
</class>
</hibernate-mapping>
05. Abra o arquivo ConexaoHi.java e insira os códigos a seguir:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
//classe que conecta ao Hibernate
public class ConexaoHi {
//variavel que armazena os mapeamentos e configuracoes do Hibernate
private static final SessionFactory sessionFactory;
private static final ThreadLocal threadlocal = new ThreadLocal();
static{
try{
sessionFactory = new Configuration()
.configure("hibernate.cfg.xml")
.buildSessionFactory();
/*recebemos a configuracao do arquivo hibernate.cfg.xml que possui
*dados da conexao
* chamamos o metodo buildSessionFactory que retorna um objeto
* session, que estabelece uma sessao de comunicacao com o BD
* atraves de uma conexao JDBC */
}catch (Throwable e) {
throw new ExceptionInInitializerError(e);}
}
/* esse metodo associada cada sessao a um objeto, permitindo que
* cada sessao abra um processo concorrente */
public static Session getInstance(){
Session session = (Session) threadlocal.get();
session = sessionFactory.openSession();
threadlocal.set(session);
return session;}}
06. Atualize o arquivo VisitanteDAO.java.
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.bean.Visitante;
import br.com.util.ConexaoHi;
//com hibernate
public class VisitanteDAO implements InterfaceDAO {
private Session session;
//metodo responsavel por salvar os dados no BD
public void salvar(Visitante visitante){
session = ConexaoHi.getInstance();//cria uma sessao
Transaction tx = null; //permite transacoes no BD
try{
tx = session.beginTransaction();
session.save(visitante);//grava no BD
tx.commit();//transacao efetuada
}catch (HibernateException e) {
System.out.println("deu merda aqui");
e.printStackTrace();
//tem o objetivo de desfazer a transcao em caso de erro
tx.rollback();
}finally{
session.close();}}}
07. Seu arquivo InterfaceDAO.java deve estar assim:
import br.com.bean.Visitante;
public interface InterfaceDAO {
public abstract void salvar(Visitante visitante);
}
08. Não podemos nos esquecer de configurar o arquivo faces-config.xml. Para isso, deixe conforme o code a seguir :
<managed-bean>
<managed-bean-name>visitanteControler</managed-bean-name>
<managed-bean-class>br.com.controller.VisitanteControler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/form.jsp</from-view-id>
<navigation-case>
<from-outcome>salvar</from-outcome>
<to-view-id>/sucesso.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
09. Agora atualize os arquivos .jsp, começando pelo form.jsp.
< %@ taglib uri="http://java.sun.com/jsf/html" prefix="h" % >;
< %@ taglib uri="http://java.sun.com/jsf/core" prefix="f" % >
Pronto, terminamos o desenvolvimento, chegou a hora de testar.
Testando
01. Para testar a aplicação, clique com o botão direto em cima do projeto e escolha Run As Run on Server.
02. Aguarde que o browser interno do eclipse seja carregado (por padrão será ele). Você verá a seguinte tela:
03. Cadastre um visitante.
04. Verificando o visitante no BD.
Fico por aqui e espero que vocês tenham gostado do artigo.
Ficou um pouco longo, mas eu espero tenha sido produtivo e que vocês tenham conseguido ver a essência e as vantagens de usar um framework como Hibernate para persistência de dados.
Aproveitando este post, fica aqui um presente para os leitores do iMasters que estão se preparando para tirar a certificação SCJP. Recentemente publiquei o livro Guia do Exame SCJP (veja aqui a resenha) e você que leu esse artigo acabou de ganhar um desconto de 30% para comprá-lo diretamente no site da editora Ciência Moderna! Basta usar o cupom V00014. O valor do livro é R$ 49,00 e, com o desconto, ele fica por R$ 34,30. Aproveite para estudar bastante, sem correr o risco de ficar com o orçamento apertado!
Abraços e até o próximo!