JBoss and different versions of Hibernate

12,293

Solution 1

Maybe too late, but it may help somebody that finds this thread looking for the problem described above about 'Caused by: java.lang.NoSuchMethodException: org.hibernate.validator.ClassValidator....':

I'm using Jboss 4.2, Hibernate Core 3.6.5, Hibernate Validator 4.1.0, using maven, and I have the same problem. Finally I've solved it adding also this dependency:

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

Solution 2

I didn't test this personally, but the following thread mentions two approaches that you could try (yeah, I know, it's about JBoss 5 but it looks like the problem is identical).

Option 1

Disable java2ParentDelegation (your second jboss-web.xml), bundle your Hibernate JARs into your app and add the following properties to your persistence.xml (to "avoid" the issue you're facing):

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

One user reported this didn't work for him.

Option 2

Disable java2ParentDelegation (your second jboss-web.xml), bundle your Hibernate JARs into your app and override the hibernate-validator JARs in common/lib.

I'm not able to explain why the hibernate-validator from commons/lib still gets picked.

Share:
12,293
Rémi Vennereau
Author by

Rémi Vennereau

33 year old Swede living in London.

Updated on June 17, 2022

Comments

  • Rémi Vennereau
    Rémi Vennereau about 2 years

    We are using JBoss 4.2.3 which in turn comes with version 3.2.1.ga of Hibernate. I would like to use Hibernate 3.5.1-FINAL which supports JPA 2.0. I've been trying to make this work by putting my own hibernate jars in my WEB-INF/lib folder and creating my own classloader for my WAR in jboss-web.xml

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

    I've also tried:

    <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>
    

    But I get loads of various issues and this is the exception I'm currently stuck on:

    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)
    

    Since the deadline is looming I thought I'd better ask if it is even possible? :)