segunda-feira, 3 de outubro de 2011

Como passar acessar managed beans a partir de uma Servlet/Applet

Estava trabalhando na migração de um sistema do ambiente do Weblogic 9.2 para a versão 11g (conhecida também como a 10.3.4 >). E um simples trecho de código parou de funcionar nesse processo. Uma Applet que invocava uma servlet para fazer uma determinada tarefa, precisava acessar um atributo do Managed Bean (que tinha escopo de sessão) e o código antigo estava da seguinte forma:

//método service
HttpSession session = request.getSession(true); SessionBean sessionBean = (SessionBean) session.getAttribute("SessionBean");
No antigo servidor esse código funcionava perfeitamente, entretanto no servidor novo, passou a estourar um NullPointerException. Não encontrei uma solução melhor e aceito comentários sobre uma forma melhor de resolver o problema. Minha solução. 1) Colocar o SessionBean como atributo do ServletContext e acessar esse atributo da Servlet 2) JSF é gerenciado para FacesServlet e a Applet já falava com um Servlet, então o ServletContext é compartilhado entre as Servlets o que resolveria meu problema A solução ficou da seguinte forma:


SessionBean sessionBean = (SessionBean) getServletContext().getAttribute("sessionBean"); //No construtor do Bean JSF criei o seguinte trecho de código ServletContext servletContext = getServletContext(); servletContext.setAttribute("sessionBean", this); //método auxiliar para pegar o ServletContext. protected ServletContext getServletContext(){ return (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext(); }
Referência para essa interface que me ajudou bastante:... No post do BalusC communication in jsf ele fala sobre uma outra forma, que no meu caso não funcionou, o NullPointerException continuou acontecendo (http://balusc.blogspot.com/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter) Por sinal, recomendo a leitura desse blog pois tem muitas referências interessantes...

Nenhum comentário:

Postar um comentário