Tomcat7で「java.sql.SQLException: No suitable driver found」エラーが発生する場合
カテゴリ:Java
Tomcat7でJDBCによるデータベース接続ができない場合、/var/log/tomcat/localhost.*.logログを見てみましょう。以下のように、「java.sql.SQLException: No suitable driver found」が出力されている場合、何らかの理由でJDBCドライバが見つからない状況になっています。
localhost.*.log
Nov 09, 2018 1:59:23 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver found for jdbc/ExampleDB"] with root cause
次に、/var/log/tomcat/catalina.*.logログを見てみます。
以下のように「org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory」クラスが見つからない旨が出力されていればdbcpライブラリがない可能性があります。
catalina.*.log
Nov 09, 2018 1:59:22 AM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
ここで重要なのは、エラーで探しに行っているクラスのパスです。
実はdbcpライブラリにはapache-commons-dbcp.jarとtomcat-dbcp.jarの2種類のライブラリがあり、BasicDataSourceFactoryクラスへのパスが異なります。
apache-commons-dbcp.jar BasicDataSourceFactoryへのパスはorg.apache.commons.dbcp.BasicDataSourceFactory
tomcat-dbcp.jar BasicDataSourceFactoryへのパスはorg.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
ちなみに、yum install tomcat-libでインストールされるのはapache-commons-dbcp.jarです。
しかし、エラーではorg.apache.tomcat.dbcp.dbcp.BasicDataSourceFactoryを探しに行っていますので、tomcat-dbcp.jarが必要です。
tomcat-dbcp.jarは以下からダウンロードが可能ですので、ダウンロードして/usr/share/tomcat/lib/配下に置けば解消するはずです。
# wget http://repo2.maven.org/maven2/org/apache/tomcat/tomcat-dbcp/7.0.30/tomcat-dbcp-7.0.30.jar
*-dbcp.jarファイルあるのに何で?とならないように注意しましょう。(自分はかなりハマりました)
apache-commons-dbcp.jarとtomcat-dbcp.jarでクラスパスが違うというのは非常に紛らわしいですね。
公開日時:2018年11月12日 20:41:04