2010-06-02 150 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