- PR -

tomcat4とDB2の連携

投稿者投稿内容
うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2003-05-21 14:58
うどです。

引用:

へげもんさんの書き込み (2003-05-21 14:06) より:
server.xmlの設定ですが、
引用:

<parameter>
<name>driverName</name>
<value>jdbc:db2:TestDB</value>
</parameter>


とあるのはdriverNameではなくurlではないでしょうか?



sever.xmlの他の設定がそうなっていたのでdriverNameとしていましたが、
urlでもダメでした。
それで環境を変えてみようと思いまして
さっきまで環境をTomcat/4.1.12-LEに移して同じことを実行しましたが、
やはりClass.forName()ではうまくいってDataSourceに変えたらダメでした。
それで4.1から導入された管理コンソールを使用してDataSourceの設定を行いましたが
そうすると
<GlobalNamingResources>
として設定され、今度は
GlobalResourcesLifecycleListener: Exception processing Global JNDI Resources
javax.naming.NamingException: Cannot create resource instance
といって怒られてしまいます。

まだいろいろと調べては見ますが、もし気づいたところがありましたら
アドバイス願います。
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-05-21 16:08
urlの<value>に指定している値ですが、普通は下記のようになります。

jdbc:mysql://ホスト名/TestDB
jdbc:oracle:thin:@ホスト名:TestDB

DB2でもホスト名の指定が必要な気がします。
Class.forName()でやってる方で、getConnection()の引数に渡しているURLはどうなってますか?
_________________
class HegeMon extends Singleton implements Cpp,Java,UML,XML {...}
うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2003-05-21 16:30
引用:

へげもんさんの書き込み (2003-05-21 16:08) より:
urlの<value>に指定している値ですが、普通は下記のようになります。

jdbc:mysql://ホスト名/TestDB
jdbc:oracle:thin:@ホスト名:TestDB

DB2でもホスト名の指定が必要な気がします。
Class.forName()でやってる方で、getConnection()の引数に渡しているURLはどうなってますか?


Class.forName()で接続する場合も同じで
jdbc:db2:データベース別名
です。
今回の接続では以前、yuzyさんにご指摘された様に
type2を使用しています。
(クライアントAPがApplet以外ではtype2を推奨しているようです。)

そのため上記のようなURLで接続しています。
それでデータベースの別名にはDB2クライアント(構成アシスタント)で
設定した名称を入れています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-05-22 12:41
>Class.forName()で通常にJDBC接続を行うと正常につながるのです。
これってTOMCATの外の話ですか?
切り分けのため、TOMCAT上の Servlet なり JSP なりで同様の接続を行ってみてはどうでしょう?
やはり例外が出力されるようでしたら、ネイティブライブラリのパスが間違っているはずです。
また、DB2の DLL は JDBC1.0 と JDBC2.0 用で別のものが用意されていますので、気を付ける必要があります。
うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2003-05-22 13:36
こんにちは。

引用:

インギさんの書き込み (2003-05-22 12:41) より:
>Class.forName()で通常にJDBC接続を行うと正常につながるのです。
これってTOMCATの外の話ですか?
切り分けのため、TOMCAT上の Servlet なり JSP なりで同様の接続を行ってみてはどうでしょう?


今回の話ではすべて一つのWebアプリケーション内(Servlet)で動作させています。
Class.forName()もContext#lookup()にしろすべて同一Servletにてテストはしています。

それで一つ勘違いしていたのですが、Class.forName()の場合
tomcat4.0.3ではlibrary.pathのエラーになってしまいました。
動作していたのはtomcat4.1.12です。
また、ためしにWEBアプリをtomcat4.1.24で動作させたらなんと動きました。
結果をまとめますと、

■tomcat4.0.4
Class.forName()・・・×
DataSource・・・×
エラートレース・・・
javax.naming.NamingException: Exception creating DataSource: java.lang.UnsatisfiedLinkError: no db2jdbc in java.library.path

■tomcat4.1.12
Class.forName()・・・○
DataSource・・・×
エラートレース・・・
javax.naming.NamingException: Cannot create resource instance

■tomcat4.1.24
Class.forName()・・・○
DataSource・・・○

となりました。
もちろんWEBアプリはすべて同一のものを使用していますし、
各環境変数も当初から変更はしていません。
また、データソースの設定では一番最初の質問時に記述した内容から
driverName → url
user → username
とパラメータ名を変更したものをすべてのtomcatで使用しました。

確かにtomcat4.0.4とtomcat4.1.xではserver.xmlに微妙に違うところが
あったのですがバージョンによって設定の仕方が違うんですかね?

余計に分からなくなってしまいました。。。

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