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{
SessioFactory s = SessionFactory.open();
Transation tr = s.beginTransaction();
// Acao
s.flush();
tr.commit();
SessionFactory.close();
}
catch( HibernateException ex ){
try{
SessionFactory.close();
}catch(){ }
}
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(Session sess, Transaction tx) throws Exception {
if (!sess.isOpen()) return;
try {
try {
if (tx!=null) sess.connection().setAutoCommit(false);
} catch (Exception e)
{
log.debug("Tratou excecao do Sybase, que nao permite alteracao para false do autocommit");
}
if (tx!=null) tx.rollback();
logF.debug("############# Rollback ok");
if (logTempoTransacao.isDebugEnabled())
logTempoTransacao.debug("Fez rollback em "+ new java.util.Date());
} catch (HibernateException e1) {
log.fatal("Erro ao tentar fazer rollback: " + e1);
throw erro.msg("erros.persistencia.rollback",new Object[]{e1},e1);
} catch (Exception e) {
log.error("Erro ao tent'ar fazer rollback: " +e,e);
throw erro.msg("erros.persistencia.rollback",new Object[]{e},e);
} finally {
try {
Connection con = sess.close();
log.debug("depois pegar conexao");
// Muda autocommit para true para atender ao websphere
// TODO Precisa ser homologado com demais App Servers
con.setAutoCommit(true);
con.close();
log.debug("Liberou conexoes do pool e fechou sessao, ao fazer rollback");
} catch (Exception ex) {
log.fatal("Nao conseguiu devolver o pool para o App Server:"+ex);
throw erro.msg("erros.persistencia.rollback",null,ex);
}
}
}
Ai vc sempre chama essa função no execpt
Beleza anderson eu tava ate esquecendo de dar rowback.
Valeu. Muito obrigado.