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:
- Nesse caso, EntityManagerFactory nunca é fechado?
- 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);
}
}