- PR -

Tomcat5.0.28とOracle9.2とのDBCPを経由しての接続について

1
投稿者投稿内容
孤立状態
会議室デビュー日: 2005/03/31
投稿数: 19
投稿日時: 2005-03-31 14:21
はじめまして。
当方、社内情報システムの人間で運用重視の環境でして、至らない事は重々承知して
おりますが、その辺のご理解をお願いいたします。

導入検討の事前調査で環境を整備しているのですが、どうしても上手くいかないので、
皆さんのお知恵を拝借させてください。

*****************************************************************************
【状況】
Tomcat5とOracle9iの接続にJDBC接続プーリングを使用して接続をしたい。
JDBCドライバとしてはTomcatサーバー側にOracle9クライアントをインストール
しないことを前提にthinドライバでの接続を考えています。

【現象】
Tomcat5.0.28とOracle9.2とのDBCPを経由しての接続をしようとして、
以下のエラーが表示されました。
【内容】
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

環境と設定内容は以下の通りです。
【導入ソフト】
javaSDK 1.4.2.07
Tomcat 5.0.28
Eclipse 3.0.1
(Oracle 9i(9.2)) ojdbc14.jar

【設定内容】
---server.xml---------------------------------------------------------------
<GlobalNamingResources>
<Resource name="jdbc/[xxx Oracle Connect String xxx]" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/[xxx Oracle Connect String xxx]">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:[xxx Oracle Connect String xxx]@[Oracle IP Address]:1521:[Oracle sid]</value>
</parameter>
<parameter>
<name>username</name>
<value>[Oracle UserName]</value>
</parameter>
<parameter>
<name>password</name>
<value>[Oracle Password]</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>

---web.xml------------------------------------------------------------------
<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>test2</servlet-name>
<servlet-class>test2.jdbctest1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test2</servlet-name>
<url-pattern>/test2</url-pattern>
</servlet-mapping>
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/[xxx Oracle Connect String xxx]</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

---JDBCの配置----------------------------------------------------------------
『[%CATALINA_HOME%]\\common\\lib』に『ojdbc14.jar』を配置

*****************************************************************************
この後、別スレッドの『Tomcat-StrutsによるOracleDB接続エラーについて』を
参考にして、以下の変更を行ったところ、エラー内容が変わりました。

【修正内容】
---testsites1.xml------------------------------------------------------------
<Context path="/testsites1" reloadable="false" docBase="C:\\Program Files\\eclipse\\workspace\\testsites1" workDir="C:\\Program Files\\eclipse\\workspace\\testsites1\\work" >
<Logger className="org.apache.catalina.logger.FileLogger" prefix="testsites1." suffix=".txt" timestamp="true"/>
<ResourceLink name="jdbc/[xxx Oracle Connect String xxx]" global="[xxx Oracle Connect String xxx]" type="javax.sql.DataSource"/>
</Context>

Eclipseにて作成される各サイトの『コンテキスト.xml』(←表現が間違っていたら
ごめんなさい)に『<ResourceLink ・・・』を追加しました。

【変更されたエラー内容】
HTTPステータス 500 -
<type> 例外レポート
<メッセージ>
<説明> The server encountered an internal error () that prevented it from fulfilling this request.
<例外>
java.lang.NullPointerException
org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:151)
org.apache.commons.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:95)
org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:301)
org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:883)
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851)
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
test2.jdbctest1.doGet(jdbctest1.java:38)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
*****************************************************************************
当方の知識不足は重々認識しておりますが、何卒、ご教授していただきたいと共に
具体的な指摘をお願いいたします。



[ メッセージ編集済み 編集者: 孤立状態 編集日時 2005-03-31 14:26 ]

[ メッセージ編集済み 編集者: 孤立状態 編集日時 2005-03-31 14:28 ]
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-03-31 15:07
設定は最初ので良いような気もしますが、とりあえず

jdbc:oracle:thin:[xxx Oracle Connect String xxx]@

の[xxx Oracle Connect String xxx]はいらないんじゃないでしょうか?
孤立状態
会議室デビュー日: 2005/03/31
投稿数: 19
投稿日時: 2005-03-31 15:54
早速のご返答、有難うございます。

ようやく『getConnection()』のロジックが通りました。
的確かつ迅速な回答有難うございます。
引き続きSQL実行結果の検証をいたします。

ただ、
jdbc:oracle:thin:[xxx Oracle Connect String xxx]@[Oracle IP Address]:1521:[Oracle sid]
の記述は日本語版の某有名サイトのOracle8iの接続方法を真似たのですが、
8iだと、これでもいいのでしょうか?
一抹の疑問を感じます。

私のような『なんちゃって技術者』には、ちょっとした事でも知識不足のため
行き詰まります。
今回の件も調べた情報全てを次々組み合わせて、環境を変えたのですが、
この部分は疑ってませんでした。

重ね重ね『(株)ぽち』様、有難うございました。

なお、私の環境の設定内容が知りたい人がございましたら、
稚拙ではありますが、お教えいたします。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-03-31 15:56
いや、私もそんなに詳しくないですが、とりあえず昔から

jdbc:oracle:thin:@[Oracle IP Address]:1521:[Oracle sid]

というurlでつないでいます。。
1

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