我的项目有问题。我们正在使用JBoss7.1.1,我们希望在4.1版中使用envers。版本4.1中的Envers在4.1版中需要Hibernate。不幸的是,jboss 7.1.1包含较旧的hibernate和Envers模块。
我有2个选择:
在JBoss中更改模块(放置新的envers和hibernate)。问题是运行此应用程序的每个jboss都必须为该项目“调整”(有点痛苦)。
要么:
排除JBoss模块并在war-war中使用WEB-INF / lib中的库。我用以下方法排除了模块:
<jboss-deployment-structure>
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<deployment>
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="org.hibernate"/>
<module name="org.hibernate.envers"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
我已经将maven中的依赖项从提供更改为编译,它应该可以工作,对吧?
但现在我得到了这个例外:
Caused by: java.lang.IllegalArgumentException: interface org.hibernate.annotations.Columns is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) [classes.jar:1.6.0_35]
at org.hibernate.annotations.common.annotationfactory.AnnotationFactory.create(AnnotationFactory.java:46)
at org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader.buildColumns(JPAOverridenAnnotationReader.java:1383)
关于如何修复它的任何想法?
我强烈建议您不要在应用中使用不同版本的Hibernate。
我建议你下载hibernate 4.1.3和其他相关的,用正确的jar替换jars和update module.xml。我们将7.1.1与Hibernate 4.1.3 Core和Envers一起使用。
替换Envers module.xml
<module xmlns="urn:jboss:module:1.1" name="org.hibernate.envers">
<resources>
<resource-root path="hibernate-envers-4.1.3.Final.jar"/>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.hibernate"/>
<module name="org.jboss.logging"/>
<module name="org.dom4j"/>
<module name="javax.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="org.hibernate.commons-annotations"/>
<module name="org.javassist"/>
</dependencies>
</module>
Change also org/hibernate/main/ (we use hibernate core 4.1.3.Final)
Change org/hibernate/validator/main ( we use hibernate validator-4.2.0.Final)
Change org/hibernate/commons-annotations (we use 4.0.1 Final)
应该是它..让我知道是否出现任何依赖性问题..
-Maddy