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

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

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

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

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
このコンテキストにバインドされていません(DBCPの使い方)
by 竹形 誠司[takegata]
TomcatでDBCPを使う場合、リソースの設定が正しくないと「このコンテキストにバインドされていません」というエラーが発生します。DBCPのリソースは、Tomcatのコンテキストファイルで設定します。たとえば、localhostにtestというウェブアプリケーションを作る場合、tomcatのconf/Catalina/localhost(このディレクトリがなければ新たに作成します)の下にtest.xmlというファイルを配置します。次に例を示します。
<?xml version='1.0' encoding='utf-8'?>
<Context docBase = "C:/prg/test/JSP" pass="/test">
    <Resource name="aaa/bbb"
        auth="Container"
        type="javax.sql.DataSource"
        username="Mulder"
        password="TrustNo1"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost/test?autoReconnect=true【改行しない】
            &amp;useUnicode=true&amp;characterEncoding=cp932"
    />
</Context>

Resource要素のname属性がDBCPのリソース名です。Javaのコードからは、"java:comp/env/"からの相対パスでこのリソースにアクセスされます。他の部分を一応説明しておくと、docBaseの"C:/prg/test/JSP"はアプリケーションのディレクトリ、pass=の"/test" はブラウザからアクセスする際のパス、userNameのMulderはMySQLに追加してあるユーザー名passwordはMulderのパスワードです。

urlの行は表示の都合で2行になっていますが、実際にはダブルクオーテーション内の文字列の途中では改行しないでください。localhost/の次のtestはMySQLのデータベース領域の名前です。クエリー文字列に含まれる&はキャラクタエンティティの書式を使って“&amp;”と書いています。

このリソースを使ったJSPコードの例を次に示します。

<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/aaa/bbb");
Connection conn= ds.getConnection();
Statement pstmt = conn.createStatement();
ResultSet rs = pstmt.executeQuery("SELECT * FROM person");
while(rs.next()){ %>
    <%=rs.getString("name")%><BR>
<%}
pstmt.close();
rs.close();
conn.close();
%>
上のコードでctxオブジェクトのlookupメソッドに指定している"java:comp/env/aaa/bbb"が、リソースへのパスです。ここでの指定とコンテキストファイルの指定が合っていないと、「このコンテキストにバインドされていません」というエラーが発生するわけです。

いろいろな解説を読むとweb.xmlファイルで<resource-ref>要素を定義するように書いてある場合が多いですが、私の今までの経験では、この設定は無くても動きます。

Tomcatのバージョンによる違い【重要】
上記の設定方法はTomcat5.5以降の場合です。Tomcat5.0以前のバージョンをお使いの場合は、下のURLを参照してください。

参考:
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html

投稿:竹形 誠司[takegata]/2008年 02月 13日 21時 46分 /更新:2008年 02月 13日 22時 21分