- PR -

DataSourceを利用したPostgresへの接続について

投稿者投稿内容
いっぽ
会議室デビュー日: 2005/08/30
投稿数: 12
投稿日時: 2006-03-28 18:04
お世話になります。

DataSourceを利用したPostgresへの接続ができずに困っております。
【環境】
eclipse 3.1.1 (WinXP)
コンテキスト宣言モード:コンテキストファイル
tomcat-5.0.28, postgres8.1
postgresql-8.2dev-501.jdbc3.jarを利用。
eclipseのビルドパスへの反映、およびtomcat common/libへはコピー済み。

【ソース】
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/postgres");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();

String sql = "SQL文"
System.out.print(sql);
stmt.executeUpdate(sql);

【META-INF/context.xml】
<Context path="/strutsdb" docBase="strutsdb"
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/postgres" auth="Container"
type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
url="jdbc:postgres:hellodb"
username="postgres" password="hogehoge" maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>

のように設定しています。

【エラー】
Server startup in 27659 ms
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
(・・・省略)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 33 more

ちなみに、Datasourceによる指定ではなく、Class.forNameなどでドライバを
直接指定した場合には、DBへ接続し、データへアクセスできました。

このようなエラーについては、ネットで検索するといくつか
出てくるのですがどうも解決につながらず困っております。

ご存知の方、解決策を教えていただけないでしょうか。
よろしくお願いします。

ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2006-03-29 11:40
引用:
いっぽさんの書き込み (2006-03-28 18:04) より:
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'


とりあえず、ここが気になります。

context.xmlってのがよくわかりませんが、JNDIでデータソースを参照するならserver.xmlや
$CATALINA_HOME/conf/Catalina/localhost/[アプリケーション名].xml
の設定は確認しましたか?
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-03-29 12:42
tomcat-5.5系で試すとどうなりますか?
ykhr
会議室デビュー日: 2004/11/12
投稿数: 18
投稿日時: 2006-03-29 14:00
tomcat5.0系のドキュメントには、
ResourceParamsでパラメータを指定するよう書いてありますね。
http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html

5.5系ではResourceタグの属性でいけるようです。
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
いっぽ
会議室デビュー日: 2005/08/30
投稿数: 12
投稿日時: 2006-03-29 15:50
返信ありがとうございます。

DataSourceの設定については、server.xmlに行うと
.warファイルを作成して別環境に移す場合、再度
移し先でserver.xmlを変更しなければならずわずらわしいと
感じていました。
META-INF/context.xmlに記述すると、.warファイルにそのまま
含まれ、その煩わしさがなくなるという情報をいくつか
見かけました。(理解が誤っていたらご指摘をお願いします。)

ご指摘にもありましたが、tomcat5.0系であるにもかかわらず、
context.xmlの書式を5.5系にしていました。これを直したのですが、
エラーがでてしまい、やはりうまくいきませんでした。
(つまりtomcatはそのままのバージョンでcontext.xmlを直そうとしました。)

変更後の設定とエラーの詳細は次の通りです。
【context.xml】
<?xml version='1.0' encoding='utf-8'?>
<Context path="/strutsdb" reloadable="true" docBase="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb" workDir="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb\work" >
<Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/postgres">
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
<parameter>
<name>password</name>
<value>hogehoge</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgres:hellodb</value>
  </parameter>
  </ResourceParams>
</Context>

【web.xml】
<web-app>
・・・(省略)
<resource-ref>
<description>postgreSQL Datasource example</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

【エラー】
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
・・・(省略)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver

相変わらずドライバをロードでき内容です。
META-INFを作成する場合、何か設定が必要なのでしょうか。。。?
いっぽ
会議室デビュー日: 2005/08/30
投稿数: 12
投稿日時: 2006-03-29 15:51
返信ありがとうございます。

DataSourceの設定については、server.xmlに行うと
.warファイルを作成して別環境に移す場合、再度
移し先でserver.xmlを変更しなければならずわずらわしいと
感じていました。
META-INF/context.xmlに記述すると、.warファイルにそのまま
含まれ、その煩わしさがなくなるという情報をいくつか
見かけました。(理解が誤っていたらご指摘をお願いします。)

ご指摘にもありましたが、tomcat5.0系であるにもかかわらず、
context.xmlの書式を5.5系にしていました。これを直したのですが、
エラーがでてしまい、やはりうまくいきませんでした。
(つまりtomcatはそのままのバージョンでcontext.xmlを直そうとしました。)

変更後の設定とエラーの詳細は次の通りです。
【context.xml】(windowsのディレクトリは通常のバックスラッシュです。)
<?xml version='1.0' encoding='utf-8'?>
<Context path="/strutsdb" reloadable="true" docBase="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb" workDir="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb\work" >
<Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/postgres">
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
<parameter>
<name>password</name>
<value>hogehoge</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgres:hellodb</value>
  </parameter>
  </ResourceParams>
</Context>

【web.xml】
<web-app>
・・・(省略)
<resource-ref>
<description>postgreSQL Datasource example</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

【エラー】
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
・・・(省略)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver

相変わらずドライバをロードでき内容です。
META-INFを作成する場合、何か設定が必要なのでしょうか。。。?
ykhr
会議室デビュー日: 2004/11/12
投稿数: 18
投稿日時: 2006-03-29 17:52
CATALINA_HOMEの/conf/Catalina/localhostに、[アプリケーション名].xml
というファイルあったりしないでしょうか?

META-INF/context.xmlの方法でwarをデプロイすると
context.xmlをコピーしてこのファイルが作成されるため、
その後からこちらが優先的に使われている可能性があります。
いっぽ
会議室デビュー日: 2005/08/30
投稿数: 12
投稿日時: 2006-03-29 19:48
SEYさん>
CATALINA_HOMEの/conf/Catalina/localhostに、strutsdb.xmlファイルがあります。
【strutsdb.xml】
<Context path="/strutsdb" reloadable="true" docBase="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb" workDir="C:\eclipse-SDK-3.1.1-win32\eclipse\workspace\strutsdb\work" />

確かにcontext.xmlとほぼ同様の内容です。これのファイルを適当にrenameして
tomcatを再起動すると、

【エラー】
HTTPステータス 404 - /strutsdb/input.jsp
type ステータスレポート
メッセージ /strutsdb/input.jsp
説明 The requested resource (/strutsdb/input.jsp) is not available.

となります。context.xmlの内容はserver.xmlからカットして使用しています。
(つまりserver.xmlにはこのcontext情報は何もありません。)

確かに重複していそうなので問題だと思うのですが、アプリケーションそのものが
デプロイされていないようです。

スキルアップ/キャリアアップ(JOB@IT)