SessionFactory.closeSession()

Pessoal a cada transaçao que faço sempre fecho a sessao, estas transaçoes sao listar, inserir, ou seja operaçoes basicas. Quando ocorre uma exceçao minha conexao trava e preciso entao fechar a secao. Isso acontece com todo mundo ou estou fazendo alguma coisa errada?

Cara, vc ta usando algum framework?
Alguma classe DAO???
Alguma classe de persistência???
Responde aê!!!

To anderso meu framework é o proprio Hibernate minha sequencia é a seguinte: view <==> Business <==> DAO. No DAO estao aberta as conexoes com o banco, minha duvida maior anderson é a seguinte, quando ocorre uma exeçao parece que nao consigo me conectar novamente a nao ser que eu coloque dentro do catch(){ Session.close() }, minha sequencia é a seguinte.
Minha conexoes estao assim:

try&#123;
    SessioFactory s = SessionFactory.open&#40;&#41;;
    Transation tr = s.beginTransaction&#40;&#41;;
     // Acao 
    s.flush&#40;&#41;;
    tr.commit&#40;&#41;;
    SessionFactory.close&#40;&#41;;
&#125;
catch&#40; HibernateException ex &#41;&#123;
    try&#123;
       SessionFactory.close&#40;&#41;;
    &#125;catch&#40;&#41;&#123;  &#125; 
&#125;

isso ta certo anderson?
Obrigado

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos para ficarem mais legíveis - Reifel[/color][/size] :joia:

Cara,
vc tem que fazer rolback quando ocorre erro!
Olha esse metodo aqui:

protected void rollback&#40;Session sess, Transaction tx&#41; throws Exception &#123;

			
		if &#40;!sess.isOpen&#40;&#41;&#41; return;
		
		try &#123;

			try &#123;
				  if &#40;tx!=null&#41; sess.connection&#40;&#41;.setAutoCommit&#40;false&#41;;
  			&#125; catch &#40;Exception e&#41;
  			&#123;
  				log.debug&#40;&quot;Tratou excecao do Sybase, que nao permite alteracao para false do autocommit&quot;&#41;;
			&#125;	
			if &#40;tx!=null&#41; tx.rollback&#40;&#41;;
	
			logF.debug&#40;&quot;############# Rollback ok&quot;&#41;;
	
			if &#40;logTempoTransacao.isDebugEnabled&#40;&#41;&#41; 
				logTempoTransacao.debug&#40;&quot;Fez rollback em &quot;+ new java.util.Date&#40;&#41;&#41;;	
			
		&#125; catch &#40;HibernateException e1&#41; &#123;
			log.fatal&#40;&quot;Erro ao tentar fazer rollback&#58; &quot; + e1&#41;;
			throw erro.msg&#40;&quot;erros.persistencia.rollback&quot;,new Object&#91;&#93;&#123;e1&#125;,e1&#41;;		
		&#125; catch &#40;Exception e&#41; &#123;
			log.error&#40;&quot;Erro ao tent'ar fazer rollback&#58; &quot; +e,e&#41;;
			throw erro.msg&#40;&quot;erros.persistencia.rollback&quot;,new Object&#91;&#93;&#123;e&#125;,e&#41;;
		&#125; finally &#123;		
			try &#123;
				Connection con = sess.close&#40;&#41;;
				log.debug&#40;&quot;depois pegar conexao&quot;&#41;;
				// Muda autocommit para true para atender ao websphere
				// TODO Precisa ser homologado com demais App Servers
				con.setAutoCommit&#40;true&#41;;
				con.close&#40;&#41;;
				log.debug&#40;&quot;Liberou conexoes do pool e fechou sessao, ao fazer rollback&quot;&#41;;
			&#125; catch &#40;Exception ex&#41; &#123;
				log.fatal&#40;&quot;Nao conseguiu devolver o pool para o App Server&#58;&quot;+ex&#41;;
				throw erro.msg&#40;&quot;erros.persistencia.rollback&quot;,null,ex&#41;;
			&#125;
		&#125;
			
	&#125;

Ai vc sempre chama essa função no execpt

Beleza anderson eu tava ate esquecendo de dar rowback.
Valeu. Muito obrigado.