2010-06-02 3 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: с. Поскольку Java EE часто использует иерархии загрузчика классов, может случиться, что один кусок кода загружает класс из одного загрузчика классов, а другой кусок кода загружает его из другого загрузчика классов. Экземпляры этих двух классов (с тем же именем) не считаются равными, даже если у них будет такой же serialVersionId.

Что вы видите, это два разных экземпляра исключения ValidationException, созданных из разных классов, загружаемых из разных загрузчиков классов (возможно, из разных JAR). JDeveloper, вероятно, включает в себя собственную версию, которая сталкивается с WebLogic. Вы включаете банки проверки правильности затмения в своем приложении?

+0

Не знаю, что я знаю, хотя это мой первый опыт работы с java EE. Приложение состоит только из двух сущностей/классов DTO, 3 сессионных компонентов без состояния и тестового клиента для каждого компонента, все они упакованы в один файл .jar. Единственный импорт - это файлы, созданные JDev и java.util.List. – suszterpatt

+0

Когда вы запускаете своих клиентов из JDeveloper, у вас, вероятно, есть другое определение «validationexception», которое ваше приложение затем отправляет в WebLogic. Попробуйте найти банку, которая содержит этот класс. Вы должны убедиться, что банки клиента и сервера имеют одинаковую версию. –

Смежные вопросы