2014-06-23 4 views
1

클래스의 새 버전을 정의해야하는 단계에 도달했습니다. 새로운 클래스 정의를 사용하면 일부 메소드가 추가되고 일부 데이터 멤버 유형은 변경되었습니다. 내 질문은 내 서버가 변경되지 않도록하면서 이전 클라이언트를 계속 제공하려면 어떻게해야합니까? 나의 새로운 클래스와클래스의 최신 버전이있는 ClassCastException

예외

java.io.InvalidClassException: com.mcruiseon.carpool.concrete.SubscribeJourneyConcrete; incompatible types for field isJourneyActive 

, 아니 isJourneyActive이 없습니다.

내가 여기에 기본적인 것을 놓치고 있다는 것을 알고 있는데, serialVersionUID을 확인하는 것과 관련이 있습니다.

+1

serialVersionUID가 도움이되지 않습니다. 오래된 고객을 해치지 않기 위해 변경을해야합니다. 또는 클라이언트 입력에 따라 서버 jar의 다른 버전을 동적으로로드 할 수 있다고 생각하십니까? –

+0

오 하나님, 다른 서버. 나는 serialuid를 유지하는 것이 왜 도움이되지 않을까? – Siddharth

+0

일반적으로 serialuid는 직렬화입니다. –

답변

0

한 가지 방법은 메소드가 더 이상 존재하지 않을 때마다 사용 중지하는 것입니다.

방법에 대한 한 가지 방법은 메소드가 사용되지 않는 중간 버전입니다.

그래서 버전 1 방법에 isJourneyActive는 방법 isJourneyActive 여전히 사용되는 버전 2에 를 사용하고 있지만, 당신은 당신이 버전 3 방법에 isJourneyActive 사용되지 않는 귀하의 클라이언트가 대신 메소드 setJourneyActive를 사용하여 시작하려는 isJourneyActive 더 이상 존재하지 않거나 존재하지만 사용자가 사용하려고하면 예외를 throw하는 것입니다.

다른 방법이 있지만 더 이상 사용하지 않는 방법보다 복잡합니다.