이것은 실제로 개체를 serialize하는 방법에 따라 다릅니다.
기본적 자바 직렬화 (MyKey
및 MyValue
이 Serializable
를 구현)에 의존하는 경우, static final long serialVersionUID
를 사용하여 클래스의 각 수정시를 업데이트하는 당신의 필요보다.
사용자 정의 직렬화 (예 : com.hazelcast.nio.serialization.StreamSerializer 구현)를 사용하는 경우 읽기 및 쓰기 모두에서 형식 변경을 감지하고 그에 따라 작동해야합니다.
참고 : 더 구체적인 대답을해야하는 경우, 수업 (MyKey
및 MyValue
), 문제의지도 hazelcast의 conf 및 직렬화 기술의 일부 코드를 제공하십시오. (주석 후)
편집 :
나는 당신이 BINARY
당신의지도의 기본 in-memory-format
을 사용한다고 가정하기 위하여려고하고있다. 이 경우, hazelcast는 비 순차 화없이 바이트 항목으로 맵 항목을 저장하므로 put()
에 대한 예외는 없습니다. 그러나 get()
값일 때 hazelcast는이를 비 직렬화해야하며 예외가 발생하는 경우입니다.
in-memory-format
을 OBJECT
으로 설정하면 hazelcast는 put()
에 개체를 deserialize해야하며 예외가 발생합니다.
EDIT2 :
in-memory-format
를 변경하지 않고 put()
에 예외를 유발하는 또 다른 방법이있다. 지도에 EntryAddedListener
을 추가 할 수 있습니다.
hz.getMap(Client.MAP_NAME).addEntryListener(new EntryAddedListener() {
public void entryAdded(EntryEvent event) {
// this will deserialize the new value and throw exception if format doesn't match
event.getValue();
}
}, true);
저는 Serializable 및 serialVersionUID를 사용하고 있습니다. 그러나 원격 노드에 differente 버전이 있다면 어떨까요?나는 tht를 경험 했으므로 아무런 예외도 발생시키지 않는다. 그러나 던져진다. IMAP 정의 된에 오브젝트의 다른 버전을 넣으면 예외가 발생합니다 ..... –
Azimuts
@Azimuts @Azimuts 추가 정보에 대한 응답으로 내 대답을 편집했습니다. – noscreenname