Hibernate : problemas com Too many Clients

1 resposta
B

Olá pessoal,

Tenho um sistema JAVA/Struts utilizando HIBERNATE com PostgreeSQL.
Constantemente ocorrem problemas de ‘too many clients’.

Porém, todos os métodos que acessam a base de dados possui o bloco Try-Finally, sendo que no bloco Finally eu fecho a sessão do Hibernate.

Em tese, o métido Close fecha a conexão com o banco de dados. Porém, o erro ‘too many clientes’ persiste.
Ex:

/** 
 * Busca um registro através de um ID como parâmetro. 
 * 
 * @param idArea chave-básica e obrigatória para a busca da área. 
 *  
 * @throws HibernateException 
 * @throws SQLException 
 */       
public static AreaHB buscaPorId(Integer idArea)  
      throws HibernateException, SQLException{ 
       
  AreaHB areaHB = new AreaHB(); // BEAN do Hibernate 
  Session session = null; 
       
  try { 
    session = HibernateManager.getSession(); 
    session.load(areaHB, idArea); 
    session.flush();          
  } finally { 
    if (session != null) { 
      session.close(); 
      session = null;    
    } 
  } 
  return (areaHB); 
}

Os detalhes do erro estão abaixo.

Caused by: net.sf.hibernate.JDBCException: Cannot open connection 
   at net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:281) 
   at net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3297) 
   at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3277) 
   at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:65) 
   at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:704) 
   at net.sf.hibernate.loader.Loader.doQuery(Loader.java:185) 
   at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133) 
   at net.sf.hibernate.loader.Loader.doList(Loader.java:955) 
   at net.sf.hibernate.loader.Loader.list(Loader.java:946) 
   at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:834) 
   at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1536) 
   at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1513) 
   at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1509) 
   at com.diaup.bossassistant.gestaoempresarial.dadoscadastrais.hibernate.service.AreaService.busca(AreaService.java:195) 
   at com.diaup.bossassistant.gestaoempresarial.dadoscadastrais.struts.action.AreaAction.carregaLista(AreaAction.java:377) 
   ... 37 more 
Caused by: org.postgresql.util.PSQLException: Inicialização do Núcleo (Backend) falhou: FATAL:  Sorry, too many clients already

Peço ajuda para resolver este problema.
Muito obrigado

Bruno Paz

1 Resposta

J

Parece que vc está abrindo muitas sessions e talvez seu pool de conexões se esgote. Vc pode tentar aumentar o numero de conexões que o pool pode prover mas acho que há um erro de design na sua aplicação. Experimente dar uma lida nessa thread do JavaFree:
http://www.javafree.com.br/forum/viewtopic.php?t=4383

valeuz…

Criado 8 de julho de 2004
Ultima resposta 12 de jul. de 2004
Respostas 1
Participantes 2