web-dev-qa-db-ja.com

TomcatはMySQL.jarライブラリを認識しません

Webアプリケーションの実行時にTomcatがMySQLドライバーをロードするように、いくつかの異なる方法を試しました。私はUbuntu8.04を使用しており、ライブラリはlibmysql-Javaパッケージから取得されます。これらは、以下に示すディレクトリにあります。

〜$ ls /usr/share/Java/mysql*
/usr/share/Java/mysql-connector-Java-5.1.5.jar

私のCLASSPATHには次のファイルが含まれています。

〜$ echo $ CLASSPATH 
。:/ usr/lib/jvm/Java-6-Sun/bin:/usr/local/Tomcat/lib/servlet-api.jar:/ usr/share/Java/mysql-connector-Java-5.1.5.jar 

.jarファイルのコピーをWebアプリのWEB-INF/lib /ディレクトリに置きます。

/usr/local/Tomcat/webapps/ohms/WEB-INF/lib $ ls 
 mysql-connector-Java-5.1.5.jar 

これらの変更を行った後、Tomcatを再起動し、クラスを再コンパイルして、Tomcatを再起動します。また、_import Java.sql.*;_を使用して必要なライブラリをインポートしています

ただし、行Class.forName("com.mysql.jdbc.Driver").newInstance();を実行すると、まだ_Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver_エラーが発生します。

私はここで何が間違っているのですか?

2
Murat Ayfer

Tomcatは、WebアプリケーションのクラスローダーでCLASSPATHを使用しません。 common.loaderconf/catalina.properties行にパスとファイルを追加できます。 jarがWEB-INF/libにあるときに、クラスローダーはクラスを見つけているはずです。なぜそうではないのか説明できません。 5.5を使用している場合、Tomcat6を使用している場合はjarをcommon/libまたはlib /に配置できます。このパスは、より高いレベルのクラスローダーによってロードされるため、最初に取得する必要があります。

4
David Pashley

例外をスローしているのはあなたのアプリですか、それともTomcat自体ですか?

Class.forName()を使用しているので、Tomcat自体でもJNDI構成を行っていないのではないかと思いますが、とにかくこの可能性を捨てます。 JNDIの場合、Tomcatはドライバーも認識できる必要があり、アプリのWEB-INF/libディレクトリに配置されたJARを認識できません。ドライバーをTomcatの共通libディレクトリーに置くと、Tomcatはそれを見ることができ、アプリもそれを見ることができます。ディレクトリは、Davidが言及しているものです。

0
Willie Wheeler