java.sql.SQLException: Aucun pilote approprié, lors de l'accès à la DB

J'ai créé une base de Printemps 3.1 - Hibernate 4 - Mysql 5.5 web app en cours d'exécution sur Tomcat 7.
Je me suis mise en commun via des connexions à ressort + C3PO.

Mise à JOUR: je vais poster mon code.

Mon Printemps contexte de l'application:

<!-- Context -->
<context:component-scan base-package="com.yl.tomcat" />
<!-- AOP -->
<aop:aspectj-autoproxy />
<!-- Properties -->
<bean id="applicationProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:applicationProperties.properties" />
</bean>
<!-- Data source -->
<!-- Have spring manage connection management along with connection pooling -->
<bean id="dataSourceGlobal" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${driverClass}" />
<property name="jdbcUrl" value="${jdbcUrl" />
<property name="user" value="${user}" />
<property name="password" value="${password}" />
<!-- C3P0 Connection pool properties -->
<property name="minPoolSize" value="${c3p0.min_pool_size}" />
<property name="maxPoolSize" value="${c3p0.max_pool_size}" />
<property name="unreturnedConnectionTimeout" value="${c3p0.timeout}" />
<property name="idleConnectionTestPeriod" value="${c3p0.idle_test_period}"/>
<property name="maxStatements" value="${c3p0.max_statements}"/>
<property name="automaticTestTable" value="${c3p0.automatic_test_table}"/>
</bean>
<!-- JPA -->
<!-- Creates a EntityManagerFactory for use with the Hibernate JPA provider -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myPU" />
<property name="dataSource" ref="dataSourceGlobal" />
</bean>
<!-- In order to enable EntityManager injection -->
<bean id="persistenceAnnotation"
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
<property name="persistenceUnits">
<map>
<entry key="myPU" value="persistence/myPU" />
</map>
</property>
</bean>
<!-- Transactions -->
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSourceGlobal" />
</bean>

Comme vous pouvez le voir, j'ai utilisé un C3PO source de données pour la mise en commun, géré par le printemps conteneur.

Mon propriétés de fichier (à partir du printemps conteneur):

driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/yl
user=root
password=pass
c3p0.min_pool_size=5
c3p0.max_pool_size=20
c3p0.timeout=5000
c3p0.idle_test_period=100
c3p0.max_statements=50
c3p0.automatic_test_table=test_table

Voici mon POM dépendances:

    <properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.0.RELEASE</org.springframework-version>
<hibernate.version>4.1.4.Final</hibernate.version>
<org.aspectj-version>1.6.9</org.aspectj-version>
<org.slf4j-version>1.5.10</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!--Transaction Management Abstraction (depends on spring-core, spring-beans, 
spring-aop, spring-context) Define this if you use Spring Transactions or 
DAO Exception Hierarchy(org.springframework.transaction.*/org.springframework.dao.*) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!--JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, 
spring-tx) Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!--Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, and 
iBatis.(depends on spring-core, spring-beans, spring-context, spring-tx) 
Define this if you need ORM (org.springframework.orm.*) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- DB Connection -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>provided</scope>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Misc -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>

Mon web.xml est une norme Spring MVC web.xml avec l'ajout de mon unité de persistance définition:

<persistence-unit-ref>
<persistence-unit-ref-name>persistence/myPU</persistence-unit-ref-name>
<persistence-unit-name>myPU</persistence-unit-name>
</persistence-unit-ref>

Mon DAO est injecté avec l'Entité gestionnaire:

@PersistenceContext
protected EntityManager entityManager;

Et enfin, voici mon persistence.xml qui se trouve dans mon répertoire META-INF:

<persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.transaction.flush_before_completion"
value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>

Lorsque vous tentez d'accéder à la DB je suis de java.sql.SQLException: Aucun pilote approprié:

java.sql.SQLException: Aucun pilote approprié
java.sql.DriverManager.getDriver(DriverManager.java:289)
com.mchange.v2.c3p0.DriverManagerDataSource.pilote(DriverManagerDataSource.java:223)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.initializeAutomaticTestTable(C3P0PooledConnectionPoolManager.java:772)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.createPooledConnectionPool(C3P0PooledConnectionPoolManager.java:696)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:257)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:271)
com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281)
org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
org.mise en veille prolongée.moteur.jdbc.interne.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
$Proxy45.prepareStatement(Source Inconnue)
org.mise en veille prolongée.moteur.jdbc.interne.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147)
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166)
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145)
org.mise en veille prolongée.loader.Loader.prepareQueryStatement(Loader.java:1711)
org.mise en veille prolongée.loader.Loader.doQuery(Loader.java:828)
org.mise en veille prolongée.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
org.mise en veille prolongée.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
org.mise en veille prolongée.loader.Loader.loadEntity(Loader.java:2033)
org.mise en veille prolongée.loader.de l'entité.AbstractEntityLoader.charge(AbstractEntityLoader.java:82)
org.mise en veille prolongée.loader.de l'entité.AbstractEntityLoader.charge(AbstractEntityLoader.java:72)
org.mise en veille prolongée.persister.de l'entité.AbstractEntityPersister.charge(AbstractEntityPersister.java:3719)
org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:449)
org.mise en veille prolongée.de l'événement.interne.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:418)
org.mise en veille prolongée.de l'événement.interne.DefaultLoadEventListener.charge(DefaultLoadEventListener.java:204)
org.mise en veille prolongée.de l'événement.interne.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:251)
org.mise en veille prolongée.de l'événement.interne.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
org.mise en veille prolongée.interne.SessionImpl.fireLoad(SessionImpl.java:1079)
org.mise en veille prolongée.interne.SessionImpl.l'accès de 2200$(SessionImpl.java:172)
org.mise en veille prolongée.interne.SessionImpl$IdentifierLoadAccessImpl.charge(SessionImpl.java:2425)
org.mise en veille prolongée.interne.SessionImpl.get(SessionImpl.java:975)
org.mise en veille prolongée.ejb.AbstractEntityManagerImpl.trouver(AbstractEntityManagerImpl.java:807)
org.mise en veille prolongée.ejb.AbstractEntityManagerImpl.trouver(AbstractEntityManagerImpl.java:781)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.de réfléchir.La méthode.invoke(la Méthode.java:601)
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
$Proxy44.trouver(Source Inconnue)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.de réfléchir.La méthode.invoke(la Méthode.java:601)
org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
$Proxy21.trouver(Source Inconnue)
com.yl.tomcat.dal.impl.BasicJpaDao.lire(BasicJpaDao.java:48)
com.yl.tomcat.app.bl.UserService.updateUserName(UserService.java:17)
com.yl.tomcat.web.HomeController.Chaîne(HomeController.java:53)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.de réfléchir.La méthode.invoke(la Méthode.java:601)
org.springframework.web.la méthode.de soutien.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Dans les mêmes filets (cette et cette) la solution est fournie par mettre le pilote mysql pot dans le serveur de dossier lib. ($CATALINA_HOME/lib).
Actuellement, j'ai le pot seulement dans mon classpath de l'application et je me demandais si la solution ci-dessus est la seule disponible (je ne l'aime pas, il les couples de mon application sur mon serveur tomcat, qui n'est pas optimal à mon avis)?

De toute façon - même lorsque j'ai copié la base de données mysql pot de tomcat, lib bibliothèque ça n'a rien changé 🙁
Ai-je raté quelque chose le long du chemin?

Toute aide est très appréciée,
Yogi

Si la base de données mysql pot est dans votre WEB-INF/lib du dossier, il devrait fonctionner
Il doit être en vertu de cet endroit précis? Je veux dire, actuellement, il est sous mes dépendances maven, et toutes les dépendances maven sont dans mon classpath par défaut, de sorte que ce qui est spécial avec cet endroit qui vous l'ont suggéré?
Maven guerre plugin va faire l'affaire pour vous. Il suffit de définir votre emballage <packaging>war</packaging> dans le cas où vous n'avez pas de package et avec mvn package
1) avez-vous utiliser JNDI pour obtenir la ressource de connexion, ou avez-vous configurer la connexion au sein de votre application. 2) Veuillez poster à la partie pertinente ("en-tête" et le pilote de la dépendance) de vous POM.
Conformément à votre demande, j'ai posté mon code. Je ne suis pas en utilisant JNDI mais la mise en commun d'un C3PO connexion de source de données à l'aide de Printemps.

OriginalL'auteur forhas | 2012-07-01