2012-09-04 2 views
4

XStream을 객체 직렬화를위한 응용 프로그램의 일부로 사용하고 있습니다. 사용 사례 중 하나에 대해 Externalizable 인터페이스를 구현하는 객체 중 일부를 직렬화해야합니다. 내 유스 케이스 들어, 네이티브 자바 직렬화를 사용하여 그들을 직렬화하고 싶습니다.XStream에서 Externalizable 클래스에 기본 Java 직렬화 사용

인터넷에서이 문제를 해결하는 데 도움이되는 http://old.nabble.com/How-to-remove-Externalizable-Converter-td22747484.html 링크를 발견했으며 Externalizable 개체에 Reflection Converter를 사용하기 시작했습니다.

응용 프로그램을 테스트 할 때 매우 동시 액세스 중에 응용 프로그램이 변환기 코드에 많은 시간 (10 초)을 보내고 있음을 알게되었습니다. 문제가 buildMap 메서드 FieldDictionary에 있음을 알 수 있습니다.

원래 문제를 해결할 더 좋은 방법이 있는지 궁금합니다. 동시성이 높은 환경에서 Reflection Converter의 성능이 좋지 않습니까?

환경에 대한 추가 컨텍스트를 제공합니다. 그것은 웹 응용 프로그램이며 요청 처리 중에 직렬화가 일어나고 응용 프로그램이 100 개의 동시 스레드를 가질 수 있습니다.

정말 도움이되었거나 문의 해 주셔서 감사합니다.

+1

XStream 팀에서 코드를 수정했습니다. 캐시 된 요소를 동기화 블록 밖으로 가져 오기 위해 일부 코드를 이동하는 것이 수정되었습니다. [JIRA 케이스] (https://jira.codehaus.org/browse/XSTR-705) – SKP

답변

0

이것은 기술적으로 답이 아닙니다.하지만 어쨌든 도움이 되었기를 바랍니다.

생물 분자 연구 모델링에 사용 된 Java Swing 기반 데스크톱 응용 프로그램을 만드는 동안 성능상의 이유로 매우 복잡하고 상호 연결된 개체 그래프를 디스크에 직렬화했습니다.

외부화 및 일련 화 관련 문제를 해결 한 후에도 Java 직렬화는 객체 구조/이름 등에 매우 민감하기 때문에 전체 접근법을 포기하고 새로 시작해야했습니다. 이는 모델의 무의미한 리팩토링이 사용자가 오래된 직렬화 된 모델을로드하려고 시도했을 때 프로덕션에서 주요 충돌이 발생합니다.

결국 데이터 저장소 친숙한 개체 구조 (그래프의 다른 노드에 대한 강력한 상호 참조 없음)를 만들어이 구조를 serialize합니다. 이는 원본 그래프를 직렬화 및 비 직렬화하는 것보다 훨씬 간단하고 오류가 발생하기 쉽고 훨씬 빠릅니다. 이는 또한 Adapters (Domain 객체를 DataStore 객체로 변환 한 구성 요소)가 올바르게 업데이트 된 상태로 유지되는 한 도메인 그래프 객체를 자유롭게 리팩터링하거나 수정할 수 있음을 의미합니다.