【问题标题】:Deploying Hibernate app to Wildfly 10 - org.dom4j.DocumentFactory ClassCastException将 Hibernate 应用程序部署到 Wildfly 10 - org.dom4j.DocumentFactory ClassCastException
【发布时间】:2016-12-07 18:04:08
【问题描述】:

更新:在销毁 WildFly 实例并从头开始重新配置后,错误已神秘地自行解决为重复列的 org.hibernate.MappingException。现在我确实知道问题出在哪里了,我可以着手解决它了。


我目前正在评估 WildFly 10 中由 Hibernate 支持的 JPA。但是,在尝试部署我的测试战(由 gradle 构建)时,会产生一个看似无关的错误。以下是控制台日志中的行:

11:11:06,200 错误 [org.jboss.as.controller.management-operation](管理任务 8)WFLYCTL0013:操作(“添加”)失败 - 地址:([(“部署”=>“TestWar .war")]) - 失败描述:{"WFLYCTL0080: 失败的服务" => {"jboss.persistenceunit.\"TestWar.war#com.myapp.testwar.jpa\"" => "org.jboss.msc. service.StartException in service jboss.persistenceunit.\"TestWar.war#com.myapp.testwar.jpa\": java.lang.ClassCastException: org.dom4j.DocumentFactory 不能转换为 org.dom4j.DocumentFactory

原因:java.lang.ClassCastException: org.dom4j.DocumentFactory 不能转换为 org.dom4j.DocumentFactory"}}

来自我的build.gradle

group 'com.myapp'
name 'TestWar'
version '0.0.0-dev'

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    provided
}

sourceSets {
    main {
        compileClasspath += configurations.provided
    }
}

dependencies {
    provided group: 'dom4j', name: 'dom4j', version: '1.6.1'
    provided group: 'javax.enterprise', name: 'cdi-api', version: '1.2'
    provided group: 'javax.inject', name: 'javax.inject', version: '1'
    provided group: 'org.hibernate', name: 'hibernate-core', version: '5.0.7.Final'
    provided group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.0.7.Final'
    provided group: 'org.hibernate', name: 'hibernate-envers', version: '5.0.7.Final'
    provided group: 'org.hibernate', name: 'hibernate-java8', version: '5.0.7.Final'
    provided group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.1-api', version: '1.0.0.Final'
    provided group: 'org.jboss.spec.javax.annotation', name: 'jboss-annotations-api_1.2_spec', version: '1.0.0.Final'
    provided group: 'org.jboss.spec.javax.ejb', name: 'jboss-ejb-api_3.2_spec', version: '1.0.0.Final'
    provided group: 'org.jboss.spec.javax.sql', name: 'jboss-javax-sql-api_7.0_spec', version: '2.0.0.Final'
    provided group: 'org.jboss.spec.javax.ws.rs', name: 'jboss-jaxrs-api_2.0_spec', version: '1.0.0.Final'
    provided group: 'org.postgresql', name: 'postgresql', version: '9.4.1209'
}

我在 SO 上的类似帖子中尝试了以下解决方案:

以及来自其他来源的这些:

 

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <dependencies>
      <module name="org.dom4j"/>
    </dependencies>
    <local-last value="true"/>
  </deployment>
</jboss-deployment-structure>

有没有人有任何进一步的建议,或者我做了什么非常愚蠢的事情?


编辑:显然这个错误可能是由任何数据源配置问题引起的(见here)。作为参考,通过管理控制台对我的数据源的连接测试是成功的,据我所知,连接详细信息都是正确的。

【问题讨论】:

  • 你的类加载器有问题
  • @Jens 我自己没有做任何类加载,尽管我知道 WildFly 正在部署期间。您能否详细说明问题的根源?
  • jboss 有不止一个类加载器。所以看起来你在不同的类加载器上有多次 dom4j jar
  • @Jens 好的,但是第二个实例来自哪里?这是 WildFly 的一个新实例。我采取的唯一措施是将 PostgreSQL JDBC 驱动程序安装为已部署的 jar;配置我的数据源,并尝试部署我的测试战。 WildFly 会附带同一个库的多个实例似乎不太正确
  • 我不知道。理解类加载非常复杂

标签: hibernate jpa jakarta-ee gradle wildfly


【解决方案1】:

发生此错误(目前)是因为您将 EntityManager 包含在您的依赖项列表中。删除它。您不需要它来进行正常操作。

在这个问题上查看这个 Hibernate Jira:org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory

【讨论】:

  • 由于错误现在已经自行解决,我现在无法对此进行测试。如果它回来,我会试一试。但是,当所有依赖项都被列为已提供时,为什么这会有所不同呢?它们都没有真正复制到战争中
  • EntityManger jar 中有旧的 org.dom4j jar,因此即使您可能从 wildfly 获取它,它仍然无法加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2016-07-13
  • 1970-01-01
  • 2020-09-11
  • 2014-05-23
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多