- - PR -
DataSourceを利用したPostgresへの接続について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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へ接続し、データへアクセスできました。 このようなエラーについては、ネットで検索するといくつか 出てくるのですがどうも解決につながらず困っております。 ご存知の方、解決策を教えていただけないでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2006-03-29 11:40
とりあえず、ここが気になります。 context.xmlってのがよくわかりませんが、JNDIでデータソースを参照するならserver.xmlや $CATALINA_HOME/conf/Catalina/localhost/[アプリケーション名].xml の設定は確認しましたか? | ||||
|
投稿日時: 2006-03-29 12:42
tomcat-5.5系で試すとどうなりますか?
| ||||
|
投稿日時: 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 | ||||
|
投稿日時: 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を作成する場合、何か設定が必要なのでしょうか。。。? | ||||
|
投稿日時: 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を作成する場合、何か設定が必要なのでしょうか。。。? | ||||
|
投稿日時: 2006-03-29 17:52
CATALINA_HOMEの/conf/Catalina/localhostに、[アプリケーション名].xml
というファイルあったりしないでしょうか? META-INF/context.xmlの方法でwarをデプロイすると context.xmlをコピーしてこのファイルが作成されるため、 その後からこちらが優先的に使われている可能性があります。 | ||||
|
投稿日時: 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情報は何もありません。) 確かに重複していそうなので問題だと思うのですが、アプリケーションそのものが デプロイされていないようです。 |