Erro em busca no banco com hibernate

11 respostas
marceloau

Pessoal estou com esse probleminha aqui no meu sistema, ele aparece o seguinte erro quando possui muitos resultados.

ERROR: HHH000319: Could not get database metadata

org.postgresql.util.PSQLException: FATAL: desculpe, muitos clientes conectados

at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:398)

at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:173)

at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)

at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:136)

at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:29)

at org.postgresql.jdbc3g.AbstractJdbc3gConnection.(AbstractJdbc3gConnection.java:21)

at org.postgresql.jdbc4.AbstractJdbc4Connection.(AbstractJdbc4Connection.java:31)

at org.postgresql.jdbc4.Jdbc4Connection.(Jdbc4Connection.java:24)

at org.postgresql.Driver.makeConnection(Driver.java:393)

at org.postgresql.Driver.connect(Driver.java:267)

at java.sql.DriverManager.getConnection(DriverManager.java:579)

at java.sql.DriverManager.getConnection(DriverManager.java:190)

at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)

at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)

at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194)

at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)

at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:503)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)

at Controle.HibernateUtil.getConexao(HibernateUtil.java:21)

at Controle.CandidatoDAO.BuscaAvancadaCanFA(CandidatoDAO.java:180)

at Visao.Busca.BuscaRefinada(Busca.java:90)

at Visao.Busca.BuscaAvancadaActionPerformed(Busca.java:418)

at Visao.Busca.access$300(Busca.java:28)

at Visao.Busca$5.actionPerformed(Busca.java:289)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6505)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)

at java.awt.Component.processEvent(Component.java:6270)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4861)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)

at java.awt.Container.dispatchEventImpl(Container.java:2273)

at java.awt.Window.dispatchEventImpl(Window.java:2719)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:682)

at java.awt.EventQueue$3.run(EventQueue.java:680)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.awt.EventQueue$4.run(EventQueue.java:696)

at java.awt.EventQueue$4.run(EventQueue.java:694)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Procurei na internet e em algumas postagens dizia que era por que eu nao estava fechando a sessao, mas no meu clientedao elas estão sendo fechadas.

Desde já agradeço pela ajuda de vocês

Muito obrigado

11 Respostas

CristianPalmaSola10

pelo jeito não esta fechando todas as sessoes nao, verifique seus daos, certifique-se que eles fecham as sessoes…

Hebert_Coelho

E não tem nenhum método passando por fora do DAO não? que poderia estar deixando a conexão aberta?

marceloau

Tem não veja aqui como ta passando

public List BuscaAvancadaCC(String CCConsulta) {

        HibernateUtil hu = new HibernateUtil();
        Session ss = hu.getConexao(new Candidato());
        Transaction transacao = ss.beginTransaction();

            Query listagem_query = ss.createQuery("FROM FormacaoAcademica WHERE to_ascii(upper(cursocomplementar),'LATIN1') like :cursocomplementar");
            listagem_query.setParameter("cursocomplementar", "%" + CCConsulta + "%");
            List<FormacaoAcademica> fa = listagem_query.list();
            ss.getTransaction().commit();
            ss.close();
            return fa;
    }

e esse fa é passado para a interface onde ele so faz popular a tabela. O codigo segue abaixo.

if (cursoComplementarSele.isSelected()) {
                List<FormacaoAcademica> listaCC = cd.BuscaAvancadaCC(cursoComplementar);
                for (FormacaoAcademica fa : listaCC) {
                    List<Candidato> listaCand = cd.BuscaAvancadaCanFA(fa.getId());
                    for (Candidato candidato : listaCand) {
                        modelo.addRow(new Object[]{candidato.getId(), candidato.getPessoa().getDadosPessoais().getNome(), candidato.getPessoa().getContato().getTelefone1(), candidato.getPessoa().getDadosPessoais().getIdade(), candidato.getPessoa().getEndereco().getBairro(), fa.getEscolaridade(), fa.getCursosSuperiores()});
                    }
                }
            }

O que vocês acham que pode ser.

B

Acho que o erro está ai. ss.beginTransaction(), deve retornar uma nova transação.

Pois quando você realiza o commit, faz:

ss.getTransaction().commit();
ss.close();

Se o beginTransaction retornar um novo objeto e não armazenar no getTransaction, pode ser que esteja trabalhando com transações diferentes.

Além do mais, só há garantia de execução do close se utilizar o finally:

HibernateUtil hu = new HibernateUtil();  
    Session ss = null;
    Transaction transacao = null;

    try {    
        ss = hu.getConexao(new Candidato());  
        transacao = ss.beginTransaction();  
  
        Query listagem_query = ss.createQuery("FROM FormacaoAcademica WHERE to_ascii(upper(cursocomplementar),'LATIN1') like :cursocomplementar");  
        listagem_query.setParameter("cursocomplementar", "%" + CCConsulta + "%");  
        List&lt;FormacaoAcademica&gt; fa = listagem_query.list();  
        transacao.commit();
    } catch(Exception ex) {
        transacao.rollback();
    } finally {
        ss.close();  
    }

    return fa;
marceloau

Olá Btafarelo

Tentei fazer isso que você me falou ai em cima só que continua dando o mesmo erro. Alguem mais sabe oq eu posso fazer?

B

Posta a configuração do hibernate/datasource

ERROR: HHH000319: Could not get database metadata
org.postgresql.util.PSQLException: FATAL: desculpe, muitos clientes conectados

Conforme essas linhas, parece que a mensagem foi personalizada em um dos arquivos de configuração.

Pode ser que a quantidade de conexões foi alterada ou algum método anterior não está fechando as conexões.

marceloau
<?xml version="1.0" encoding="UTF-8"?> org.hibernate.dialect.PostgreSQLDialect org.postgresql.Driver jdbc:postgresql://localhost:5432/BancoDeEmpregos postgres marcelo2207
<property name="hbm2ddl.auto">create</property> 
<property name="hbm2ddl.auto">update</property>

 <mapping class="Modelo.Candidato"/>
 <mapping class="Modelo.Pessoa"/>
 <mapping class="Modelo.DadosPessoais"/>
 <mapping class="Modelo.Endereco"/>
 <mapping class="Modelo.Experiencia"/>
 <mapping class="Modelo.Indicacao"/>
 <mapping class="Modelo.Contato"/>
 <mapping class="Modelo.CursosSuperiores"/>
 <mapping class="Modelo.FormacaoAcademica"/>
 <mapping class="Modelo.Referencia"/>

ai ta o arquivo de configuração do hibernate

B
&lt;property name="hibernate.c3p0.idle_test_period"&gt;100&lt;/property&gt;

Esse parametro irá fechar todas as conexões abertas sem uso, no intervalo especificado.

Isso pode resolver, mas deve haver conexões não encerradas em outros métodos. E isso deve estar causando o problema.

Há alguma conexão com o banco de dados antes desse seu método? Esses métodos anteriores funcionam?

Há também as propriedades

property name="hibernate.c3p0.max_size">100</property> 
    <property name="hibernate.c3p0.min_size">10</property>

Para definir o tamanho do pool, pode ser necessário aumentar.

Ou ainda o arquivo de configuração postgresql.conf que também possui o parametro max_connections

marceloau

Adicionei essas linhas ao arquivo de configuração só que continua dando o mesmo erro :frowning:

marceloau

Eai pessoal o que vocês acham ainda estou aqui empancado nesse erro afff :frowning:

marceloau

Consegui pessoal graças a Deus.

é que eu organizei tudo aqui, e as conexões abertas também, por que ele estava abrindo uma conexão para cada usuario que era encontrado no banco ai depois de fazer isso, ficou tudo ok.

Agradeço também a todos aqueles que me ajudaram e aos que não ajudaram também

Obrigado :stuck_out_tongue:

Criado 12 de março de 2013
Ultima resposta 22 de mar. de 2013
Respostas 11
Participantes 4