Akka remote: возможно ли работать с классами из двух разных приложений, которые не имеют одинаковое имя пакета?

У меня есть два приложения, которые общаются через пульт Akka.

У меня есть один класс в моей первой заявке в 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 не предназначен за это. Он предназначен только для отслеживания совместимости сериализации между несколькими версиями одного и того же класса.

Прочитайте, что такое serialVersionUID и почему я должен его использовать?

Итак, у вас есть два варианта:

  • Вы используете десериализацию байтового массива вручную из mypackage1.A в mypackage2.A
  • Вы разделяете модель данных и избегаете двух идентичных классов в двух разных пакетах в двух разных приложениях
Другие вопросы по тегам