Bom dia pessoal,
Alguem tem uma dica de como eu posso proceder para o gerenciamento de sessões do Hibernate para os clientes da minha aplicação.
No meu caso eu tenho a classe HibernateUtil que retorna da factory um objeto Session aberto, logo toda a vez que necessite de uma Session eu tenho que chamar a classe e após usar eu tenho que fechar esta session aberta.
Em alguns momentos, quando eu tentava alterar algum registro na aplicação grafica, uma exception era lançada dizendo que o objeto estava sendo referenciado em outra sessão.
Alguem tem uma dica de como eu posso tratar esse problema de uma maneira organizada.
Agradeço qualquer ajuda. Abraços.
Esqueci de postar o que eu estava fazendo para gerenciar as Session´s correntes na aplicação.
public boolean remove(IJavaBean objeto)throws RemoteException {
Transaction transaction = null;
try {
setSession(openSession());
transaction = getSession().beginTransaction();
if( objeto.getIdentificador() != null || objeto.getIdentificador() > 0){
getSession().delete(objeto);
transaction.commit();
}else
return false;
} catch (Exception e) {
if(transaction != null)
transaction.rollback();
throw new HibernateDaoException("Method: REMOVE, Erro: " + e.getLocalizedMessage());
} finally {
getSession().flush();
getSession().close();
}
return true;
}
//
public Session openSession(){
if(getSession() == null || !(getSession().isOpen()))
return HibernateUtil.getSession();
else
return getSession();
}
O Hibernate já inclui esse recurso:
[code]SessionFactory factory = //obter factory
Session sessao = factory.getCurrentSession();[/code]
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/SessionFactory.html#getCurrentSession()
Em jair, o meu codigo de exemplo para o metodo remove está correto, na forma de limpeza e fechamento de sessões?
Sim, a principio não vejo nada de errado.