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
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
Amigo,
acredito que o C3P0 deva ser configurado no teu hibernate.cfg.xml apenas. Teu “HibernateUtil” não precisa ter nenhum trabalho adicional.
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.
Ó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).