【问题标题】:gae 1.7.3 update -> java.io.InvalidClassExceptiongae 1.7.3 更新-> java.io.InvalidClassException
【发布时间】:2012-11-28 13:40:15
【问题描述】:

我刚刚将 Java GAE SDK 更新到 1.7.3,现在在尝试从本地数据存储区读取数据时出现异常:

INFO: Failed to load from the backing store,
C:\Users\<user>\Documents\myproject\war\WEB-INF\appengine-generated\local_db.bin
java.io.InvalidClassException:
com.google.appengine.repackaged.com.google.io.protocol.ProtocolMessage;
local class incompatible:
    stream classdesc serialVersionUID = 2691625986599730786,
    local class serialVersionUID = -3428150205257072157
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)

这会阻止我从现有的本地数据存储中读取实体。 如果我降级到 1.7.2,它会再次运行,但我想使用最新版本运行。

有人知道如何解决这个问题吗?谢谢。

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:

    如果我对您的理解正确,您已经使用开发 Web 应用程序服务器的 1.7.2 版本创建了一个本地数据存储,并且正在尝试使用 1.7.3 版本使用相同的数据(文件)。

    较新版本的开发应用服务器有责任但不能保证无法读取使用较早版本保存的数据。

    我发现用1.7.2 dev app server存储的数据不能用在1.7.3上,所以这次我们都倒霉了。

    在这种情况下,您必须使用 1.7.3 重新创建数据。

    【讨论】:

    • 如果你是对的,这对于实时服务器来说意味着什么?我会在那里遇到同样的问题吗?
    • 没有。不同版本的开发应用服务器之间可能存在的数据存储文件不兼容对实时系统没有影响。这只是开发应用服务器的一个怪癖。
    【解决方案2】:

    我认为有可能取回您的数据,但需要一些工作。如果我们在本地的两台应用服务器上运行您的项目:一台使用 SDK 1.7.2,另一台使用较新的 SDK,然后使用远程 api 访问旧数据并复制到新数据存储区,您可以重新创建所有条目。

    同样,它可能会起作用,所以只有你必须尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-02
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 2012-03-01
      • 2013-02-24
      相关资源
      最近更新 更多