Hibernate Problemático!

6 respostas
S

Olá pessoal !!

Eu sou iniciante com o hibernate e estou tendo um problema em uma aplicação, o fato é que ao executar minha aplicação que cada minuto precisa fazer um requisição ao banco de dados, depois de algum tempo com a execução normal da minha aplicação a página me mostra o seguinte erro…

root cause

com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.

eu configurei um pool de conexões(c3p0) achando que ia resolver o meu problema mais de nada adiantou já postei esse problema no java free e aqui também outras vezes, so que não obtive nenhuma ajuda, estou postando novamente para vê se agora alguem ja tenha visto esse problema e possa me ajudar, não sei o que esta dando errado, antes eu não usava o spring e agora estou usando o Spring junto com hibernate para vê se resolvia esse problema mais o problema continua.

Desde já agradeço a ajuda !!

6 Respostas

rdantas

Oi,

Estava acontecendo isso comigo, fui descobrir que eu estava abrindo mtas conexões. A solução que me resolveu aqui foi colocar o EntityManagerFactory como final e também estático.
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("<nomedaaplicacao>");

Espero ter ajudado,

Rodrigo.

S

rdantas !!!

eu não entendi muito bem o que vc colocou no post, pois como eu havia dito eu sou iniciante com o Hibernate,por exemplo quando vc disse sobre colocar o EntityManagerFactory com static e final eu não entendi o que é na real o EntityManagerFactory nem tão pouco como configura o tal, se não for dá muito trabalho dava pra vc me explicar melhor como eu posso fazer isso, por que é exatamente esse o meu problema !!!

Obrigado pela ajuda !!!

Samuel Brasil !!!

J

Cara.. eu fiz algo do tipo.. nao sei se é a forma correta. mas estou usando no momento assim::

No meu DAO - Classe que fica responsável por fazer as operações relacionadas com o banco!!

public class UsuarioDAO {
        
    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 = EntityManagerProvider.getEntityManagerFactory().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 = EntityManagerProvider.getEntityManagerFactory().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();
        }
    }
    
}

E a classe que trata o EntityManagerFactory.... ele é um Singleton...

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


/* Classe auxiliar para retornar a instância de um EntityManager, pois ele é responsável por manter os mapeamentos e
   configurações da JPA em memória */
public class EntityManagerProvider   {
    
    private static EntityManagerFactory emf = null;   
       
    private EntityManagerProvider() {}   
       
    public static EntityManagerFactory getEntityManagerFactory() {   
        if (emf == null){             
            emf = Persistence.createEntityManagerFactory("persistence_unit");   
        }         
        return emf;       
    }     
}

Ai tem um exemplo de como tu poderia usar o EntityManagerFactory... Esse exemplo é utilizando JPA.... não sei se estaz usando JPA ou algo relacionado só ao Hibernate....
Abraço!!

S

Boa noite jovijesc !!!

Cara eu não estou usando JPA so estou usando o Hibernate junto com o Spring e como eu ainda sou iniciante com o Hibernate não estou compreendendo muito bem essa parada de EntityManagerFactory, isso tem alguma coisa á vê com o Hibernate ou issi faz parte do JPA, pois ainda não estou conseguindo me ligar no fundamento da coisa como um todo, eu não tenho como resolver o meu problema somente com o uso do Hibernate e do Spring ???

J

Cara… eu estou aprendendo JPA agora… o JPA é apenas a especificação e o Hibernate é a implementação do JPA… ( JPA diz o que tem que ter e o Hibernate implementa o que a JPA especificou!! )
Dae ao inves de tu usar as classes diretamente do Hibernate… tu usa do proprio JDK… as que estão nos pacotes… javax.persistence…, tu fazendo isso tu pode depois mudar do Hibernate para o TopLink( outra framework de persistencia ) por exemplo sem mecher no teu código… pois tu usou as classes como se o proprio java as tivesse… Esse EntityManagerFactory não tenho certeza… mas faz parte do pacote javax.persistence…
http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManagerFactory.html, essa interface fica responsavel por retornar uma instancia de EntityManager, esse EntityManager é quem faz as operações com o banco… como insert, delete, consultas etc…
Como a JPA é uma especificação da Sun… é legal o cara usar ela… pois ela está se tornando um padrão…, ela está vindo com um monte de coisas legais… dae tu pode se livrar também desse monte de arquivos xml e fazer com anotações…
Segue alguns links pra ti dar uma olhada!!

http://www.urubatan.com.br/noticias-do-java-one-jpa-20/
http://swik.net/JPA+Hibernate
http://rfiume.blogspot.com/2007/03/java-persistence-api-jpa.html
Abraço e fica com Deus!!

S

jovijesc o meu problema é que eu não estou querendo misturar as coisas, eu queria achar uma forma de resolver isso so usando o Hibernate que eu tenho certeza que deve ter, o problema é que eu não estou conseguindo encontrar essa solução, mais eu vou começar a pesquisar e estudar sobre essa interface que vc mencionou, no mais obrigado pela ajuda, será que alguem conhece um forma de resolver esse meu problema com o hibernate…

Criado 21 de janeiro de 2008
Ultima resposta 25 de jan. de 2008
Respostas 6
Participantes 3