「JAVA+MySQL+Tomcatで作る掲示板とブログ」で勉強をしています。
旧掲示板でも同じような質問があったのですが、P48,49のコネクションプーリングの設定がうまくいきません。
どうしても出来ないので、Tomcatのバージョンが6.0のせいかと思い、とりあえず、
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
からコンテキスト定義ファイル、web.xmlのソースをコピペで必要最低限の変更のみで試してもできませんでした。
bbs.xml
<?xml version='1.0' encoding='UTF-8' ?>
<Context path="/bbs" reloadable="true" docBase="bbs" crossContext="true" reloadable="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="testuser" password="bbb" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webapp?autoReconnect=true"/>
</Context>
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
エラーは
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
java.sql.SQLException: No suitable driver
なお、本では、コンテキスト定義ファイルをconf/Catalina/localhostの下に置くと書かれていますが、6.0ではフォルダー構成が変わっており、work/Catalina/localhostの下に置いています。
試しに、conf直下に置いてみても同じエラーになりました。
何が原因なのでしょうか?
旧掲示板でも同じような質問があったのですが、P48,49のコネクションプーリングの設定がうまくいきません。
どうしても出来ないので、Tomcatのバージョンが6.0のせいかと思い、とりあえず、
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
からコンテキスト定義ファイル、web.xmlのソースをコピペで必要最低限の変更のみで試してもできませんでした。
bbs.xml
<?xml version='1.0' encoding='UTF-8' ?>
<Context path="/bbs" reloadable="true" docBase="bbs" crossContext="true" reloadable="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="testuser" password="bbb" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webapp?autoReconnect=true"/>
</Context>
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
エラーは
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
原因
java.sql.SQLException: No suitable driver
なお、本では、コンテキスト定義ファイルをconf/Catalina/localhostの下に置くと書かれていますが、6.0ではフォルダー構成が変わっており、work/Catalina/localhostの下に置いています。
試しに、conf直下に置いてみても同じエラーになりました。
何が原因なのでしょうか?
投稿:sekisen[sekisen]/2007年 03月 11日 19時 17分
/更新:2007年 03月 11日 19時 17分
RE:コネクションプーリング
by 竹形 誠司[takegata]
リソースのルックアップに失敗しているのかも知れません。
bbs.xmlで
bbs.xmlで
Resource name="jdbc/TestDB"
と指定した場合は、P.50のコードでDataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
のようにする必要がありますが、このようになっていますか?
投稿:竹形 誠司[takegata]/2007年 03月 11日 21時 59分
/更新:2007年 03月 11日 21時 59分
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
となっています。
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
となっています。
投稿:sekisen[sekisen]/2007年 03月 11日 22時 11分
/更新:2007年 03月 11日 22時 12分
そうですか。環境を作って現象が再現するか確認してみますので、少し時間をください。
投稿:竹形 誠司[takegata]/2007年 03月 11日 22時 37分
/更新:2007年 03月 11日 22時 37分
bbsフォルダをwebappsの下に置かれているかと思いますが、これはやめた方がいいと思います。と、いうのは、コンテキスト定義ファイルが正しく認識されていない場合でも、ルート直下のフォルダとしてアクセスできてしまうからです。お使いのOSがWindowsであれば、c:\bbs などに置いて、bbs.xmlを
また、コンテキスト定義ファイルは、やはり本書で説明している通り、conf/Catalina/localhostの下に置いてください。Tomcat 6.0のドキュメントを読んでみましたが、workの下にコンテキスト定義ファイルを配置するように変更されたという記述は見つけられませんでした。また、テスト環境で試してみましたが、workの下に置いたコンテキスト定義ファイルは認識されませんでした。
それと、質問に書かれているbbs.xmlファイルは reloadable="true" が二重に定義されていて、xmlの解析エラーになっていました。どちらかを削除してください。このようなエラーはTomcatのログファイルに出力されます。
<?xml version='1.0' encoding='UTF-8' ?>
<Context path="/bbs" docBase="c:\bbs"
crossContext="true" reloadable="true">
<Resource name="jdbc/TestDB" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="testuser" password="bbb"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webapp?autoReconnect=true"/>
</Context>
のようにしてみてください。<Context path="/bbs" docBase="c:\bbs"
crossContext="true" reloadable="true">
<Resource name="jdbc/TestDB" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="testuser" password="bbb"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webapp?autoReconnect=true"/>
</Context>
また、コンテキスト定義ファイルは、やはり本書で説明している通り、conf/Catalina/localhostの下に置いてください。Tomcat 6.0のドキュメントを読んでみましたが、workの下にコンテキスト定義ファイルを配置するように変更されたという記述は見つけられませんでした。また、テスト環境で試してみましたが、workの下に置いたコンテキスト定義ファイルは認識されませんでした。
それと、質問に書かれているbbs.xmlファイルは reloadable="true" が二重に定義されていて、xmlの解析エラーになっていました。どちらかを削除してください。このようなエラーはTomcatのログファイルに出力されます。
投稿:竹形 誠司[takegata]/2007年 03月 12日 00時 23分
/更新:2007年 03月 12日 00時 25分
conf/Catalina/localhostというフォルダ構成を作成し、その下にコンテキストファイルを置く事で解決しました!
ログファイルは今まで見ていませんでした。
初歩的なミスを無くすためにもこれからはチェックしようと思います。
環境まで作っていただき、ありがとうございました。
ログファイルは今まで見ていませんでした。
初歩的なミスを無くすためにもこれからはチェックしようと思います。
環境まで作っていただき、ありがとうございました。
投稿:sekisen[sekisen]/2007年 03月 12日 02時 41分
/更新:2007年 03月 12日 02時 41分
> conf/Catalina/localhostというフォルダ構成を作成し、
> その下にコンテキストファイルを置く事で解決しました!
eclipse では、「新規>プロジェクトの作成>Tomcat プロジェクト」とすると自動的に conf/Catalina/localhost の下に同名の(空の)コンテキストファイルを作ってくれるので、それを編集すると楽です。
ちなみに、 eclipse で初めて Tomcat アプリケーションを作成される方に。新規プロジェクトの作成時に、ドキュメントルートをプロジェクト直下ではなく、 webapps としておくことをお奨めします。DB 初期化時の sql のソースとかドキュメント類とかいったものを置く場所に困りますので。これらのドキュメント類をプロジェクトの中に含めておかないと、将来 CVS などを使ってチーム開発を行なうときに、けっこう混乱します。
> その下にコンテキストファイルを置く事で解決しました!
eclipse では、「新規>プロジェクトの作成>Tomcat プロジェクト」とすると自動的に conf/Catalina/localhost の下に同名の(空の)コンテキストファイルを作ってくれるので、それを編集すると楽です。
ちなみに、 eclipse で初めて Tomcat アプリケーションを作成される方に。新規プロジェクトの作成時に、ドキュメントルートをプロジェクト直下ではなく、 webapps としておくことをお奨めします。DB 初期化時の sql のソースとかドキュメント類とかいったものを置く場所に困りますので。これらのドキュメント類をプロジェクトの中に含めておかないと、将来 CVS などを使ってチーム開発を行なうときに、けっこう混乱します。
投稿:KILROY[KILROY]/2007年 03月 29日 13時 03分
/更新:2007年 03月 29日 13時 04分
sekisen様
javaSukiyakiです。私も同じ問題で悩んでいます。
環境は、
Tomcat5.5.27
MySQL5.0.18
です。
質問1.
bbs.xmlのファイルの<Contextタグは、server.xmlでなくこちらに書くべきなのですね。
質問2.
web.xmlの
<description>MySQL Test App</description>は何を参照する名称でしょうか。
<description>DB Connection</description>は、デフォルトでこのままで良いのでしょうか。
<res-ref-name>jdbc/TestDB</res-ref-name>は、bbs.xmlとjavaソースとで照合が取れていれば良いのでしょうか。
質問3.
server.xmlの内容は、どのように追加されていますでしょうか。
お手数ですが、お返事頂ければ幸いです。
javaSukiyakiです。私も同じ問題で悩んでいます。
環境は、
Tomcat5.5.27
MySQL5.0.18
です。
質問1.
bbs.xmlのファイルの<Contextタグは、server.xmlでなくこちらに書くべきなのですね。
質問2.
web.xmlの
<description>MySQL Test App</description>は何を参照する名称でしょうか。
<description>DB Connection</description>は、デフォルトでこのままで良いのでしょうか。
<res-ref-name>jdbc/TestDB</res-ref-name>は、bbs.xmlとjavaソースとで照合が取れていれば良いのでしょうか。
質問3.
server.xmlの内容は、どのように追加されていますでしょうか。
お手数ですが、お返事頂ければ幸いです。
投稿:javaSukiyaki[javaSk]/2009年 01月 05日 01時 59分
/更新:2009年 01月 05日 02時 01分