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
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
Vous devez vous connecter pour publier un commentaire.
Ok, je l'ai eu.
comme indiqué ici:
http://doc.51windows.net/mysql/?url=/mysql/ch23s03.html
SQLException 'Aucun Pilote Approprié" signifie que le pilote n'est pas dans votre CLASSPATH ou votre format de l'URL est incorrecte.
Apparemment j'ai été absent un support:
J'ai passé à travers de nombreuses propositions de solutions telles que:
classpath déjà.
ce qui n'est pas requis.
bien.
Donc, mon format de l'URL est incorrecte.
Après la fixation de ce que j'ai rencontrés quelques autres questions.
Par exemple, à un certain moment, j'ai décidé d'ajouter persistence.xml emplacement pour mon entitymanager définition:
Mais alors obtenu:
Le problème était que je devais ajouter au classpath avant mon chemin (depuis META-INF, c'est bien sûr sous le chemin de classe dans un projet maven standard format):
Que pour une raison que j'ai eu:
L'ajout de la aspectjweaver dépendance à mon pom.xml le problème est réglé:
Après la correction que j'ai eu:
J'ai même essayé de re-installation de mysql, mais sans succès jusqu'à présent. Je gues je vais essayer d'ouvrir un thread différent de celui-ci.
OriginalL'auteur forhas