J'ai rencontré quelques problèmes en utilisant Hibernate 3.4 sur JBoss 5.1. Hibernate 3.4 est une implémentation de JPA 1.0 et devrait donc pouvoir être utilisée dans JBoss 5.1. La chose est JBoss a sa propre version de Hibernate, qui se trouve à/common/lib alors que je ne veux pas utiliser la version fournie par JBoss. Ce que j'ai fait, c'est que j'ai supprimé le fichier hibernate-annotations.jar, le fichier hibernate-commons-annotations.jar, le fichier hibernate-core.jar, le fichier hibernate-entitymanager.jar, le fichier hibernate-jmx.jar et le fichier hibernate-validator.jar de ce répertoire. mon Hibernate 3.4 jars dans le répertoire server/default/lib. J'ai également compilé hibernate-validator.jar 3.1.0 dans mon fichier war car il semble que sinon JBoss ne puisse pas reconnaître l'emplacement du validateur. Après avoir fait tout ce qui précède, j'ai empaqueté mon fichier de guerre et l'ai déployé dans le dossier de déploiement.Essayez d'utiliser hibernate 3.4 dans JBoss 5.1 mais récupère javax.validation.ValidationException: Impossible de trouver un fournisseur par défaut
Le serveur a démarré sans problème. Mais quand j'ai essayé d'accéder à mon application web, il renvoie une erreur:
2010-10-27 10:55:13,416 ERROR [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() for servlet roodummy threw exception at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1089) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:607) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:446) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:416) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:270) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:662) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is javax.validation.ValidationException: Unable to find a default provider at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) at javax.servlet.GenericServlet.init(GenericServlet.java:212) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048) ... 16 more Caused by: javax.validation.ValidationException: Unable to find a default provider at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:161) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) ... 32 more
On dirait qu'il ne peut toujours pas trouver le validateur. Mais c'est déjà dans le fichier de guerre. J'ai testé mon application web dans un serveur jetée et cela a bien fonctionné. Qu'ai-je fait de mal dans la configuration de JBoss?
Il n'y a qu'un seul validateur qui est dans le fichier de guerre. J'ai déjà enlevé le validateur du common/lib. Je pense que le classloader devrait essayer de l'obtenir du fichier de guerre s'il ne pouvait pas le trouver ailleurs. – newguy
@newguy: Je ne pense pas que les classes de common/lib puissent charger quelque chose à partir de votre webapp. Cependant, l'inverse fonctionnerait. –