Problema Struts + Hibernate (failed to lazily initialize a collection)

Bom dia galera,
Estou com um problema que já estou tentando corrigir há algum tempo mas sem sucesso. É algo até simples e funciona assim:
faço o login do usuário jogando as informações para uma action onde verifico o login carrego seu objeto na sessão. Tendo o login ocorrido sem problemas eu dou um findForward() para outra action onde ali carregaria dados a serem apresentados ao usuário e em seguida dou um findForward() que redireciona para uma página onde mostraria essas informações. Essa sequência funciona na primeira chamada, na chamada subsequente ele já me retorna um erro: javax.servlet.ServletException: failed to lazily initialize a collection of role: com.pix.hibernate.entities.Cxpostal.documentoses, no session or session was closed. Já tentei dar Hibernate.initialize() no meu objeto porém ele dá outro erro: disconnected session. Estou usando o OpenSessionInView do Hibernate mapeado para *.do.

Login do Usuário:

public ActionForward userLogin(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)  {
		String forward = "erroLoginUser";
		LoginUserForm loginUserForm = (LoginUserForm) form;
		UserLoginBO loginBO = new UserLoginBO();
		Usuarios userObj = (Usuarios) loginBO.verifyLogin(loginUserForm, UserLoginBO.COMMON_USER_LOGIN);
		ActionMessages ame = new ActionMessages();
		if(userObj != null){//Se entrou a senha está ok
			//Verifica se o usuário está suspenso
			if(!(userObj.getTabStatus().getStDesc().equalsIgnoreCase("suspenso"))){
				ClientInfoVO cliVO = loginBO.createUserInfoObj(userObj);
				putClientObjectInSession(cliVO,request);
				forward = "sucessouser";
			}else{
				ame.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "errors.login.suspended"));
				forward = "erroLoginUser";
			}
		}else{
			loginUserForm.setUserPass("");
			//Caso dê algum erro, retorna para página de erro
			forward = "erroLoginUser";
		}
		saveErrors(request, ame);
		return mapping.findForward(forward);
	}

Action que carrega as informações(Lista de documentos)

public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		ListaDocumentosForm listaDocumentosForm = (ListaDocumentosForm) form;
		HttpSession ses = request.getSession();
		ClientInfoVO userObj = (ClientInfoVO) ses.getAttribute("userObj");
		if(listaDocumentosForm.getCaixaPostalAtual() != null){
			userObj.setCaixaPostalAtual(listaDocumentosForm.getCaixaPostalAtual());
		}
		listaDocumentosForm.setCaixaPostalAtual(userObj.getCaixaPostalAtual());
		listaDocumentosForm.setDocumentos(userObj.getDocumentosCxAtual());
		listaDocumentosForm.setCxsPostaisUser(userObj.getCaixasPostais());
		return mapping.findForward("userPage");
	}

Chamada onde ocorre o erro: (cx.getDocumentoses())
Cxpostal é um POJO do Hibernate onde armazena as inf. da cx postal do usuario.

public List getDocumentosCxAtual(){
		Cxpostal cx = ((Cxpostal)cxsPostais.get(caixaPostalAtual));
		Set documentos = cx.getDocumentoses();
		ArrayList al = new  ArrayList();
		if(documentos.size() >0){
			Iterator it = documentos.iterator();
			while (it.hasNext()) {
				DocumentoVO dVO = new DocumentoVO();
				Documentos object = (Documentos) it.next();
				dVO.setDocDtentrada(object.getDocDtentrada());
				dVO.setDocDtenvio(object.getDocDtenvio());
				dVO.setDocIdentificacao(object.getDocIdentificacao());
				dVO.setDocTamanho(object.getDocTamanho());
				dVO.setIddocumentos(object.getIddocumentos());
				dVO.setNecessitaQtdAssinaturas(cx.getCxQtdAssinatura());
				Set d = object.getDocAssinados();
				if(d.contains(object)){
					dVO.setIsAssinado(true);
				}
				al.add(dVO);
			}
			if(al!=null && al.size() >= 2){
				Collections.sort(al);
			}
		}
		return al;
	}

Alguém poderia me apontar o que posso estar fazendo de errado? Ou então até como melhorar isso para evitar problemas? Obrigado…

ja tive um problema semelhando o hibernate tava fechando a conexão antes de abrir algo do tipo…

faça um teste sem fechar as conexões para ver se isso…

Mas eu não estou fechando a conexão cara. No filtro eu só encerro a transação quando finaliza o meu request. É o que o padrão OpenSessionInView faz…

acho que entendi errado
viajei…

:oops:

Sem problemas =) Estamos todos aqui pra entender ehhehe :slight_smile:

Tanto é que até agora não entendi qual o problema nessas chamadas… Isso funciona na primeira vez TODAS AS VEZES. Quando passa a segunda vez não funciona mais. Preciso de um mago, vidente, sei lá =\

alguem resolveu esse problema?
to tendoo mesmo com o jsf :frowning: