- PR -

Tomcat-StrutsによるOracleDB接続エラーについて

投稿者投稿内容
技匠
会議室デビュー日: 2004/06/30
投稿数: 4
投稿日時: 2004-07-02 16:34
皆さん、はじめまして。
Tomcatを用いたServletサービスにおける開発初心者です。
現在、Tomcat-Strutsを用いたWebアプリケーションからOracleへの接続を行っておりますが、JNDIサービスにおけるエラーが解消されず、悶々とした時間を過ごしています。
〔環境〕
OS:Win2000 Pro.
Tomcat5.0.25
Oracle 9i

server.xmlにおけるResource情報は以下のとおり設定しております。
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
<Resource name="jdbc/oracledb" type="javax.sql.DataSource"/>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
<ResourceParams name="jdbc/oracledb">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>password</name>
<value>aaaa</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@DBServerIP:1521:jj</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.pool.OracleConnectionPoolDataSource</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>username</name>
<value>UserID</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
------
また、web.xmlファイルには、次のように設定しています。
<resource-ref>
<description>JJ-jinji System</description>
<res-ref-name>jdbc/oracledb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
-------
実行を行うと、JNDIサービスにおいてDataSourceが取得できず、以下のメッセージが表示されてしまいます。
javax.naming.NameNotFoundException: jdbc/oracledb
at com.sun.jndi.fscontext.RefFSContext.getObjectFromBindings(RefFSContext.java:400)
at com.sun.jndi.fscontext.RefFSContext.lookupObject(RefFSContext.java:327)
at com.sun.jndi.fscontext.RefFSContext.lookup(RefFSContext.java:146)
at com.sun.jndi.fscontext.FSContext.lookup(FSContext.java:127)

     (中、省略)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:571)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
at java.lang.Thread.run(Thread.java:534)
----------
JNDIサービスを正常に処理させるには、どのようなResource情報の設定を行えば宜しいでしょうか?
ご教示頂ければ幸いです。

カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-07-02 17:12
私のserver.xmlの下のほうは、以下のような感じになってます。

コード:
<Host name=.....>
    <Context path="xxx" ...>
        <ResourceLink name="jdbc/oracledb" global="jdbc/oracledb" />
    </Context>
</Host>



ご参考まで。
Goki
会議室デビュー日: 2004/03/02
投稿数: 16
投稿日時: 2004-07-02 17:17
はじめまして、回答ではありません。
エラーが出ているようでしたら
ログを確認してはどうでしょうか?

Tomcatをインストールしたパスの下にlogディレクトリが
あり、アクセスした時のログがあります。
それで原因を突き止められると思います。
参考になれば。
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2004-07-05 14:36
ありがちなパターンですが、lookupの名前を間違っているということはないでしょうか。

Tomcatの場合
正:lookup("java:comp/env/jdbc/oracledb");
誤:lookup("jdbc/oracledb");


こんな間違い私だけ?
APサーバーによって違うから性質が悪い・・・
技匠
会議室デビュー日: 2004/06/30
投稿数: 4
投稿日時: 2004-07-05 17:52
tabbyさんのご返答を参考にコードを書き換えた後、再度実行してみましたところ、次のようなエラーメッセージに変わりました。
------
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:243)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:743)
(以降、省略)
------
色々と調べてみたところ、ドライバが認識されていないとの結論に達したのですが、必要な*.jarファイルは全て、%Tomcat%\common\lib及び%Tomcat%\webapps\usedir\WEB-INF\lib配下にコピーしています。
その他に、定義ファイル内に書き込まなければならない情報はあるのでしょうか。

_________________
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-05 18:44
えーと、データソースの実装クラスをドライバクラスに設定してはだめでしょう。
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
では?
yukky
会議室デビュー日: 2004/07/06
投稿数: 1
投稿日時: 2004-07-06 13:14
使用するjdbc/oracledbリソースに
パラメータが引き渡せていないように見えます。
そのため、適切なドライバが見つけられないのでは
ないでしょうか?

誤:<ResourceParams name="UserDatabase">
正:<ResourceParams name="jdbc/oracledb">

あと、ちょっと気になるのですが
factoryパラメータ値は、例えば下記のように
なるのではないでしょうか?

<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

参考:
http://www.atmarkit.co.jp/fjava/javatips/004container003.html
はやぷ
会議室デビュー日: 2002/12/25
投稿数: 13
投稿日時: 2004-07-06 13:44
どうもです。

私も最近Tomcatのバージョンを上げる際に、
アンインストール→インストールとし、
Tomcatのアドミニストレーションツール?(ブラウザから使うやつです)
で、Contextの追加をしましたが、
server.xmlに変更がなかったらしく、同じエラーではまっていました。

server.xmlの説明がある書籍やホームページ等で調べればOKだと思います〜。

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