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…