【问题标题】:JBoss and different versions of HibernateJBoss 和不同版本的 Hibernate
【发布时间】:2010-11-04 14:20:49
【问题描述】:

我们使用的是 JBoss 4.2.3,而后者又附带了 Hibernate 的 3.2.1.ga 版本。我想使用支持 JPA 2.0 的 Hibernate 3.5.1-FINAL。我一直在尝试通过将我自己的休眠 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)

由于截止日期迫在眉睫,我想我最好问问这是否可能? :)

【问题讨论】:

  • 也许您最好还是升级到 JBoss AS 5?这不是一个选择吗?

标签: java hibernate jboss classloader


【解决方案1】:

也许为时已晚,但它可能会帮助找到此线程的人寻找上述关于“Caused by: 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>

【讨论】:

  • 支持你以防万一它对别人有帮助,恐怕对我来说太晚了:)
【解决方案2】:

我没有亲自对此进行测试,但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 的休眠验证器仍然被选中。

【讨论】:

  • 干杯,伙计,当我不再躲避迫在眉睫的可怕死线时,我会尝试这样做:)
  • 非常感谢,选项 1 对我有用! (Jboss 4.2 与 Hibernate 3.2.6.ga 在主应用程序上,第二个应用程序是 Play!Framework 1.2.5 与 Hibernate 3.6 捆绑)
  • 非常感谢,选项 1(看起来更优雅)适用于 Hibernate 3.6.0.Final 和 JBoss 4.2.1.GA。解决那个奇怪的冲突是一个很大的痛苦!
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2014-03-05
  • 2016-08-19
  • 2022-11-25
相关资源
最近更新 更多