【问题标题】:UnmarshalException InvalidClassException org.eclipse.persistence.internal.helper.DatabaseTableUnmarshalException InvalidClassException org.eclipse.persistence.internal.helper.DatabaseTable
【发布时间】:2014-12-19 20:37:06
【问题描述】:

我正在使用 jpa 2 (EclipseLink)、ejb 3 和 PrimeFaces 开发一个应用程序,该应用程序分为 jar (和 jpa ejb) 和一个战争,在尝试部署时我收到此错误:

Exception is: java.rmi.UnmarshalException: Incoming message header or abbreviation processing   failed; nested exception is: java.io.InvalidClassException:    org.eclipse.persistence.internal.helper.DatabaseTable; Local class incompatible: stream serialVersionUID   = 7408378167056177847 classdesc, the local class serialVersionUID = -8,219,935,847,209,476,671 at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException (RemoteBusinessIntfProxy.java:121) at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke (Remote 

我很清楚这是 SERIAL 错误 ID 的一个版本,但我该如何修复它?使用 Eclipse 作为 ID。

感谢您的帮助!!

【问题讨论】:

    标签: jpa ejb-3.0


    【解决方案1】:

    您可以尝试指示 WebLogic Server 首选您的捆绑 jar 而不是它自己的。这可以在weblogic.xml 部署描述符中完成,看起来像这样

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
         <container-descriptor>
            <prefer-web-inf-classes>true</prefer-web-inf-classes>
         </container-descriptor>
    </weblogic-web-app>
    

    再想一想,持久化 API 是 ejb jar 依赖项,并且此设置仅适用于 war 模块。所以你可以试试weblogic-application.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application” 
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance 
    xsi:schemaLocation=”http://xmlns.oracle.com/weblogic/weblogic-application 
    http://xmlns.oracle.com/weblogic/weblogic-application/1.0/weblogic-application.xsd">
       <prefer-application-packages>
          <package-name>org.eclipse.persistence.internal.helper.*</package-name>        
       </prefer-application-packages>
    </weblogic-application>
    

    【讨论】:

    • 你好 Predrag 让我证明一下,我会通知你.. 谢谢 4 你的回答!!
    • 我试过 org.eclipse.persistence.internal.helper.*-name> 进入 weblogic.xml 因为这是一场战争.. 但两者都不起作用:(
    • 我也试过了:ServiciosGeneralesWebfalse:prefer-web-inf-classes> org.eclipse.persistence.internal.helper.*application-packages> 但它不工作:(
    • 在部署之前尝试从ear 中删除eclipselink.jar,看看是否有任何不同。
    • 你好,我也试过了..但它不起作用,即使我将项目重建为另一个 Eclipse 也没有成功,现在我正在尝试通过 weblogic 10.3.6 安装应用程序......我会 c发生了什么......这个错误在 weblogic 10.3.5 中得到了它
    【解决方案2】:

    我以前没有见过这种类型的错误,但我的第一个想法是你有多个版本的类似 jar。具体来说,它看起来像 org.eclipse.persistence -> javax.persistence。它可能是用一个 jar/class 序列化并用另一个 jar/class 反序列化的。

    通常在与 J2EE 容器和多个 jar 相关的错误中,一个 jar/版本存在于应用程序容器中,如 weblogic,(可能在认可的目录中),另一个与应用程序捆绑在一起。

    如果是这种情况,解决方案是不将持久性 jar 包含在您的应用程序中并委托给容器。如果您使用的是 maven/gradle,请将工件标记为 provided

    【讨论】:

    • 嗨,John,感谢您的回复,我的项目分为一个包含 JPA 模型的 EJB 和一个包含 Web 部件的 WAR,因为在我的工作中是服务器架构(两个域逻辑和 Web )。我有一个 build.xml 构建我的 EJB,它编译项目中的类,包括 JPA,在重建后将本地和远程接口复制到 Web 项目(如果我不这样做,它可能无法识别 Web 上的调用) .我第一次建项目没有问题其实我一直在开发,但是当我做出改变的时候是他开始标记这个的时候。
    • 我试图编译该项目与 weblogic 中存在的 jar 完全相同,但没有成功。我还尝试过移动接口和类 EJB 模型并将它们(即时)放到 WAR 中,但都不起作用。谢谢你的帮助。问候。
    • @Mariah serialVersionUID 是静态设置的还是自动生成的?
    • 在我的模型中,所有 JPA 类(实体)都有: private static final long serialVersionUID = 1L;这是日食说的...
    【解决方案3】:

    您好,问题解决了,想和大家分享一下,我花了一周的时间才找到答案。我使用 weblogic 10.3.5 进行开发,即使我使用 bea / modules 中的相同 jar EclipseLink 和 javax.persistence 来编译我的项目,它也无法正常工作。我卸载了服务器并再次安装,认为这可能是服务器的问题,但总是得到相同的结果。我还尝试将罐子嵌入应用程序中,但都没有奏效。我将我的 weblogic 服务器迁移到 10.3.6 版本,这就是答案,我的应用程序工作正常,因为它最初不知道为什么会出现这个问题,但它是应用程序服务器的修复版本。非常感谢所有回复的人。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 2011-07-03
      • 2013-01-21
      • 2013-12-09
      • 2012-11-15
      • 2013-05-26
      • 2015-03-20
      • 2017-09-15
      相关资源
      最近更新 更多