Hi! I am using HttpSession to store some information as session attributes. When I am testing the application locally, it works fine. But when I upload it to production, it seems that any session attributes that I retrieve from the session and modify it are not persisted back to the session again, unless I specifically call HttpSession.setAttribute() in each request. I am not sure whether it is the expected behavior or it is bug. Here are the two test cases:
Test1: public class Test_gae_sessionServlet extends HttpServlet { private static final String SESSION_ATTRIBUTE_NAME = "test_session_attribute"; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { HttpSession session = req.getSession(); resp.setContentType("text/plain"); SessionContext sessionContext = (SessionContext) session.getAttribute (SESSION_ATTRIBUTE_NAME); resp.getWriter().println("session retreived: " + sessionContext); if (sessionContext==null) { sessionContext = new SessionContext(); resp.getWriter().println("session created: " + sessionContext); // calling setAttribute only when the object is first created resp.getWriter().println("putting context into session: " + sessionContext); session.setAttribute(SESSION_ATTRIBUTE_NAME, sessionContext); } sessionContext.value++; resp.getWriter().println("context at end of retquest: " + sessionContext); } } Test2: public class Test_gae_sessionServlet extends HttpServlet { private static final String SESSION_ATTRIBUTE_NAME = "test_session_attribute"; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { HttpSession session = req.getSession(); resp.setContentType("text/plain"); SessionContext sessionContext = (SessionContext) session.getAttribute (SESSION_ATTRIBUTE_NAME); resp.getWriter().println("session retreived: " + sessionContext); if (sessionContext==null) { sessionContext = new SessionContext(); resp.getWriter().println("session created: " + sessionContext); } // calling setAttribute in every request resp.getWriter().println("putting context into session: " + sessionContext); session.setAttribute(SESSION_ATTRIBUTE_NAME, sessionContext); sessionContext.value++; resp.getWriter().println("context at end of retquest: " + sessionContext); } } The object stored in the session: public class SessionContext implements Serializable { private static final long serialVersionUID = -5151175222401820614L; public int value = 0; @Override public String toString() { return "SessionContext [value=" + value + "]"; } } In Test1 it is always the first version of the SessionContext that is retreived in each request, no matter that I try to change its contents during each request. Test2 works as expected. Is it so that I need to call HttpSession.setAttribute() for any object that is expected to change during the request? Is it according to the servlet specification? Marton --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---