and*_*adi 30 hibernate jpa-2.0 jboss7.x jpa-2.1
我想在hossnate 4.3中使用JBoss 7.1中的多租户功能.
我设法通过在jboss-deployment-structure中添加以下行来将它包含在我的战争中
<exclusions>
<module name="org.hibernate" />
</exclusions>
Run Code Online (Sandbox Code Playgroud)
并在我的pom.xml中为hibernate核心和实体管理器添加依赖项
这使得hibernate 4.3加载但不幸的是我收到了一个错误
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Run Code Online (Sandbox Code Playgroud)
这是由于在hibernate 4.3使用JPA 2.1时加载了JPA 2.0
我已经看过这些线程并尝试了他们的建议 从JBoss EAP 6.1中排除JPA子系统 - 尝试在JBoss EAP 6.1中使用JPA 2.1,JBoss AS7自动加载JPA,Hibernate 4.3.0.Final和Spring Data JPA 1.4.3.RELEASE.
我添加了一个persistence.xml
<property name="jboss.as.jpa.managed" value="false" />
Run Code Online (Sandbox Code Playgroud)
从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>
Run Code Online (Sandbox Code Playgroud)
从JBoss standalone.xml中完全删除了JPA子系统,没有任何成功.
唯一能做到这一点的是在jboss-deployment-structure中排除整个javaee.api,如另一个线程所示
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
但这会给我的其余代码带来许多问题.
更新:我的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>
Run Code Online (Sandbox Code Playgroud)
如你所见,我已经尝试了许多没有运气的东西,所以如果有人有另一个想法,那么非常受欢迎.
我会把这个问题分成两个小的:
1)确保你不能过渡依赖于JPA 2.0
为此,您可以使用依赖图可视化工具(NetBeans内置了一个,或者您可以使用maven依赖树插件).另一种方法是在部署到JBoss之前浏览包含在工件中的库.
2)确保JBoss AS 7.1的正确配置
JBoss AS 7.1与Hibernate 4.0.x jar捆绑在一起,为了更新它们,请按照官方文档中的说明尝试这些步骤.
更新当前as7/modules/org/hibernate/main文件夹以包含较新版本
删除as7/modules/org/hibernate/main和as7/modules/org/hibernate/envers/main文件夹中的*.index文件
备份当前内容as7/modules/org/hibernate以防出错
删除旧罐子并将新的Hibernate罐子复制到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以命名您复制的jar
更新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>
Run Code Online (Sandbox Code Playgroud)
尝试仅删除该javax.persistence.api模块以及org.hibernate.
另外,如果您想将所有 Web 应用程序切换到 Hibernate 4.3(应该向后兼容),请按照此处所述切换到更新版本的 Hibernate 。
一些调试技巧:生成 JAR 文件后,明确检查它们包含哪些 JPA/Hibernate 库(通过解压缩它们)。另外,为了检查 Hibernate 版本,您可以按照此处描述的方式进行操作。
还要检查jboss-deployment-struct 文件的结构,因为该<exclusions>元素似乎既不在 a 中<deployment>,也不在 an <sub-deployment>element 中。
| 归档时间: |
|
| 查看次数: |
16904 次 |
| 最近记录: |