Olá a todos.
Estou com um problema que está me tirando o sono. Tudo indica ser algum problema no gerenciamento das sessões, mas não consigo descobrir como ou onde.
Oferecemos um serviço via web aos nossos clientes (para que façam alterações nos serviços contratados). Na gigantesca parcela dos casos, não temos qualquer problema, mas para uma pequena parcela, nós temos. E o que acontece é um tanto misterioso:
Dá uns erros durante a utilização do sistema, com o lançamento uma NullPointerException quando chamava algum método de variáveis que deveriam estar carregadas. Com o passar dos casos, notei que tais erros sempre ocorriam em relação à variáveis recuperadas da sessão. Tratei de fazer o seguinte, quando dava o tal erro fazia a página mandar um e-mail para mim com mais informações, uma dessas informações é o conjunto de attributos da minha sessão (nome e valor) fiz isso com session.getAttributeNames(), depois com um laço pego as variáveis e seus valores e mando tudo por e-mail.
Entretanto, tive a surpresa de descobrir que quando dava erro alguns atributos que deveriam estar carregados não estão. Quando digo, deveriam é no sentido que deveriam mesmo… rs… Para isso vou explicar melhor como o sistema funciona.
O usuário faz login, na página que valida o login, alguns dados importantes são criados na sessão com session.setAttribute, então a página é redirecionada à um “menu” onde o cliente faz as alterações que quer. Ocorre que quando dá erro (e só dá erro no cliente, quando acesso da minha rede usando seu login fica tudo redondinho) alguns dos atributos setados na primeira página não existem mais na segunda. Já pesquisei em todas as páginas do site. Em nenhum lugar estou usando session.removeAttribute ou session invalidate(). Não há também qualquer desvio (if) que justifique um atributo estar carregado e outro não. Se executar o SQL que retorna dos dados que serão jogados na sessão, eles retornam valores diferentes de NULL e em alguns casos nem poderia ser diferente, já que são PK’s de tabela.
Já alterei minha chamada que era response.sendRedirect("menu.jsp"); para response.sendRedirect(response.encodeRedirectURL("menu.jsp"));, mas não tive sucesso. Não sei mais o que fazer, gostaria que me ajudassem.
Muito Obrigado.
Anderson Costa
São Paulo - SP