2016-10-21 7 views
0

나는 Akka 리모컨으로 통신하는 두 개의 응용 프로그램을 가지고 있습니다.Akka remote : 동일한 패키지 이름이없는 두 개의 다른 앱의 클래스로 작업 할 수 있습니까?

@SerialVersionUID(42L) 
case class A() 

내 두 번째 응용 프로그램에서 동일 하나를 제외한 다른 패키지 b에 :

은 내가 pachage a에 처음으로 응용 프로그램에서 하나 개의 클래스가

@SerialVersionUID(42L) 
case class A() 

그러나 나는 얻을 때 a 다른 인스턴스의 패키지 이름 때문에 java.lang.ClassNotFoundException: a.A이 표시됩니다.

쉽게 피할 수있는 방법이 있습니까?

답변

1

전체 클래스 경로 검사가 필요하면 (동일한 SerialVersionUID가있는 세 번째 mypackage3.A가있는 경우 어떻게해야합니까? JVM이 mypackage1.A를 다른 유형으로 비 직렬화해야한다는 것을 어떻게 알 수 있습니까?) 명백하게 SerialVersionUID는이 용도로 사용되지 않습니다. 클래스의 여러 버전에서 일련 화 호환성을 추적하기위한 용도로만 사용됩니다.

은 두 가지 옵션이

그래서 What is a serialVersionUID and why should I use it?을 읽게

  • 을 당신이 사용하는 수동 mypackage2.A에
  • 당신은 데이터 모델을 공유하고 피 mypackage1.A에서 바이트 배열을 직렬화 두 개의 다른 응용 프로그램에서 두 개의 다른 패키지에 두 개의 동일한 클래스가있는 경우
+1

첫 번째 옵션 : Protobuf를 사용하는 경우 작동합니까? 두 번째 : 데이터 모델을 공유하는 쉬운 방법이 있습니까? 제가 생각할 수있는 유일한 방법은 패키지 라이브러리를 만드는 것입니다.하지만이 모델을 수정할 때마다 패키지를 다시 패키징해야합니다. – Simon

+0

두 앱이 서로 대화하기를 원한다면 어떤 종류의 데이터 모델에 동의해야합니다. protobuf를 사용하면 빠르고 직렬화가 필요하므로 여러 언어에서 읽고 쓸 수 있지만 .proto 정의를 공유해야한다는 점을 극복하지는 못합니다. – Edmondo1984

+0

패키지 라이브러리를 만들고 리 패키징하는 것 외에 다른 방법은 없습니다 이 모델을 수정하고 싶을 때마다? – Simon