Conexões abertas [Resolvido]

Olá Pessoa,

Estou com problemas com conexões que ficam abertas no PostgreSQL utilizando o hibernate!

Em todos os meus DAOs, estou fechando a conexão, até mesmo em consultas. Senti que tive uma perda consideral no desempenho, não sei se foi uma boa pratica!

Bom, mesmo fechando o session em qualquer operação com o banco, as conexões são mantidas abertas!

Se alguem puder me ajudar!

Obrigado.

como vc esta gerenciando suas sessions? no site do hibernate tem um modelo de HibernateUtil

Olá,

Estou gerando com o factory.openSession();

Segue codigo:

public class ConexaoManagerSys {
	
	private static SessionFactory factory = null;
	
	static {
		try {
			AnnotationConfiguration configuration = new AnnotationConfiguration();

	        String conn = "jdbc:postgresql://localhost:5432/teste";
	        String user = "teste";
	        String senha = "jteste";

	        //Conexão com o banco
	        configuration.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver");
	        configuration.setProperty("hibernate.connection.url", conn);  
	        configuration.setProperty("hibernate.connection.username", user);  
	        configuration.setProperty("hibernate.connection.password", senha);
	        
	        configuration.setProperty("hibernate.c3p0.min_size", "1");
	        configuration.setProperty("hibernate.c3p0.max_size", "15");
	        configuration.setProperty("hibernate.c3p0.timeout", "15");
	        configuration.setProperty("hibernate.c3p0.idle_test_period", "0");
	        configuration.setProperty("query.substitutions", "true 1, false 0, yes 'Y', no 'N'");
	    
	        configuration.setProperty("hibernate.show_sql", "false");
	        
	        configuration.setProperty("hibernate.hbm2ddl.auto", "update");

	        /**
	         * mapeamento
	         */
//	        configuration.addAnnotatedClass(br.com.erp.modelo.sistema.MenuPrincipal.class);
	        configuration.addAnnotatedClass(br.com.erp.modelo.sistema.SysCliente.class);
	        configuration.addAnnotatedClass(br.com.erp.modelo.sistema.SysGeral.class);
	        
	        factory = configuration.buildSessionFactory();
	        
		} catch (Throwable ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}
	
	public static Session getSession(){
		return factory.openSession();
	}
}

Obrigado.

o bom era vc gerenciar pelo ThreadLocal

private static ThreadLocal sessionThread = new ThreadLocal();

 public static Session getSession() {
        if (sessionThread .get() == null) {
            Session session = SESSION_FACTORY.openSession();
            sessionThread .set(session);
        }
        return (Session) sessionThread .get();
    }
public static void closeSession() {
        Session session = (Session) sessionThread .get();
        if (session != null && session.isOpen()) {
           sessionThread .set(null);
            session.close();
        }
    }

mas não é só isso, deve ser agum problema nessas setProperty
0 c3p0 tem particularides de configurações para ambientes não produtivos

de configuração que eu tenho para ambiente web eu não uso c3p0 pq eu configuro no proprio glassfish um pool de conexão que ele mesmo gerencia dai eu só passar o pool para o hibernate

AnnotationConfiguration configuration = new AnnotationConfiguration();
            configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
            configuration.setProperty("hibernate.connection.datasource", "Homologacao");//Pool no GV - vc vai ter que ver um outro pool para ambiente desktop
            configuration.setProperty("hibernate.order_updates", "true");
            configuration.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider");
            configuration.setProperty("hibernate.show_sql", "false");
            configuration.setProperty("hibernate.format_sql", "true");
            configuration.setProperty("hibernate.current_session_context_class", "thread");

Olá arthurminarini,

Tinha feito uns testes com ThreadLocal, porem como nao tinha resolvido, voltei ao meu codigo acima!

Vc acha melhor configura esse pool de conexão direto no servidor?! Estou utilizando o tomcat, vou dar uma pesquisada a respeito!

Obrigado pela sua atenção …

Acho que resolvi meu problema …

Fiz uns ajustes nas configurações do C3P0, e mudei o gerenciamento das sessoes com o ThreadLocal conforme vc falou …

Pelos testes que fiz, esta dando certo, ele aguardo o tempo que estipulei nas configurações e fecha a conexão!

Obrigado pela Ajuda.

Abraço.

[quote=jlunge]Acho que resolvi meu problema …

Fiz uns ajustes nas configurações do C3P0, e mudei o gerenciamento das sessoes com o ThreadLocal conforme vc falou …

Pelos testes que fiz, esta dando certo, ele aguardo o tempo que estipulei nas configurações e fecha a conexão!

Obrigado pela Ajuda.

Abraço.[/quote]

Olá jlunge, boa noite.

Estou passando por dificuldades parecidas, mas estou em dúvida quanto à “quem realmente deve gerenciar o pool de conexão”.

Minha aplicação utiliza hibernate, banco PostgreSQL e Tomcat 6.

Pra você ter idéia, a configuração hibernate.c3p0.timeout não funciona. Eu consigo definir a configuração de timeout da sessão através do web.xml do Tomcat.

Estou tendo problemas de limites de conexão, mesmo com o postgres estando configurado para 100 conexoes simultaneas (padrao).

Pelo que li, o hibernate deveria gerenciar estas conexoes inativas e fecha-las, mas isso não está acontecendo.

E ae, o que vc me sugere?

Vlw.