2012-04-27 3 views
0

Когда я пытаюсь запустить приложение JSF на Tomcat 7, оно выдает это исключение.Не найдено подходящих драйверов для jdbc: mysql: // localhost: 3306/test

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:192) 
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278) 
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) 
... 51 more 

Если я добавлю эту строку перед созданием EntitiyManagerFactory, она отлично работает.

Class.forName("com.mysql.jdbc.Driver"); 
emf = Persistence.createEntityManagerFactory("manager1"); 

Мои зависимочти

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.1.2.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.19</version> 
    </dependency> 

Также мое приложение работает отлично Tomcat 6, без добавления Class.forName("com.mysql.jdbc.Driver");

Любая идея, чтобы решить эту проблему? Благодаря

ответ

6

Первое и реальное решение: попробуйте с Hibernate 4.1.0 и 4.1.3.Final.

Я столкнулся с этой проблемой на Hibernate 4.1.2, прежде чем, в конце концов, споткнулся о https://forum.hibernate.org/viewtopic.php?p=2454336. Насколько я понимаю, это немного несовместимость между более поздними версиями Tomcat (в его исправлениях для негерметичности DeviceManager) и Hibernate 4.1.2.

Другие обходные пути, чтобы вызвать регистрацию водителя явно, как в ответ Брэд Уайтейкера, или чтобы убедиться, что JreMemoryLeakPreventionListener не защищает DriverManager путем добавления driverManagerProtection="false" к определению Слушатель в $ CATALINA_HOME/CONF/сервер. xml - то есть:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false"> 
1

Проблема в том, класс драйвер не существует доступен во время выполнения вашего приложения, поместите банку с драйверами в /WEB-INF/lib

+0

В свойствах -> сборка установки, я добавляю зависимости Maven к WEB-INF/lib. Поэтому класс водителя должен быть там. Также Class.forName ("com.mysql.jdbc.Driver"); не бросает ClassNotFoundException – mkayman

1

На некоторых серверах (JBoss, GlassFish) Я также должен был поставить банку драйвера на сервер папка библиотеки по умолчанию.

4

Я столкнулся с этой же проблемой, когда я перенес работу .war из Tomcat 5.5 и Java 6 в Tomcat 7 и Java 7. Моя ранее работающая .war начала бросать «java.sql.SQLException: подходящего драйвера для jdbc не найдено: SQLServer ... ". Я был в состоянии решить путем простого добавления

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

непосредственно перед вызовом

java.sql.DriverManager.getConnection("myUrl"); 

Я знаю, что документация говорит, что этот дополнительный вызов не требуется с водителем jdbc4, но это фиксированная моя проблема. Драйвер jar (sqljdbc4.jar) был расположен в WEB-INF/lib моего .war.

1

У меня подобный выпуск. Он решается путем обновления спящего режима до 4.1.4.

Смежные вопросы