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 でクラスを適切に外部化する方法に欠けているものはありますか?