2017-04-25 5 views
0

Infinispan 6.0.1.Final을 사용하는 스프링 부팅 응용 프로그램이 있습니다. 나는 A와 B의 두 클래스를 가지고있다. B는 A를 확장한다. 그리고 나는 B 타입의 객체를 저장하는 캐시를 가지고있다. 이제, 나는 약간의 변경을했고, 나는 2 개의 클래스 필드와 그 getter/setter를 B에서 A로 옮겼다. 두 클래스의 직렬 ID 내 응용 프로그램을 다시 시작할 때 캐시에서 B 유형의 객체를 가져 오면 이동 한 필드가 null로 표시됩니다.Infinispan : 클래스가 변경되고 직렬화가 작동하지 않습니다.

제 질문은 : 캐시에 B 유형의 오브젝트 (B의 이전 버전)가 들어 있습니다. 나는 클래스 B를 변경했으나 의미 론적 관점에서 클래스는 같은 필드와 메소드로 유지됩니다. 이동 한 필드가 이제 부모 클래스에 있기 때문입니다. 클래스를 변경하기 전에 비 직렬화 작업을 수행 할 수 있습니까?

답변

1

개체의 클래스 정의를 변경할 때 Infinispan에서 모든 데이터를 삭제할 수 있다는 것을 알고있을 때만 Java 직렬화를 사용해야합니다.

휴대용 객체 표현을 위해

는 Protobuf 인코딩 된 객체를 사용 : 당신은 당신이 스키마가 업데이트 될 때 데이터가 진화하는 방법에 대한 더 나은 제어 할 수 있습니다 protobuf와

. 부수적으로 Infinispan은 원격 쿼리 및 기타 여러 가지 고급 기능을 지원하는 기본 요구 사항이므로 매우 잘 지원합니다.