2010-06-02 126 views
0

我有一個簡單的EJB應用程序,我可以在本地WebLogic實例(v10.3.0.0)上進行部署和測試而不會出現任何問題。我需要將它部署在遠程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:s。由於Java EE經常使用類加載器層次結構,因此可能會發生一段代碼從一個類加載器加載類,而另一段代碼從另一個類加載器加載它。這兩個類(具有相同名稱)的實例並不相同,即使它們具有相同的serialVersionId。

您所看到的是兩種不同的ValidationException實例,從不同的類實例化,從不同的類加載器(可能來自不同的JAR)加載。 JDeveloper可能包含自己的版本,與WebLogic版本衝突。你在你的應用程序中包含日食驗證罐嗎?

+0

不是我所知道的,雖然這是我第一次使用java EE。該應用程序僅包含一對實體/ DTO類,3個無狀態會話bean和每個bean的測試客戶端,全部打包在一個.jar文件中。唯一的導入是由JDev和java.util.List生成的導入。 – suszterpatt 2010-06-02 20:20:34

+0

當您從JDeveloper運行客戶端時,您可能會有另一個'validationexception'的定義,然後您的應用程序將其發送到WebLogic。試着找到包含這個類的jar。您必須確保客戶端和服務器罐的版本相同。 – 2010-06-03 07:25:20