我们在JBoss EAP中部署了一个webapp7.2.1.GA包括hibernate JPA。
我们得到了一个例外:
Caused by: java.lang.ClassCastException: org.hibernate.jpa.HibernatePersistenceProvider cannot be cast to javax.persistence.spi.PersistenceProvider
由于JBosshibernate-core-5.3.9.Final-redhat-00002.jar中包含的jar与webapp中包含的jarorg.hibernate.jpa.HibernatePersistenceProvider冲突org.hibernate.hibernate-entityManager: 5.1.10。
由于 JBoss 类加载策略,在 JBoss 类路径中定义的 jar 优先于在我们的 Web 应用程序中打包的 jar,因此这是 JBoss 的预期行为。
但是,我们需要配置类加载策略,以便在我们的应用程序中配置的 jar 优先于应用程序服务器中的 jar,或者,也许,在应用程序服务器中排除该应用程序。
我们试图在部署和子部署战争级别配置jboss-部署-结构.xml,以便排除这种依赖性,运气不好。我们尝试了不同的排除项组合,包括排除每个模块和子系统,但Hibernate核心-5.3.9.final-redhat-00002.jar总是被加载,我们总是得到 ClassCastException。
在文档中,我们发现:
本机Hibernate使用。直接使用Hibernate API的应用程序在这里被称为本地Hibernate应用程序。本地Hibernate应用程序可以选择使用JBoss中包含的Hibernate jar,也可以打包自己的Hibernate jar副本。利用JPA的应用程序会自动将JBoss AS Hibernate注入到应用程序部署类路径中。这意味着JPA应用程序应该使用JBoss中包含的Hibernate jars作为。
但尚不清楚这是否意味着无法排除JPA依赖项,尽管排除JPA子系统是可能的。
所以,问题:
> < li>
这是否意味着排除JPA子系统对JPA应用程序不起作用?
有没有可能通过在webapp中配置jboss-deployment-structure.xml文件来排除这个hibernate-core-5 . 3 . 9 . final-red hat-00002 . jar?
JBoss EAP 7.2.1.GA中是否可以恢复默认优先级策略,使WEB-INF/lib上的jar优先于appserver中的jar?
更新1:关于排除,我们尝试在jboss-deployment-structure.xml中排除:
>
所有子系统: ejb3, infinispan, jaxrs, jca, jdr, jpa, jsf, jmx, jaxrs, 远程处理, resteasy, Security-manager, security, security, Web serviceices, weld
所有模块: javax.persistence.api, org.hibernate, org.jboss.as.jpa, javax.ejb.api, org.apache.commons.log, org.slf4j.ext, org.slf4j.ext, org.slf4j.impl, org.apache.log4j, org.jboss.as.jaxrs, org.jboss.as.jaxrs, org.jboss.resteass.resteasy.resteasy-atom-provider, org.jboss.resteasy-atom-provider, org.jboss.resteasy.resteasy-jackson- provider, org.jboss.resteasy.resteasy-jackson- provider,org.jboss.resteasy.resteasy-jsapi, org.jboss.resteasy-multipart-provider, org.jboss.resteasy-crypto, org.jboss.resteasy.jose-jwt, org.jboss.resteasy.resteasy-jettison-provider, org.jboss.resteasy.resteasy-yaml-provider, org.jboss.resteasy.skeleton-key, javaee.api, javax.activation.api, javax.epis.api, javax.el.api, javax.el.api, javax.enterprise.api, javax.inject.api, javax.拦截器.api, javax.jms.api, javax.jws.api, javax.mail.api,javax.management.j2ee.api, javax.resource.api, javax.rmi.api, javax.security.auth.message.api, javax.security.jacc.api, javax.validation.api, javax.validation.api, javax.xml.bind.api, javax.xml.soap.api, javax.xml.ws.api, javax.api
对于两者,部署和子部署
即使同时应用了所有这些排除,JBoss jar被注入到webapp中,所以我们仍然得到ClassCastException。
根据官方文档中的这条评论,我对这是否像“按设计”那样工作感到困惑:使用JPA的应用程序将自动将JBoss AS Hibernate注入到应用程序部署类路径中。这意味着JPA应用程序应该使用JBoss AS中包含的Hibernate jar。或者,否则,它可以被排除,但我们缺少一些东西,或者,可能是一个bug。
更新2。我们测试了所有这些应用程序端配置选项,没有一个单独或组合起来能够阻止JBoss hibernate jar被加载:
在jboss-deployment-structure.xml中:
在persistence.xml中:
在maven中有几种组合和排除
在测试了上面无数的设置组合之后,我们发现pom中有一个虚假声明,使得Manifest Dependencies变量包含
Dependencies: org.infinispan,org.hibernate
通过删除这个遗留声明,事情恢复了正常。
最终的组合工作是:
通过此配置,我们能够排除内置的HibernateHibernate核心 5.3.9.final-redhat-00002.jar 和 JPA 2.2,并使用我们耳朵中包含的 org.hibernate.Hibernate-实体管理器:5.1.10 jar 和 JPA 2.1。
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
<module name="javax.persistence.api"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
来源:https://access.redhat.com/solutions/3332401
问题内容: Hibernate 3.5-Final 终于面世了,它提供了备受期待的JPA2支持以及其他功能。我正在使用JBoss 5.1.0.GA和Hibernate 3.3进行项目(基于EJB3),但是我想利用JPA2并尝试升级到Hibernate 3.5。 我所做的工作非常简单和标准-我只是将所有的hibernate3.5 jar放在server / configuration(默认,全部等)
问题内容: 有人可以提供在SUSE和RedHat上安装python版本2.7所需的步骤吗?那里的版本大约是2.4,为了使我的脚本正常工作,我至少需要2.6。因此,安装后,我可以在xTerm中键入Python并获取Python 2.7命令行界面。 问题答案: 下载源和安装说明: https://www.python.org/download/ 注意:您应该检查python 2.7.x的最新版本,因为
我有一个gradle项目,它有以下依赖关系: 并具有以下应用Spring Boot插件的功能: 我遇到的问题是,当我包含Spring Boot插件时,一个旧版本的hibernate内核似乎正在导入到我的项目中(5.0.12.Final)。但我的代码使用的是5.2.12。最终的hibernate核心库。 我不能确切地理解为什么hibernate核心库附带Spring引导插件,因为我看不到它在mave
问题内容: 关于谷歌搜索,可以找到很多东西,但是我还没有找到解决这个问题的可行方法。 基本上,我想按需加载的特定类上有一个很大的CLOB。天真的方法是: 但是,这不起作用,显然是由于我使用的是oracle驱动程序,即Lob对象没有被视为简单的句柄,而是始终被加载。如此一来,我就被我的尝试所吸引。有一种解决方案使用特殊的工具来进行惰性属性加载,但是由于Hibernate文档似乎表明他们对使它正常工作
未将hibernate-cfg.xml添加到war classes文件夹中。我使用以下脚本将web applcation部署到tomcat。复制后,当我启动tomcat时,错误enotFoundException下面的gettign:类路径资源[hibernate.cfg.xml]无法解析URL,因为它不存在
我无法在hibernate中急切地加载多态相关对象。我知道默认的FetchType渴望@Any,但我不能急于加载字段。下面是一段代码片段: 当我从hibernate通过id获取它时,会出现延迟初始化异常。我不明白为什么会这样。谁能帮忙吗?