2016-10-21 1 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

Смежные вопросы