Qual a melhor forma de criar a session do hibernate?

3 respostas
palerique

Caros,

Quero criar uma seção em uma classe HibernateUtil de forma estática utilizando o C3P0, qual a melhor forma de fazer isso?

Thx,
PH

3 Respostas

jyoshiriro

Amigo,

acredito que o C3P0 deva ser configurado no teu hibernate.cfg.xml apenas. Teu “HibernateUtil” não precisa ter nenhum trabalho adicional.

Flavio_Almeida

Usando CDI.

Exemplo (aqui uso JPA)

package net.metha.siascweb.infraestrutura.persistencia.cdi;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import net.metha.siascweb.infraestrutura.mensageria.Metha;

import org.slf4j.Logger;

@ApplicationScoped
public class EntityManagerProducer {

	EntityManagerFactory emf;
	
	@Inject	
                private Logger log;

	@PostConstruct
	public void init() {
		emf = Persistence.createEntityManagerFactory("xxxxx");
		this.log.debug("EntityManagerFactory criada " + this.emf);
	}

	@Produces
	@RequestScoped
	@Default
	public EntityManager createEntityManager() {
		EntityManager entityManager = emf.createEntityManager();
		this.log.debug("EntityManager produzido: " + entityManager);
		return entityManager;
	}

	public void dispose(@Disposes @Default EntityManager entityManager) {
		if (entityManager != null) {
			this.log.debug("EntityManager descartado: " + entityManager);
			entityManager.close();
		}
	}
}

Depois, você acessa o EntityManager (no seu caso, uma session, só mudar o código) assim:

public MinhaClasse{
   @Inject // é preferível injectar via construtor
    private EntityManager;
}

Eu controla a transação via interceptor.

jyoshiriro

Ótima solução, mas aplicaca-se apenas para JPA e não Hibernate Core, como parece ser o caso do colega que iniciou o tópico. Bem, pelo menos nunca vi usarem uma classe “HibernateUtil” para usar Hibernate como JPA provider (até o Netbeans tem um assistente par criação de um HibernateUtil que retorna SessionFactory).

Criado 25 de julho de 2011
Ultima resposta 26 de jul. de 2011
Respostas 3
Participantes 3