EntityManagerFactory

0 respostas
A

Olá pessoal,

Fiz um sistema em JSF com JPA, o problema é que ficou “um pouco” lento. Andei lendo sobre o assunto e descobri que o certo é criar um unico EntityManagerFactory, eu estava criando um para cada operação. Segui alguns exemplos que encontrei na net e fiz o codigo abaixo, gostaria que alguem desse uma olhada para me dizer se está correto.

Aproveito para fazer mais 2 perguntas:

  1. Nesse caso, EntityManagerFactory nunca é fechado?
  2. O EntityManager pode ser somente um, como foi feito com o EntityManagerFactory, ou tem que ser um para cada operação?

Classe onde o EntityManagerFactory é criado.

package controle.util;

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

public class EntityManagerProvider {

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

Classe onde o EntityManagerProvider é utilizado

public void ler(){ 
    	try {
    		EntityManagerFactory emf = EntityManagerProvider.getEntityManagerFactory();
    		EntityManager em = emf.createEntityManager();
    		Query q = em.createQuery("select o from Cadastro");
    	    List<Modelo> r = (ArrayList<Modelo>) q.getResultList();
    	    dmRegistros = new ListDataModel(r);
    	    em.close();
    	} catch (Exception e) {
    		new GeraFacesMessage("ATENÇÃO: OCORREU UM ERRO DURANTE O PROCESSAMENTO, A OPERAÇÃO NÃO FOI EFETUADA! \n",e);
    	}
	}
Criado 25 de setembro de 2009
Respostas 0
Participantes 1