2014-09-16 4 views
0

구현을 위해 GridGain을 사용하여 메시징 시스템을 만들었습니다. 나는 GridGainGridProjection로 구성된 MessageCenter 클래스가, 내 설정은 이제 다시, 그리드를 시동 내가 직렬화 오류로 인해 얻을 다른 게이트웨이를 시작 게이트웨이를 시작할 때이GridGain 직렬화 문제

Gateway-> MessageCenter-> GridProjection 

같은 모양 GridGain은 Gateway, MessageCenter 및 모든 종속성을 직렬화하려고 시도합니다. 모든 종속성은 Serializable으로 모든 것을 표시하도록합니다.

GridGain이 그리드와 관련이없는 부모 클래스를 직렬화하려고 시도하는 이유를 이해하지 못하고 해제하는 방법이 무엇입니까?

답변

1

제공된 설명에서 익명의 폐쇄/메시지를 원격 노드로 보내는 것처럼 보입니다.

익명 클래스는 GridGain이이를 직렬화하도록하는 둘러싼 클래스에 대한 참조를 암시 적으로 캡처합니다. 여기서 깨끗한 해결책은 익명의 클로저/메시지를 정적 인 내부 클래스로 옮기는 것입니다. 이렇게하면 직렬화되는 것을 완전히 제어 할 수 있습니다.

0

내 잘못입니다. Hazelcast로 전환하여 문제를 발견했습니다. 나는 메신저 클래스를 가지고 있는데 둘 다 수신 메소드를 가지고 있으며 리스너를 등록 할 수있다. 메신저는 그리드 클러스터의 대기열에 있습니다 (GridGain 또는 Hazelcast). 이것은 메신저를 직렬화 할 수 있어야하며, 등록 된 리스너도 직렬화 할 수 있어야합니다.

내 게이트웨이에는 수신 메시지를 처리하기 위해 메신저에 등록 된 실행 가능한 핸들러가 있습니다. 역 직렬화입니다.

내가 GridGain 새로운 회원이 그리드에 가입하고 큐에있는 개체로부터 도달 가능한 모든 직렬화 할 때 직렬화 선행을 않기 때문에 GridGain과이를 찾을 수 없습니다, Hazelcast는 다른 한편으로는 런타임

까지 직렬화하지 않습니다