Estou desenvolvendo um projeto JSF usando rich faces , hibernate e facelets , é a primeira vez que trabalho com facelets e estou a um bom tempo com um problema .
Estou usando o Open Session In View para controlar a instanciação de sessões do hibernate , só que apos exatamentr 4 requisições o sistema trava , dei uma pesquisada e acredito que deva estar ocorrendo uma situação de deadlock .Abaixo código do meu listener que controla isso :
public class ListenerFasesJSF implements PhaseListener {
@Override
public void beforePhase(PhaseEvent fase) {
System.out.println("Antes Fase: "+fase.getPhaseId());
if(fase.getPhaseId().equals(PhaseId.RESTORE_VIEW))
{
Session session = HibernateUtil.getSessionFactory().openSession();//SE EU SUBSTITUIR ESSA LINHA POR getCurrentSession() O DEADLOCK
//NAO ACONTECE , MAS OUTRAS PARTES DO CODIGO QUEBRAM
session.beginTransaction();//O DEADLOCK ACONTECE AQUI
FacesContextUtil.setRequestSession(session);
}
}
@Override
public void afterPhase(PhaseEvent fase) {
System.out.println("Depois Fase: "+fase.getPhaseId());
if(fase.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
{
Session session = FacesContextUtil.getRequestSession();
try{
session.getTransaction().commit();
}catch(Exception e)
{
if(session.getTransaction().isActive())
{
session.getTransaction().rollback();
}
}finally
{
session.close();
}
}
}
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}
Alguem tem alguma idéia do que eu posso estar fazendo errado ?
Ja havia usado o padrão dessa mesma forma em outros projetos e nunca deu errado,entao so posso imaginar que o PAU seja com o uso do Facelets !
Alguma idéia ?