2010-06-02 6 views
0

문제없이 로컬 WebLogic 인스턴스 (v10.3.0.0)에서 배포 및 테스트 할 수있는 간단한 EJB 응용 프로그램이 있습니다. 이걸 원격 WL 서버 (v10.3.3.0)에 배포하고 로컬 컴퓨터에서 테스트해야합니다. 배포에 성공,하지만 난 JDeveloper의에서 클라이언트 중 하나를 실행하려고하면이 오류 얻을 :이 오류를 받고 있어요 왜ValidationException 클래스 버전이 일치하지 않습니다.

<2010.06.02. 16:08:36 CEST> <Error> <RJVM> <BEA-000503> <Incoming message header or abbreviation processing failed 
java.io.InvalidClassException: org.eclipse.persistence.exceptions.ValidationException; local class incompatible: stream classdesc serialVersionUID = 3793659634176227230, local class serialVersionUID = -7605463488982202416 
java.io.InvalidClassException: org.eclipse.persistence.exceptions.ValidationException; local class incompatible: stream classdesc serialVersionUID = 3793659634176227230, local class serialVersionUID = -7605463488982202416 
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1316) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at weblogic.rjvm.ClassTableEntry.readExternal(ClassTableEntry.java:36) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at weblogic.rjvm.InboundMsgAbbrev.readObject(InboundMsgAbbrev.java:65) 
    at weblogic.rjvm.InboundMsgAbbrev.read(InboundMsgAbbrev.java:37) 
    at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(MsgAbbrevJVMConnection.java:227) 
    at weblogic.rjvm.MsgAbbrevInputStream.init(MsgAbbrevInputStream.java:173) 
    at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:439) 
    at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:322) 
    at weblogic.socket.AbstractMuxableSocket.dispatch(AbstractMuxableSocket.java:394) 
    at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:917) 
    at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:849) 
    at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:283) 
    at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29) 
    at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21) 
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145) 
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117) 

사람이 설명 할 수, 그리고 내가 할 수있는 일을 해결하기 위해?

답변

0

두 가지 버전의 JAR 파일이 있습니다. 두 가지 다른 JAR 파일이 있습니다. Java EE는 종종 클래스 로더 계층 구조를 사용하기 때문에 하나의 코드가 한 클래스 로더에서 클래스를로드하고 다른 코드가 다른 클래스 로더에서 코드를로드 할 수 있습니다. 같은 2 개의 클래스의 인스턴스 (같은 이름)는, 같은 serialVersionId를 가지더라도, 동등한 것으로 간주되지 않습니다.

다른 클래스에서 인스턴스화 된 ValidationException의 두 인스턴스가 다른 클래스 로더 (아마 다른 JAR)에서로드됩니다. JDeveloper에는 아마도 WebLogic 버전과 충돌하는 자체 버전이 포함되어있을 것입니다. 앱에 Eclipse 검증 병을 포함하고 있습니까?

+0

Java EE로 작업 한 것은 처음이기는하지만, 잘 모르겠습니다. 이 응용 프로그램은 단 하나의 .jar 파일로 압축 된 두 개의 엔티티/DTO 클래스, 세 개의 상태 비 저장 세션빈 및 각 bean의 테스트 클라이언트로 구성됩니다. 유일한 가져 오기는 JDev 및 java.util.List에 의해 생성 된 수입입니다. – suszterpatt

+0

JDeveloper에서 클라이언트를 실행하면 'validationexception'이라는 또 다른 정의가 생겨서 앱이 WebLogic로 전송합니다. 이 클래스가 들어있는 항아리를 찾으십시오. 클라이언트와 서버 병이 동일한 버전인지 확인해야합니다. –

관련 문제