2016-10-21 64 views
0

我有兩個應用程序通過Akka遠程通信。Akka remote:是否可以使用來自兩個不同應用程序的類沒有相同包名稱的類?

我在我的第一個應用程序一類的pachage a

@SerialVersionUID(42L) 
case class A() 

和同樣一個在我的第二個應用程序,但在不同的包b

@SerialVersionUID(42L) 
case class A() 

但是,當我得到由具有類別a的實例的演員消息,由於包名稱不同,我得到java.lang.ClassNotFoundException: a.A

有沒有辦法輕易避免這種情況?

回答

1

你想要什麼需要一個完整的類路徑掃描(如果有第三個mypackage3.A也具有相同的SerialVersionUID?JVM如何知道它必須將mypackage1.A反序列化爲另一個類型?),顯然SerialVersionUID並不意味着這一點。它只是爲了跟蹤整個相同類的多個版本序列化兼容。

有一個讀What is a serialVersionUID and why should I use it?

所以,你有兩個選擇:

  • 您使用從mypackage1.A字節數組手動反序列化爲mypackage2.A
  • 您共享數據模型和你避免有兩種不同的封裝兩個相同的課程在兩個不同的應用程序
+1

對於第一種選擇:如果我使用的Protobuf,將它的工作?對於第二個:有沒有簡單的方法來共享數據模型?我能想到的唯一方法是創建一個打包的庫,但每次我想修改此模型時都需要重新打包。 – Simon

+0

如果你想要兩個應用程序相互通話,你應該同意某種數據模型。使用protobuf的是,如果你需要快速和便攜系列化,這樣你就可以讀取多種語言/寫偉大的,但不解決,你需要共享你的.proto定義 – Edmondo1984

+0

因此,有沒有其他的辦法不是創建一個包裝庫,並重新包裝它每次我想修改這個模型? – Simon

相關問題