Попробуйте использовать hibernate 3.4 в JBoss 5.1, но получите javax.validation.ValidationException: невозможно найти поставщика по умолчанию

Я столкнулся с некоторыми проблемами при использовании Hibernate 3.4 на JBoss 5.1. Hibernate 3.4 — это реализация JPA 1.0, поэтому его можно использовать в JBoss 5.1. Дело в том, что у JBoss есть собственная версия Hibernate, которая находится в /common/lib, тогда как я не хочу использовать версию, предоставленную JBoss. Я удалил файлы hibernate-annotations.jar, hibernate-commons-annotations.jar, hibernate-core.jar, hibernate-entitymanager.jar, hibernate-jmx.jar и hibernate-validator.jar из этой папки и поместил мои банки Hibernate 3.4 в каталог server/default/lib. Я также скомпилировал hibernate-validator.jar 3.1.0 в свой военный файл, потому что в противном случае JBoss не может распознать, где находится валидатор. После того, как я сделал все вышеперечисленное, я упаковал свой военный файл и развернул его в папку развертывания.

Сервер запустился без проблем. Но когда я попытался получить доступ к своему веб-приложению, он выдает ошибку:

Похоже, он все еще не может найти валидатор. Но он уже есть в военном файле. Я протестировал свое веб-приложение на сервере причала, и оно работало нормально. Что я сделал не так в конфигурации JBoss?

Дело в том, что у JBoss есть собственная версия Hibernate, которая находится в /common/lib, тогда как я не хочу использовать версию, предоставленную JBoss.


person newguy    schedule 27.10.2010    source источник


Ответы (2)


Я думаю, что рекомендуемым подходом будет объединение библиотек, которые вы хотите использовать в своем приложении, и настройка JBoss для загрузки jar-файлов из вашего приложения в первую очередь с использованием jboss-web.xml со следующим содержимым (см. ClassLoadingConfiguration):

Я не проверял это сам при использовании Bean Validation, но пользователь сообщил в этой теме (а также вот этот) ему еще предстояло заменить комплектный валидатор от common/lib. Это звучит странно, и я не могу подтвердить, что это необходимо. Попробуйте без первого.

<jboss-web>
   <class-loading java2ClassLoadingCompliance="false">
    <loader-repository>
        unique.packege.name:archive=your_project.war
        <loader-repository-config>
            java2ParentDelegation=false
        </loader-repository-config>
    </loader-repository>
   </class-loading>
</jboss-web>

В случае, если кто-то все еще ищет ответ. У меня была эта проблема, когда я использовал hibernate-validator 3.0.1, я изменил его на 4.2.0.Final, и он отлично работает.

person Pascal Thivent    schedule 27.10.2010
comment
@newguy: я не думаю, что классы из common/lib могут загружать что-то из вашего веб-приложения. Однако сработало бы и обратное. - person newguy; 27.10.2010
comment
2010-10-27 10:55:13,416 ОШИБКА [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] (http-172.16.10.211-80-1) Exception Processing ErrorPage[ exceptionType=java.lang.Exception, location=/app/uncaughtException] javax.servlet.ServletException: Servlet.init() для сервлета roodummy выдал исключение в org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1089) в org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777) в org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:607) в org.apache.catalina.core.ApplicationDispatcher.processRequest (ApplicationDispatcher.java:446) по адресу org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382) по адресу org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310) по адресу org.apache. catalina.core.StandardHostValve.custom(StandardHostValve.java:416) на org.apache.catalina.core.StandardH ostValve.throwable(StandardHostValve.java:270) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) в org .jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) в org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:330) в org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) в org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) в org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) в java.lang.Thread.run(Thread.java:662) Вызвано: org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем «org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0»: вызов i метод nit не удался; вложенным исключением является javax.validation.ValidationException: невозможно найти поставщика по умолчанию в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:519) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) на org.springframework.beans.factory.support. AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java :288) на org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) на org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) на org.springframework. context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) в org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) в org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java: 442) в org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(Frame workServlet.java:458) в org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) в org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) в org.springframework.web .servlet.HttpServletBean.init(HttpServletBean.java:127) в javax.servlet.GenericServlet.init(GenericServlet.java:212) в org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048) ... Еще 16 Причина: javax.validation.ValidationException: невозможно найти поставщика по умолчанию в javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) в org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java :161) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) в org.springframework.beans.factory.support.AbstractAutowi reCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) ... еще 32 - person Pascal Thivent; 27.10.2010

также убедитесь, что у вас установлен jar validator-api

Есть только один валидатор, который находится в файле войны. Я уже удалил валидатор из файла common/lib. Я думаю, что загрузчик классов должен попытаться получить его из файла войны, если он не может найти его в другом месте.

person Ali    schedule 01.08.2011