Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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; }
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; }}
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...
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