カスタム クラス UserProfile を使用して Google アプリ エンジンでセッションを管理していますが、エラーが発生します (ユーザーがアプリのデフォルト サーブレットにアクセスした場合):
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 の「クリア」が機能するはずです)。
編集:memcache全体をクリアすると、ユーザーセッションが無効になりますか?
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
上記の例外をキャッチしてユーザーのセッションを無効にできるように、オーバーライドできる初期サーブレットのメソッドはありますか?