Hi,
I migrated my JClient + Struts/ADF app. from 10.1.3.0 to 10.1.3.3.
I encountered following blocking problem in my Struts/ADF: session.invalidate doesn't seem to work anymore => IllegalStateException was caught on display of logout page. (see end of message)
I tested a same flow in both versions, works in 10.1.3.0 not in 10.1.3.3
home page -> login page -> logout page
I kept the full log for both versions in case you need them.
The app. works like this:
I have a servlet filter that intercepts all actions except login paths.
If the action is logout nothing is done in the filter else
the filter adds a request attribute if the session is invalid.
So in this case this servlet filter is irrelevant (explained because part of stacktrace)
The logout page is a specific jsp page where no getSession methods are called in order to avoid a creation of a new session.
When a user activates the logout link, the logout action prepareModel method does the following:
HttpSession httpSession = req.getSession(false);
if (httpSession != null)
{
UserContainer userContainer = this.getUserContainer(actionContext);
if (userContainer != null)
{
req.setAttribute("langCode",userContainer.getPageLangCode());
req.setAttribute("langDir",userContainer.getPageLangDirection());
req.setAttribute("langAlignment",userContainer.getPageLangAlignment());
langSet = true;
}
try
{
System.out.println(getClass().getName()+".prepareModel before httpSession.invalidate() id: "+httpSession.getId());
httpSession.invalidate();
}
catch (IllegalStateException ie)
{
System.out.println(getClass().getName()+".prepareModel httpSession.invalidate() IllegalStateException caught, "+ie.toString());
}
}
else
{
System.out.println(getClass().getName()+".prepareModel httpSession == null");
}
if (!langSet)
{
int sessionLangId = 1;
MainshopContainer mainshopContainer = this.getMainshopContainer(actionContext);
if (req.getServerName().endsWith("co.il"))
{
sessionLangId = mainshopContainer.getLangIdFromLocaleString(LocaleFilter.localeStringIL);
}
LangBO langBO = mainshopContainer.getLangBOFromIntMap(sessionLangId);
req.setAttribute("langCode",langBO.getLangCode());
req.setAttribute("langDir",langBO.getLangDirection());
req.setAttribute("langAlignment",langBO.getLangAlignment());
}
}
The following exception is caught:
Jul 7, 2007 3:45:35 PM oracle.jsp.logger.JspMessages infoCannotDispatchJspPage
INFO: Unable to dispatch JSP Page : java.lang.IllegalStateException: Session was invalidated
at com.evermind.server.http.EvermindHttpSession.invalidate(EvermindHttpSession.java:390)
at com.evermind.server.http.EvermindHttpServletRequest.unprivileged_getSession(EvermindHttpServletRequest.java:2697)
at com.evermind.server.http.EvermindHttpServletRequest.getSession(EvermindHttpServletRequest.java:2598)
at com.evermind.server.http.EvermindHttpServletRequest.getSession(EvermindHttpServletRequest.java:2592)
at com.evermind.server.http.EvermindPageContext.initialize(EvermindPageContext.java:326)
at com.evermind.server.http.EvermindJSPFactory.getCachedPageContext(EvermindJSPFactory.java:85)
at com.evermind.server.http.EvermindJSPFactory.getPageContext(EvermindJSPFactory.java:41)
at _web_2d_inf._jsp._logout._jspService(_logout.java:32)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
at com.mySite.filter.LocaleFilter.doFilter(LocaleFilter.java:323)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
:
Your help will be appreciated
Frederic