1

Tomcat 7 にデプロイされ、現在 2 つのノード間でクラスター化されているアプリがあります。コンテナーが変更されたクラスを逆シリアル化しようとしたときに発生する小さな問題が発生しています。読み取りおよび書き込みメソッドはこれを適切に処理する必要があるため、それは問題ではないと思います。設定serialVersionUIDで問題が解決するはずですが、私のコードではそれを次のように指定して-1おり、以下のエラーではその値が無視されているようです。

例外:

java.io.InvalidClassException: common.user.User; ローカル クラスに互換性がありません: st ストリーム 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 に答える