1

我有一个部署到 Tomcat 7 的应用程序,目前集群在两个节点之间。当容器尝试反序列化已更改的类时,我遇到了一个小问题。读写方法应该优雅地处理这个问题,所以我认为这不是问题。尽我所能告诉设置serialVersionUID应该可以解决问题,但是在我的代码中,我将其指定为-1并且在该值下方的错误中似乎被忽略了。

例外:

java.io.InvalidClassException:common.user.User;本地类不兼容:st ream classdesc serialVersionUID = 1828770465826288626,本地类serialVersion UID = 6192552274218063887

类定义的相关部分:

case class User(
    var id: Long = 0l) extends SerialVersionUID(-1l) with KeyedEntity[Long] with Externalizable {

  def readExternal(in: ObjectInput) {
    id = in.readLong()
  }

  def writeExternal(out: ObjectOutput) {
    out.writeLong(id)
  }
}

我还尝试使用以下内容而不是扩展抽象类(根据:http ://www.scala-lang.org/node/259 )

private val serialVersionUID = -1l

我得到相同的结果。在如何使用 Scala 正确地外部化一个类时,我有什么遗漏吗?

4

1 回答 1

3

检查SerialVersionUID的文档,它是一个注释,所以你应该@SerialVersionUID(123)在类声明之前使用。

进行中:

@SerialVersionUID(123)
case class User(
    var id: Long = 0l) extends KeyedEntity[Long] with Externalizable {
     ...
}
于 2012-10-03T14:33:54.140 回答