竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
コネクションプーリング
by sekisen[sekisen]
「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直下に置いてみても同じエラーになりました。
何が原因なのでしょうか?
投稿:sekisen[sekisen]/2007年 03月 11日 19時 17分 /更新:2007年 03月 11日 19時 17分
RE:コネクションプーリング
by 竹形 誠司[takegata]
リソースのルックアップに失敗しているのかも知れません。
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分
RE:コネクションプーリング
by sekisen[sekisen]
Context ctx = new InitialContext();
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分
RE:コネクションプーリング
by 竹形 誠司[takegata]
そうですか。環境を作って現象が再現するか確認してみますので、少し時間をください。
投稿:竹形 誠司[takegata]/2007年 03月 11日 22時 37分 /更新:2007年 03月 11日 22時 37分
RE:コネクションプーリング
by 竹形 誠司[takegata]
bbsフォルダをwebappsの下に置かれているかと思いますが、これはやめた方がいいと思います。と、いうのは、コンテキスト定義ファイルが正しく認識されていない場合でも、ルート直下のフォルダとしてアクセスできてしまうからです。お使いのOSがWindowsであれば、c:\bbs などに置いて、bbs.xmlを

<?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>
のようにしてみてください。

また、コンテキスト定義ファイルは、やはり本書で説明している通り、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分
RE:コネクションプーリング
by sekisen[sekisen]
conf/Catalina/localhostというフォルダ構成を作成し、その下にコンテキストファイルを置く事で解決しました!

ログファイルは今まで見ていませんでした。
初歩的なミスを無くすためにもこれからはチェックしようと思います。
環境まで作っていただき、ありがとうございました。
投稿:sekisen[sekisen]/2007年 03月 12日 02時 41分 /更新:2007年 03月 12日 02時 41分
Re:Re:コネクションプーリング
by KILROY[KILROY]
> conf/Catalina/localhostというフォルダ構成を作成し、
> その下にコンテキストファイルを置く事で解決しました!
 eclipse では、「新規>プロジェクトの作成>Tomcat プロジェクト」とすると自動的に conf/Catalina/localhost の下に同名の(空の)コンテキストファイルを作ってくれるので、それを編集すると楽です。
 ちなみに、 eclipse で初めて Tomcat アプリケーションを作成される方に。新規プロジェクトの作成時に、ドキュメントルートをプロジェクト直下ではなく、 webapps としておくことをお奨めします。DB 初期化時の sql のソースとかドキュメント類とかいったものを置く場所に困りますので。これらのドキュメント類をプロジェクトの中に含めておかないと、将来 CVS などを使ってチーム開発を行なうときに、けっこう混乱します。
投稿:KILROY[KILROY]/2007年 03月 29日 13時 03分 /更新:2007年 03月 29日 13時 04分
RE:コネクションプーリング
by javaSukiyaki[javaSk]
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[javaSk]/2009年 01月 05日 01時 59分 /更新:2009年 01月 05日 02時 01分