1

I've seen several similar questions, unfortunately none of the answers solves my problem. I'm trying to build a web app running Hibernate, and get the following exception :

GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) com.orange.labs.quickpass.common.utils.web.QpContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cardController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'optionDataHelper': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hqlCardManager' defined in class path resource [context/applicationContext-cms-db-service.xml]: Cannot create inner bean 'cmsManagerFinderExecutor$child#1c24528c' of type [com.orange.labs.quickpass.db.utils.hql.finder.impl.FinderExecutorImpl] while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cmsManagerFinderExecutor$child#1c24528c' defined in class path resource [context/applicationContext-cms-db-service.xml]: Cannot resolve reference to bean 'cmsSessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cmsSessionFactory' defined in class path resource [context/datasource/cms-localdatasource.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:307)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1147)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:535)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1461)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1445)
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:860)
    at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:357)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Here is the hibernate.cfg.xml file :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/quickpass-user?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">***</property>
    <property name="hibernate.connection.password">*******</property>
  </session-factory>
</hibernate-configuration>

As you can see, hibernate.dialect is set.

This code comes from a project that is perfectly working on the server and on my colleagues' workstations. So whatever is wrong should come from my configuration and not the code itself, but none of my colleagues know what I could have forgotten or done wrong.

I'm new to Hibernate, J2EE development in general and even to the project I'm working on. I'm just trying to have it build and run for the first time on my machine...

EDIT : cms-localdatasource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">


    <bean id="cmsTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="cmsSessionFactory" />
        </property>
    </bean>

    <bean id="cmsSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="cmsDataSource"/>
        <property name="mappingLocations">
            <list>
                <value>classpath:database/hbm/*.hbm.xml</value>
            </list>
        </property>        
        <property name="hibernateProperties">
            <props>                
                <prop key="hibernate.show_sql">${cms.database.showsql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${cms.database.hbm2ddl}</prop>
            </props>
        </property>
    </bean>

    <bean id="cmsDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="${cms.database.url}" />
        <property name="user" value="${cms.database.user}" />
        <property name="password" value="${cms.database.password}"/>
        <property name="idleConnectionTestPeriod" value="120"/>
        <property name="minPoolSize" value="2"/>
        <property name="maxPoolSize" value="20"/>
        <property name="checkoutTimeout" value="10000"/>
        <property name="acquireRetryAttempts" value="30"/>
        <property name="acquireIncrement" value="5"/>
        <property name="initialPoolSize" value="5"/>
        <property name="maxStatements" value="50"/>        
    </bean>    
</beans>
Thibault Witzig
  • 2,060
  • 2
  • 19
  • 30
  • 1
    Can you provide more details like how `cmsSessionFactory` session factory is configured? – CuriousMind Dec 01 '14 at 17:06
  • It references to `/cms-localdatasource.xml` Can you provide that file as well? EDIT: Check it out as well. http://stackoverflow.com/questions/11211451/connection-cannot-be-null-when-hibernate-dialect-not-set – Aditya Peshave Dec 01 '14 at 17:07
  • Added cms-localdatasource.xml. cmsSessionFactory is defined in it. – Thibault Witzig Dec 02 '14 at 08:55
  • Just a friendly tip from another French-speaking developer : I always set my dev environment to English, so error mesage don't get translated. You get many more google hits on untranslated English error messages ! – Pierre Henry Dec 02 '14 at 09:36

3 Answers3

2

I have met this problem when the database has been erased but I haven't change the URL. So please check when you use those URL + username + password, you can login your MySQL DB.

MageXellos
  • 154
  • 1
  • 9
1

I finally found out what was wrong : the database users could indeed connect to my MySQL Server on localhost but I forgot to grant them privileges. They couldn't even run a simple SELECT query. I hope this answer will prevent someone in the future from wasting as much time as I did. :)

Thibault Witzig
  • 2,060
  • 2
  • 19
  • 30
0

I was getting the same exception along with persistence exception but it was due to the expired password for the database user. I saw "password expired" error on jboss. Unfortunately, tomcat was not showing the complete stacktrace.

Sarneet Kaur
  • 2,860
  • 1
  • 14
  • 12