我想将hibernate 4.3用于JBoss 7.1中的多租户功能。
我设法通过在jboss-deployment-structure
中添加以下行来将它包含在我的战争中<exclusions>
<module name="org.hibernate" />
</exclusions>
并在我的pom.xml中添加对hibernate核心和实体管理器的依赖
这使得hibernate 4.3加载但不幸的是我收到了错误
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
这是由于在hibernate 4.3使用JPA 2.1时加载了JPA 2.0
我已经看过这些帖子,并尝试了他们的建议 Excluding JPA Subsystem from JBoss EAP 6.1 - Trying to use JPA 2.1 in JBoss EAP 6.1,JBoss AS7 Automatically Loading JPA,Hibernate 4.3.0.Final & Spring Data JPA 1.4.3.RELEASE。
我添加了一个带
的persistence.xml<property name="jboss.as.jpa.managed" value="false" />
从Spring Data中排除了hibernate jpa 2.0
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
从JBoss standalone.xml中完全删除了JPA子系统,没有任何成功。
唯一能做到这一点的是在jboss-deployment-structure中排除整个javaee.api,如另一个线程所示
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
但这会给我的其余代码带来很多问题。
更新:我的jboss-deployment-structure.xml现在就像这样
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" />
<module name="javax.persistence.api" />
<module name="org.hibernate" />
</exclusions>
<dependencies>
<module name="org.jboss.ironjacamar.jdbcadapters" />
<module name="org.hornetq" />
<module name="org.hornetq.ra" />
<module name="org.jboss.ejb3" />
<module name="org.jboss.ejb-client" />
</dependencies>
</deployment>
</jboss-deployment-structure>
如你所见,我已经尝试了很多没有运气的事情,所以如果有人有另一个想法,那就非常受欢迎了。
答案 0 :(得分:8)
我会把这个问题分成两个小的:
1)确保您不能过渡,具体取决于JPA 2.0
为此,您可以使用依赖图可视化工具(NetBeans内置了一个,或者您可以使用maven依赖树插件)。 另一种方法是在部署到JBoss之前浏览包含在工件中的库。
2)确保正确配置JBoss AS 7.1
JBoss AS 7.1与Hibernate 4.0.x jar捆绑在一起,为了更新它们,请按照official doc中的说明尝试这些步骤。
更新当前as7/modules/org/hibernate/main
文件夹以包含较新版本
删除as7/modules/org/hibernate/main
和as7/modules/org/hibernate/envers/main
文件夹中的* .index文件
备份as7/modules/org/hibernate
的当前内容,以防您犯错误
删除较旧的jar并将新的Hibernate jar复制到as7/modules/org/hibernate/main
+ as7/modules/org/hibernate/envers/main
更新as7/modules/org/hibernate/main/module.xml
+ as7/modules/org/hibernate/envers/main/module.xml
以命名您在
更新的as7/modules/org/hibernate/main/module.xml
将会是这样的(请注意,依赖关系不会发生变化):
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.hibernate">
<resources>
<resource-root path="hibernate-core-4.3.5.Final.jar"/>
<resource-root path="hibernate-commons-annotations-4.0.4.Final.jar"/>
<resource-root path="hibernate-entitymanager-4.3.5.Final.jar"/>
<resource-root path="hibernate-infinispan-4.3.5.Final.jar"/>
</resources>
<dependencies>
.
.
</dependencies>
</module>
答案 1 :(得分:3)
尝试仅删除javax.persistence.api
模块以及org.hibernate
。
此外,如果要为所有Web应用程序(应该向后兼容)切换到Hibernate 4.3,请按照here所述切换到较新版本的Hibernate。
一些调试技巧:生成JAR文件后,明确检查它们包含的JPA / Hibernate库(通过解压缩)。另外,为了检查Hibernate版本,你可以like it is here described。
同时检查jboss-deployment-structure file的结构,因为似乎<exclusions>
元素既不在<deployment>
中,也不在<sub-deployment>
元素中。
答案 2 :(得分:0)
对我们来说,以下帮助(仅适用于非容器管理的JPA方案!):
IDE端:(Eclipse Kepler)删除(在测试期间添加并忘记删除)(本地安装) JBoss 7.1.1.Final Library < / em>项目构建路径依赖
Maven-side:(mvn 3.0.4和3.3.3)取消评估以下 hibernate JPA 2.0包括 /pom.xml
(<{1}},/pom.xml
,ear/pom.xml
的耳朵项目中的 部分 }和ejb/pom.xml
:
web/pom.xml
Maven-side: 仅添加 hibernate-entitymanager 4.3.8.Final 和我们的db驱动程序(postgres)作为DB / ORM相关我们的 <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
...
<dependencyManagement>
<dependencies>
...
<!-- outcommented because of JPA 2.1 support -->
<!--
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
<version>${version.jboss.bom}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
-->
</dependencies>
</dependencyManagement>
...
/ejb/pom.xml
服务器端: 在全局JBoss 7.1.1.Final中禁用JPA 2.0 (对于所有webapps / libs,如果您有多个)设置<强> <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
强>
<module name="javax.persistence.api" export="false"/>
中的提示:
jboss-as/modules/javaee/api/main/module.xml
可移植解决方案无法与JBoss 7.1.1.Final 一起使用,因为 JBoss 7.1.2中添加了/ear/src/main/application/META-INF/jboss-deployment-structure.xml
功能< / em>稍后,请参阅