2013-07-28 11 views
5

Sto provando a configurare una webapp Java MVC con Spring e Hibernate e il database MySQL, ma quando eseguo il server Ho questo errore, e non so qual è il problema.ERRORE: org.hibernate.util.JDBCExceptionReporter - Impossibile caricare la classe di driver JDBC 'com.mysql.jdbcDriver'

WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null 
ERROR: org.hibernate.util.JDBCExceptionReporter - Cannot load JDBC driver class 'com.mysql.jdbcDriver' 
WARN : org.hibernate.cfg.SettingsFactory - Could not obtain connection to query metadata 
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbcDriver' 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:114) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    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:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbcDriver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130) 
    ... 33 more 
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    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:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    ... 22 more 
jul 28, 2013 12:26:19 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    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:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    ... 22 more 

Non so dove potrebbe essere l'errore. Questo è il mio applicationContext.xml. L'errore sembra essere nel bean DataSource.

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" 
    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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


    <!-- holding properties for database connectivity /--> 
    <context:property-placeholder location="classpath:jdbc.properties"/> 

    <!-- enabling annotation driven configuration /--> 
    <context:annotation-config/> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <!-- Scans the classpath of this application for @Components to deploy as beans --> 
    <context:component-scan base-package="com.companyname.springapp.repository" /> 
    <context:component-scan base-package="com.companyname.springapp.service" /> 

</beans> 

E questo è il mio jdbc.properties

hibernate.generate_statistics = true 
hibernate.show_sql = true 

jdbc.driverClassName=com.mysql.jdbcDriver 
jdbc.url=jdbc:mysql://localhost:3306/baseDeDatos 
jdbc.username=miUsuario 
jdbc.password=miContrasena 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 

ho tutto questo barattolo per caricare le classi. Qualcosa di loro (come jpa-api.jar) penso che non sia necessario e altri si ripetano, ma l'ho avuto in un altro progetto da cui inizio a farlo e non l'ho ancora rimosso:

activation-1.1.jar 
antlr-2.7.7.jar 
aopalliance-1.0.jar 
c3p0-0.9.1.jar 
commons-logging-1.1.1.jar 
commons-pool-1.6.jar 
dom4j-1.6.1.jar 
hibernate-commons-annotations-3.2.0.Final.jar 
hibernate-commons-annotations-4.0.1.Final.jar 
hibernate-core-3.5.3-Final.jar 
hibernate-core-4.1.8.Final.jar 
hibernate-entitymanager-4.1.8.Final.jar 
hibernate-jpa-2.0-api-1.0.1.Final.jar 
hibernate-validator-4.0.2.GA.jar 
hibernate3.jar 
javassist-3.15.0-GA.jar 
javax.mail.jar 
jaxb-api-2.1.jar 
jaxb-impl-2.1.3.jar 
jboss-logging-3.1.0.GA.jar 
jboss-transaction-api_1.1_spec-1.0.0.Final.jar 
jpa-api-2.0-cr-1.jar 
jstl-1.2.jar 
junit-4.8.1.jar 
log4j-1.2.14.jar 
mysql-connector-java-5.1.25.jar 
mysql-connector-java-5.1.6.jar 
org.apache.commons.dbcp.jar 
org.springframework.orm.jar 
postgresql-8.4-701.jdbc4.jar 
servlet-api-2.5.jar 
slf4j-api-1.5.11.jar 
slf4j-api-1.6.1.jar 
slf4j-log4j12-1.5.11.jar 
spring-aop-3.0.2.RELEASE.jar 
spring-asm-3.0.2.RELEASE.jar 
spring-beans-3.0.2.RELEASE.jar 
spring-context-3.0.2.RELEASE.jar 
spring-context-support-3.0.2.RELEASE.jar 
spring-core-3.0.2.RELEASE.jar 
spring-expression-3.0.2.RELEASE.jar 
spring-jdbc-3.0.2.RELEASE.jar 
spring-orm-3.0.2.RELEASE.jar 
spring-tx-3.0.2.RELEASE.jar 
spring-web-3.0.2.RELEASE.jar 
spring-webmvc-3.0.2.RELEASE.jar 
stax-api-1.0-2.jar 
validation-api-1.0.0.GA.jar 

Qualcuno può aiutarmi con questo problema? Lo eseguo in Eclipse con Tomcat 7.

Grazie!

+0

Perché avete due versioni differenti di 'mysql-connector-java' (e varie altre librerie)? Più versioni sono generalmente una cattiva idea ... –

risposta

10

Hai il nome del driver sbagliato qui:

jdbc.driverClassName=com.mysql.jdbcDriver 

Dovrebbe essere:

jdbc.driverClassName=com.mysql.jdbc.Driver 

Annotare il . tra il jdbc e Driver.

Il modo per diagnosticare cose simili è quello di guardare la classe che non poteva trovare:

Cannot load JDBC driver class 'com.mysql.jdbcDriver' 

già sembra sospette come il nome jdbcDriver non segue Java convenzioni di denominazione. A quel punto, quindi, ricontrolla quello che dovrebbe essere veramente - ad es. esaminando il file jar e correggendo la configurazione.

Come notato nei commenti, non penso che sia una buona idea avere più versioni dello stesso file jar sul classpath - non riesco a vedere che finisca bene.

+0

Grazie. Che stupido errore !! Le versioni multiple dello stesso file jar sono dovute al progetto, e sto passando ad un'altra versione/tecnologia ... –

0

Avevo questo problema e si è scoperto che il mio file .properties aveva una coppia di "\ t \ t" alla fine del valore driverClassName. Ma quando l'errore veniva stampato, non mostrava le schede. Alla fine ho trovato questo come ho camminato attraverso un lungo viaggio di debug.

Quindi se qualcuno lo trova su SO e hai il problema sopra riportato, controlla il tuo file .prop, assicurati che non ci sia niente di strano alla fine dei valori.