- - PR -
Tomcat+MySQLでJNDIのLookupができない
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-10 16:56
皆さんに色々指摘いただいた点を反映して現在の状況をまとめています。
未だ解決していません。 よろしくお願いします。 【環境】 ・OS : Windows XP SP2 ・JVM : 1.5.0_09 ・Tomcat : 5.5.20 ・MySQL : 5.0.24 ・JDBCドライバ : [TomcatインストールDIR]\common\lib\mysql-connector-java-5.0.3-bin.jar 【エラー内容】 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) ・ ・ Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(Unknown Source) 【server.xmlの追記】 <Context path="/test01" docBase="test01" debug="0" reloadable="false" crossContext="true"> <Resource name="jdbc/Struts" auth="Container" type="javax.sql.DataSource" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxActive="100" maxIdle="30" maxWait="10000" username="user" password="password" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=Windows-31J" /> </Context> 【web.xml の追記】 <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/Struts</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> 【JNDI lookup部分のソース】 Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Struts"); db = ds.getConnection(); 【アクセスURL】 http://localhost:8080/test01/・・・ 【その他】 "server.xml"に追記したパラメータと同じ設定でJDBCアクセスを行うmain()を持った Javaアプリからは問題なくアクセスできるのでパラメータに不正はないと思われます。 [ メッセージ編集済み 編集者: ひろし 編集日時 2006-11-10 16:57 ] | ||||
|
投稿日時: 2006-11-10 17:47
今までの流れからすると、ここが一番怪しいですね。 ドライバのクラス名もJDBC URLも共にnullなようです。 Tomcat 5.0までは<Resource>にはtypeとnameだけで、 他のパラメータは<ResourceParams>に書いていました。 なので、5.5の定義ファイルを5.0が解釈した場合は、 JNDIにはjavax.sql.DataSourceとしてbindされているものの、 ドライバやJDBC URL等の接続情報が存在しない状況になりそうです。 実はTomcat 5.0で実行していた、なんて事はないですか? | ||||
|
投稿日時: 2006-11-10 17:57
とりあえず似たような現象についての書き込みを載せておきます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=21956&forum=12&start=8 以下余談 今Tomcat5.5のドキュメント見るとserver.xmlに設定するようになっていますね… でもPostgresの設定例はやっぱりアプリケーション用の設定ファイルに記述するように なっていたりしたりして本当はどうなんですかね。 | ||||
|
投稿日時: 2006-11-10 18:00
あしゅさんいつもアドバイスありがとうございます。
なるほど。 何回も確認しましたが、5.5でした。 ちなみに関係ないと思いますが、"test01"はEclipseでTomcatプロジェクトとして作成していますので、 Tomcat 5.5\webapps 下には存在しませんが、特に問題ないですよね? | ||||
|
投稿日時: 2006-11-10 18:18
ukさんありがとうございます! 以下の方法で解決できました。 [Tomcat 5.5インストールDIR]\conf\Catalina\localhost\test01.xml に以下を追記。 ・元々 <Context docBase="C:/eclipse/workspace/test01" reloadable="true" workDir="C:/eclipse/workspace/test01/work"> <Resource auth="Container" description="DB Connection" name="jdbc/Struts" type="javax.sql.DataSource"/> </Context> ↓ ・変更 <Context docBase="C:/eclipse/workspace/test01" reloadable="true" path="/test01" workDir="C:/eclipse/workspace/test01/work"> <Resource auth="Container" description="DB Connection" name="jdbc/Struts" type="javax.sql.DataSource" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=Windows-31J" username="user" password="password" maxActive="100" maxIdle="30" maxWait="10000" /> </Context> でもこれで解決だとすると、記述した内容は、server.xmlのResoureに記述したものと同じなので、 server.xmlの <Context path="/test01" ・・・ <Resource ・・・ の定義は全く効いていなかったということになりますね。 これが正しい方法なのでしょうか? |
«前のページへ
1|2|3