2010-03-16 3 views
9

오늘 내가 왜 맹목적으로이 요구 사항을 수년간 지켜 보지 않았는지 깨닫지 못했습니다. 오늘, 나는 처음부터 만든 모델 객체로 NotSerializableException을 훑어 보았고 충분하다는 것을 깨달았습니다.전송 객체가 Serializable을 구현해야하는 이유는 무엇입니까?

로드 밸런싱 된 서버 간의 세션 복제로 인한 것 같지만 직렬화를 구현하지 않는 세션 범위의 다른 개체를 본 적이 있습니다. 이것이 진정한 이유입니까?

답변

4

그것은 진짜 이유입니다. 웹 서버 나 응용 프로그램 서버가 사실 객체를 직렬화하는지 (또는 직렬화 가능함을 검증하지만, 실제로는 직렬화 할 수있는 유일한 방법은 실제로 직렬화하는 것입니다) 실제로 실제로 중요합니다.

대부분의 응용 프로그램 서버에는 엄격하지 않은 옵션이 있습니다. 실제로 상태를 공유하는로드 균형 조정 된 서버를 사용하지 않으면 문제없이 보았을 것입니다.

+0

고맙습니다. 말이된다. 따라서 Serializable을 구현하지 않은 모든 세션 범위의 객체는 상태 자체를 유지하지 않았거나 상태를 공유하지 않는로드 균형 조정 된 서버에서 실행 중이었습니다. – sma

+0

객체는 Serializable을 구현하지 않는 한 유지 관리하는 상태에 관계없이 직렬화에 실패합니다. 따라서 질문을 올바르게 이해하면 직렬화를 구현하지 않은 세션에 삽입 된 객체는 모두 사실 컨테이너에 의해 직렬화되지 않았으므로 문제가 발생하지 않았습니다. – Yishai

10

와이어를 통해 전송하려면 와이어에 놓을 수있는 형태로 직렬화 할 수 있어야합니다. 이진, 또는 XML, JSON, 또는

여기에 더 많은 정보가있다 simillar처럼

... Should any domain object, not be serializable?

+0

전선을 통해 XML 또는 JSON marhsalling 비 정렬을 사용하려면 Serializeble을 구현해야한다고 생각하지 않습니다. 바이너리 형식 (예 : RMI)이 필요합니다. 하지만이 DTO는 HTTP 세션의 일부이므로 서블릿 사양에 따라 직렬화 할 수 있어야하기 때문에 주된 이유가 있다고 생각합니다. – HDave

1

나는 그 개념이 질문받는 것과 비슷하다고 생각한다. 소화를 위해 삼키기 전에 왜 고체 음식을 씹어야 만 하는가? 물론 차이점은 소화 된 좋은 것은 어차피 비 직렬화 될 수 없다는 것입니다.

내가 컴퓨터 플랫폼/시스템은 각각의 형태로 데이터를 표현하기 때문에 XDR 인코딩 을 수행한다 (현재 ONC RPC라고도 함) 일 RPC를 사용하여 기억한다. 예를 들어, 빅 엔디안 대 스몰 엔디안.

하지만 JVM은 기계와 상관없이 빅 엔디안이므로 인디언스가 이유가되어서는 안됩니다.

컴퓨터 메모리의 데이터 구조에는 포인터가 있고 개체의 모든 요소가 인접한 메모리 블록에 있지 않을 수 있습니다. 그러나 다른 시스템에 객체를 전달할 때 해당 객체의 메모리 분포를 전달할 수 없습니다.

동적으로 변경되는 시스템 메모리 배열을 복제 할 필요가 없기 때문에 객체를 데이터베이스에 저장하기 전에 직렬화해야합니다.

네트워크의 데이터 표현 계층은 모두 비트 스트림 기반입니다. 따라서 한 시스템에서 다른 시스템으로 데이터를 전달하려면 메모리에 표시된 차원 데이터를 바이트 단위로 네트워크를 통해 스트리밍 할 수있는 데이터로 변환해야합니다. 실제로, 조금씩, 그리고 종종 압축 및 보안 암호화가 진행됩니다. 압축 및 암호화 루틴은 oo-structure-blind이며 비트 스트림이 가정됩니다. 네트워크 스위치는 oo-structure-blind입니다. 네트워크 전송은 비트조차 보이지 않습니다. 이 비트는 종종 아날로그 사인파이며 변조 된 전송 신호로 인코딩됩니다. 이러한 프로세스는 oo-structured 데이터의 다차원/계층 구조 스키마에서 작동하지 않습니다.

난 당신이 객체 수준의 난독 화 및 암호화를 수행 할 수있을 것 같아요,하지만 당신은 여전히 ​​시스템을 비트 스트림으로 변환하고, 먼저 char 스트림으로 변환해야합니다.

마샬링은 양치기에 양떼가 있고 문제가 된 물 위에서 양떼 다리를 마샬링하는 것입니다.따라서 마셜 러는 객체를 직렬 스키마로 작성해야하며, 정보 양이 다리의 다른 쪽에서 나올 때 우리는 이것을 접합체 - 디마샬러에 의해 다시 계층 적 스키마로 재구성 할 수 있습니다 . 우리의 경우에는 양이 교량만으로 마샬링 된 것이 아니라 폭이 좁고 불안정한 권선과 산사태가 발생합니다. 각 턴에 네트워크 전송 장비에 마샬링 양의 사본이 저장되어있어 양의 사본을 다시 보낼 수 있는지 확인하십시오. 양은 협곡으로 빠져 나갔다.

+1

* 소화 된 좋은 것은 어차피 직렬화 될 수 없습니다. * 처음 음식이 무엇인지에 달려 있습니다. 내 개가이 작업을 수행 할 수 있습니다 :)> –

+1

내 개가 연재 음식을 너무 먹습니다. ugghh. 개가 때때로 연재 음식을 먹는 이유에 대한 이론이 있습니다. 추론은 장의 길이가 짧아서 개가 자신의 연재 식품을 먹을 때 소화관을 두 배나 길게 만든다. 말과 같은 다른 포유 동물에 의해 연재 된 음식을 먹을 때 말이나 소처럼 잔디 섬유를 효과적으로 처리 할 수 ​​없기 때문에 말의 소화 시스템을 빌리고 있습니다. –

관련 문제