JPA - EntityManagerFactory!

7 respostas
J
Dae galera.. eu estou estudando JPA e achei algo que falava que a cada operação eu não deveria ter uma instancia de EntityManagerFactory, pois ele é um objeto pesado que carrega toda a estrutura, mapeamento etc.... estou fazendo um sistema web e tal.. fiz meu DAO desse jeito.. ele está funcionando... só que desse jeito eu terei um objeto EntityManagerFactory para cada DAO.. o que acho desapropriado.... alguém tem alguma sugestão de como implementar?? Não estou usando Spring ou algo assim.. ja vi algo que utilizava ele.. mas dae acho que é muita coisa pra aprender ao mesmo tempo.. pois estou usando esse sistema pra aprender JPA e Struts 2!!
import br.gov.sc.alesc.sgu.model.Usuario;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

public class UsuarioDAO {
    
    private static EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("SGUsuarioPU");
    private static UsuarioDAO usuarioDAO = new UsuarioDAO();
    
    public static UsuarioDAO getInstance() {
        return usuarioDAO;
    }        
    
    public Usuario findByUsuario( final String login ) throws Exception {
        Usuario usuario = null;
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {                        
            usuario = ( Usuario ) em.createNamedQuery("Usuario.findByUsuario").setParameter("usuario", login).getSingleResult();
            em.getTransaction().commit();
        } catch( Exception e ) {
            em.getTransaction().rollback();            
            throw new Exception("UsuarioDAO - findByUsuario: " + e.getMessage());        
        } finally {
            em.close();
        }
        return usuario;
    }

    public void persist(Object object) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();            
            em.persist(object);    
            em.getTransaction().commit();
        } catch(Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
    
}

Abraço!!

7 Respostas

marcosbrandao

crie o entityManager atraves de um singleton.

J

Como assim?? Eu sei o que é Singleton…mas o problema é com EntityManagerFactory que é pesado demais… já o EntityManager acho que pode ser criado um para cada operação com o banco… acho!! hhe…Se vc puder me mostrar como ficaria eu ficaria agradecido!!
Abraço!!

marcosbrandao

La vai…

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EntityManagerProvider
{	
	private static EntityManagerFactory emf = null;
	
	private EntityManagerProvider()
	{		
	}
	
	public static EntityManager getEntityManagerFactory()
	{
		if (emf == null)
		{			
			emf = Persistence.createEntityManagerFactory("blablabla");
		}		
		return emf;		
	}	
}
J

Cara valeu mesmo…
Massa!!
Abraço!!

Leozin

ou faz um DAOFactory =)

J

Você teria um exemplo do DAOFactory??
Abraço!!

A

Ola,

Nesse caso nao fechamos o EntityManagerFactory?

Criado 23 de janeiro de 2008
Ultima resposta 25 de set. de 2009
Respostas 7
Participantes 4