我正在使用自定义类 UserProfile 来管理我在 Google 应用程序引擎中的会话,但我收到错误消息(当用户访问应用程序的默认 servlet 时):
javax.servlet.ServletException: java.lang.RuntimeException: java.io.InvalidClassException: ro.expert.evt.shared.entities.ObjectModel; local class incompatible:
stream classdesc serialVersionUID = -2824144882306533912,
local class serialVersionUID = 6500787607817458947
我知道问题是我更新了我的课程,当我部署我的应用程序时,它没有 serialVersionUID。
我的问题是:
如果我设置了生成的serialVersionUID,问题会再次出现吗?每次我修改我的用户类时,我都要重新生成它吗?
如何为我已经登录的用户解决这个问题?我如何使他们的会话无效(“清除”他们的 cookie 应该可以工作)
编辑:清除整个内存缓存会使用户会话无效吗?
我应该调用 getSession().invalidate() 但我无法运行任何代码来捕获异常:
Caused by: java.lang.RuntimeException: java.io.InvalidClassException: ro.expert.evt.shared.entities.ObjectModel; local class incompatible: stream classdesc serialVersionUID = -2824144882306533912, local class serialVersionUID = 6500787607817458947
at com.google.apphosting.runtime.SessionManagerUtil.deserialize(SessionManagerUtil.java:57)
at com.google.apphosting.runtime.jetty.MemcacheSessionStore.getSession(MemcacheSessionStore.java:39)
at com.google.apphosting.runtime.jetty.SessionManager.loadSession(SessionManager.java:327)
at com.google.apphosting.runtime.jetty.SessionManager.getSession(SessionManager.java:301)
at org.mortbay.jetty.servlet.AbstractSessionManager.getHttpSession(AbstractSessionManager.java:237)
at org.mortbay.jetty.servlet.SessionHandler.setRequestedId(SessionHandler.java:246)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:136)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
... 16 more
在我的初始 servlet 中是否有可以覆盖的方法,以便我可以捕获上面的异常并使用户的会话无效?