簡體   English   中英

Google App Engine-登錄時發生InvalidClassException

[英]Google App Engine - InvalidClassException when logging in

我正在使用自定義類UserProfile來管理我在Google App Engine中的會話,但收到錯誤消息(當用戶訪問應用程序的默認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。

我的問題是:

  1. 如果設置了生成的serialVersionUID,問題是否會再次出現? 每次修改用戶類時,都必須重新生成它嗎?

  2. 如何為我已經登錄的用戶解決此問題? 如何使他們的會話無效(“清除”他們的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中是否有可以重寫的方法,以便可以捕獲上述異常並使用戶會話無效?

是的,您必須提供顯式的serialVersionUID值以避免此錯誤。 您可以在部署或/和類修改之間保持相同的價值。

對於現有用戶,您可以使用GAE的版本控制功能。 使用增加的版本進行部署,例如現有的GAE應用程序v.1,因此將新代碼部署為v.2,然后您可以將默認版本指向新版本...這樣,現有用戶仍將繼續使用舊版本...但是新用戶將繼續使用舊版本打新版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM