2011-05-19 3 views
8

J'intègre Spring avec Hibernate. Cependant, quand je lance l'application que je reçois une erreur comme:Erreur lors de la création du bean sessionFactory

Erreur de création de haricot avec le nom « sessionFactory » défini dans le chemin classe ressource [ressources/spring.xml]: appel de la méthode d'initialisation a échoué; exception imbriquée est org.hibernate.HibernateException: Impossible d'obtenir la valeur par défaut usine Bean Validation

Mon spring.xml ressemble:

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="jdbc:postgresql://localhost:5432/3encult" /> 
    <property name="password" value="3encult" /> 
    <property name="username" value="3encult" /> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value> 
       resources/User.hbm.xml 
       <!-- Project.hbm.xml ProjCF.hbm.xml Task.hbm.xml TaskCF.hbm.xml Category.hbm.xml 
        TaskEstimation.hbm.xml ProjectEstimation.hbm.xml Parameter.hbm.xml StatisticTool.hbm.xml 
        Report.hbm.xml --> 
      </value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
      <!-- Especificamos el valor minimo del pool de conexiones --> 
      <prop key="hibernate.c3p0.minPoolSize">5</prop> 
      <!-- Especificamos el valor maximo del pool de conexiones --> 
      <prop key="hibernate.c3p0.maxPoolSize">20</prop> 
      <!-- El tiempo de vida de cada conexion del pool. --> 
      <prop key="hibernate.c3p0.timeout">600</prop> 

     </props> 
    </property> 
</bean> 

<bean id="myUserDAO" class="main.java.com.gwt.app.server.User"> 
    <property name="sesionFactory" ref="sessionFactory" /> 
</bean> 
</beans> 

Et l'injection dans la classe utilisateur est:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"resources/spring.xml"}); 

public void setSesionFactory(SessionFactory sesionFactory){ 
    this.sesionFactory = sesionFactory; 
    this.sesion = this.sesionFactory.openSession(); 
} 

Le stacktrace est:

Error creating bean with name 'sessionFactory' defined in class path resource [resources/spring.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [resources/spring.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 
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:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:900) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) 
at main.java.com.gwt.app.server.User.<init>(User.java:16) 
at main.java.com.gwt.app.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:20) 
at main.java.com.gwt.app.client.Main.main(Main.java:10) 
Caused by: org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:127) 
at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.java:1677) 
at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1627) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1418) 
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1348) 
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
... 14 more 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:118) 
... 22 more 
Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:383) 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:109) 
... 27 more 
Caused by: javax.validation.ValidationException: Unable to find a default provider 
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) 
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:380) 
... 28 more 

Build path contient les bibliothèques suivantes:

hibernate3.jar 
org.springframework.aop-3.1.0.M1.jar 
org.springframework.asm-3.1.0.M1.jar 
org.springframework.aspects-3.1.0.M1.jar 
org.springframework.beans-3.1.0.M1.jar 
org.springframework.context-3.1.0.M1.jar 
org.springframework.context.support-3.1.0.M1.jar 
org.springframework.core-3.1.0.M1.jar 
org.springframework.expression-3.1.0.M1.jar 
org.springframework.instrument-3.1.0.M1.jar 
org.springframework.instrument.tomcat-3.1.0.M1.jar 
org.springframework.jdbc-3.1.0.M1.jar 
org.springframework.jms-3.1.0.M1.jar 
org.springframework.orm-3.1.0.M1.jar 
org.springframework.oxm-3.1.0.M1.jar 
org.springframework.transaction-3.1.0.M1.jar 

Je n'utilise pas la validation. C'est la raison de ne pas inclure le pot de validation.

Je ne sais pas ce qui se passe, j'aimerais que quelqu'un puisse m'aider.

Merci!

+1

pouvez-vous s'il vous plaît poster plus de stacktrace –

+0

Quelle version d'Hibernate utilisez-vous? –

+0

pouvez-vous lister le pot d'hibernation et de printemps sur votre chemin de classe. – sudmong

Répondre

14

Hibernate se lève throw new HibernateException("Unable to get the default Bean Validation factory", e); s'il ne peut pas accéder à Bean Validation Framework (BeanValidationActivator).

Donc je suppose que le problème est que les jarres de validation sont manquantes.

Pour Maven:

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.0.2.GA</version> 
    </dependency> 
+0

Merci beaucoup! Cela a résolu mon problème! – Andrew

5

Essayez d'ajouter suivante dépendances maven (ou télécharger le JAR est si vous n'utilisez Maven):

D'autres dépendances peuvent également être nécessaires (envisager d'utiliser Maven si vous n'êtes pas encore, pour éviter les problèmes de ce genre)

0

Essayez une fois en ajoutant cette ligne à votre fichier hibernate.cfg.xml

<property name="javax.persistence.validation.mode" value="none"/> 
Questions connexes