JBoss和不同版本的Hibernate

时间:2010-11-04 14:20:50

标签: java hibernate jboss classloader

我们正在使用JBoss 4.2.3,后者又带有Hibernate的3.2.1.ga版本。我想使用支持JPA 2.0的Hibernate 3.5.1-FINAL。我一直试图通过将我自己的hibernate jar放入我的WEB-INF / lib文件夹并在jboss-web.xml中为我的WAR创建自己的类加载器来完成这项工作

<jboss-web>
   <loader-repository> 
      com.moo.foo:archive=catalog-archive 
   </loader-repository> 
</jboss-web> 

我也试过了:

<jboss-web>
 <class-loading java2ClassLoadingCompliance="false">
  <loader-repository>
     com.moo.catalog:loader=catalogLoader
     <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
  </loader-repository>
 </class-loading>
</jboss-web>

但是我遇到了各种各样的问题,这是我目前坚持的例外情况:

Caused by: java.lang.NoSuchMethodException: org.hibernate.validator.ClassValidator.<init>(java.lang.Class, java.util.ResourceBundle, org.hibernate.validator.MessageInterpolator, java.util.Map, org.hibernate.annotations.common.reflection.ReflectionManager)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getDeclaredConstructor(Unknown Source)
    at org.hibernate.cfg.AnnotationConfiguration.applyHibernateValidatorLegacyConstraintsOnDDL(AnnotationConfiguration.java:443)

由于截止日期即将来临,我想我最好问一下它是否可能? :)

2 个答案:

答案 0 :(得分:14)

可能为时已晚,但它可能会帮助找到此线程的人找到上面描述的问题'由...引起:java.lang.NoSuchMethodException:org.hibernate.validator.ClassValidator ....':

我正在使用Jboss 4.2,Hibernate Core 3.6.5,Hibernate Validator 4.1.0,使用maven,我遇到了同样的问题。最后我解决了它还添加了这种依赖:

    <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-validator-legacy</artifactId>
          <version>4.0.2.GA</version>
    </dependency>

答案 1 :(得分:8)

我没有亲自测试,但是following thread提到了两种你可以尝试的方法(是的,我知道,它是关于JBoss 5的,但看起来问题是相同的。)

选项1

禁用java2ParentDelegation(您的第二个jboss-web.xml),将您的Hibernate JAR捆绑到您的应用中,并将以下属性添加到您的persistence.xml(以“避免”您所面临的问题) :

<property name="hibernate.validator.apply_to_ddl">false</property>
<property name="hibernate.validator.autoregister_listeners">false</property>

一位用户报告说这对他不起作用。

选项2

禁用java2ParentDelegation(您的第二个jboss-web.xml),将您的Hibernate JAR捆绑到您的应用中,并覆盖common/lib 中的hibernate-validator JAR

我无法解释为什么来自commons/lib的hibernate-validator仍被选中。