Está en la página 1de 7

Criando um projeto JEE usando JPA com Hibernate, JSF e MySQL

Sexta-feira, 18/03/2011 s 11h00, por Camilo Lopes

Ol, pessoal! Veremos hoje como como usar JPA para seus projetos JEE, tendo como provider o Hibernate e usando o JSF para o view. Vamos fazer uma aplicao para cadastrar um cliente. Limitamos os dados do form, pois o objetivo mostrar como criar um ambiente para development tendo JPA nos seus projetos. Let's go... Requisitos:
   

MySQL 5.0.x TomCat 6 Hibernate Download .jars JSF 1.2 - Download .jars

Iniciando
Na imagem a seguir voc tem toda a estrutura do projeto. Observe que j criei as bibliotecas para o projeto e estas foram adicionadas. Se no quiser adicionar as bibliotecas ao projeto, copie os .jars para a pasta lib e pronto. Lembre-se de que ao adicionar uma biblioteca ao projeto, o stupid Eclipse no copia os .jars para a pasta lib. (ao contrrio do netbeans!). No se esquea tambm de criar um schema e uma table no MySQL, que aqui chamaremos de sistemas e clientes respectivamente.

Monte uma estrutura conforme a imagem acima. Boa parte das explanaes esto dentro do cdigo, no formato de comentrio, lado a lado para facilitar a compreenso.

Desenvolvimento
O primeiro passo criar o bean e fazer as devidas anotaes. Veja abaixo como est o nosso cliente bean:
package br.com.bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="cliente")//caso o nome da tabela seja diferente informe aqui public class Cliente { @Column(name="nome") private String nome; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) //anotao acima indica que o campo ser gerado automaticamente pelo BD @Column(name="id") private int id; @Column(name="sobrenome") private String sobrenome; @Column(name="cidade") private String cidade; public Cliente() { // TODO Auto-generated constructor stub } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSobrenome() { return sobrenome; } public void setSobrenome(String sobrenome) { this.sobrenome = sobrenome; } public String getCidade() { return cidade; }

public void setCidade(String cidade) { this.cidade = cidade; } }

Agora vamos partir para criar o nosso DAO; nele teremos a nossa fbrica de conexo. Poderamos ter mtodos genricos como salvar, deletar, atualizar etc., mas no vamos implementar todos.
package br.com.dao; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class DAO { private EntityManagerFactory emf; /* se vc j est acostumado com Hibernate * a ideia a mesma do mtodo de fabrica que * criamos para os Session que vem do SessionFactory * Aqui temos apenas nomeclatura diferente, pense assim. */ public EntityManager getEntityManager(){ //responsavel pela persistencia return emf.createEntityManager(); } public DAO() { //chamo ele de reprodutor da instncia emf = Persistence.createEntityManagerFactory("sistemas"); /* o nome passado vem do arquivo persistence.xml que contm as configs * para conexo com o BD. */ }}

Agora vamos criar a classe que vai fazer a persistncia com os dados do cliente. a ClienteDAO.java, que estende a classe DAO, para conseguirmos pegar um objeto objeto EntityManager que responsvel pelas incluses, excluses e atualizaes.
package br.com.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import br.com.bean.Cliente; public class ClienteDAO extends DAO { public void salvar(Cliente cliente){ //obtendo o EntityManager EntityManager em = getEntityManager(); try{ //inicia o processo de transacao em.getTransaction().begin(); //faz a persistencia em.persist(cliente); //manda bala para o BD em.getTransaction().commit(); }catch (Exception e) { //se der algo de errado vem parar aqui, onde eh cancelado em.getTransaction().rollback(); } } public List exibir(){ EntityManager em = getEntityManager(); try{ Query q = em.createQuery("select object(c) from Cliente as c"); return q.getResultList();} finally{ em.close(); } }}

Agora criaremos a classe ClienteController, que ter a responsabilidade de direcionar a comunicao do JSF, pegar o que foi digitado no form e persistir.
package br.com.controller; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import br.com.bean.Cliente; import br.com.dao.ClienteDAO; public class ClienteController { private Cliente cliente; private DataModel model; public ClienteController() { cliente = new Cliente(); } public Cliente getCliente() { return cliente; } public void setCliente(Cliente cliente) { this.cliente = cliente; } public String salvar(){ ClienteDAO clientedao = new ClienteDAO(); clientedao.salvar(cliente); return "salvar"; } public DataModel getTodos(){ ClienteDAO clientedao = new ClienteDAO(); model = new ListDataModel(clientedao.exibir()); return model; }}

Vamos configurar no velho e querido face-config.xml.

Criando arquivo persistence.xml


O arquivo que vamos precisar para conectar ao banco de dados parecido como hibernate.cfg.xml, j que tem a mesma funo (conectar ao BD). Observe o name da persistence-unit pois, ele que usamos no nosso DAO.java.

No esquea que ter que criar um folder META-INF em JavaSource e colocar o persistence.xml neste folder, no dentro do META-INF de WebContent. Alguns programadores acabam confundido e da recebem as velhas excees...

Criando as pages JSF


Agora criamos trs pginas .jsp com JSF, uma ser o index, que redireciona para cadastro.jsf, e a outra somente uma mensagem dizendo que foi cadastrado com sucesso. Index.jsp
< jsp:forward page="cadastro.jsf" />

cadastro.jsp

Testando
1. Mande executar seu projeto. Clique nele e v em Run ==> Run as ==> Run on Server 2. Cadastre um cliente 3. E depois verifique se ele est realmente no BD. Veja abaixo meus prints:

Fico por aqui, espero que tenham gostado do artigo. Abraos, see you! :)
Compartilhar

Camilo Lopes bacharel em Sistemas de Informao, ps-graduado em Gesto e Estratgia de Negcios. Possui certificao Programador Java - SCJP 5.Trabalhou na IBM Brasil em projetos na plataforma JEE como Analista Programador Java. Atualmente trabalha na HP Brasil como Software Engineer, no laboratrio de pesquisa e desenvolvimento Enterprise Computing Lab. autor do livro Guia do Exame SCJP.
y y y

Pgina do autor Email Website

También podría gustarte