Open Session In View + Facelets

0 respostas
ccefetpb

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 ?

Criado 11 de maio de 2010
Respostas 0
Participantes 1