0

Akka リモートで通信する 2 つのアプリケーションがあります。

パッケージ内の最初のアプリケーションに 1 つのクラスがありますa

@SerialVersionUID(42L)
case class A()

2番目のアプリケーションと同じですが、別のパッケージにありますb:

@SerialVersionUID(42L)
case class A() 

しかし、クラスのインスタンスを含むアクター メッセージをa取得するjava.lang.ClassNotFoundException: a.Aと、パッケージ名が異なるために が表示されます。

これを簡単に回避する方法はありますか?

4

1 に答える 1

1

あなたが望むものは、完全なクラスパススキャンを必要とするでしょう(同じSerialVersionUIDを持つ3番目のmypackage3.Aがある場合はどうなりますか?JVMは、mypackage1.Aを別のタイプに逆シリアル化する必要があることをどのように認識しますか?)そして明らかにSerialVersionUIDは意図されていませんこのため。同じクラスの複数のバージョン間でシリアライゼーションの互換性を追跡することのみを目的としています。

serialVersionUIDとは何ですか? なぜそれを使用する必要があるのですか?

したがって、次の 2 つのオプションがあります。

  • バイト配列を mypackage1.A から mypackage2.A に手動で逆シリアル化します。
  • データ モデルを共有し、2 つの異なるアプリの 2 つの異なるパッケージに 2 つの同一のクラスを持たないようにする
于 2016-10-21T10:08:45.200 に答える