- PR -

Weblogic9.2でJNDIを使用してOracle10gに接続する方法

1
投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2007-04-12 22:36
Weblogic9.2+WorkShop+Oracle10gR2でStruts開発を行っています。

WorkShopで作成したWebアプリのとWLの管理コンソールで作成した
JDBCモジュールのデプロメントをして、両方がアクティブになるところまで確認しました

ですが、DBにつながりません。
管理コンソールでJDBCを作成したときにテストしたら、接続成功となりましたので
接続プールに問題はないと思います。

weblogic.xml等の記述に問題があると思っております。

WebアプリのWEB-INF以下に次のコンフィグファイルを設置しています。
・new-TestJDBC2-3576-jdbc.xml(ドメインホームのConfig/jdbcよりコピー、名前変更)
・web.xml
・weblogic.xml

http://edocs.beasys.co.jp/e-docs/wls/docs92/jdbc_admin/packagedjdbc.html

上記サイトを参考に、それぞれを以下のように変更しました。

■■■new-TestJDBC2-3576-jdbc.xml■■■
<?xml version='1.0' encoding='UTF-8'?>
<jdbc-data-source xmlns="省略" xmlns:sec="省略" xmlns:xsi="省略" xmlns:wls="省略" xsi:schemaLocation="省略">
<name>TestJDBCforWorkShop2</name>
<jdbc-driver-params>
<url>jdbc:oracle:thin:@192.168.1.8:1521:test</url>
<driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name>
<properties>
<property>
<name>user</name>
<value>username</value>
</property>
</properties>
<password-encrypted>{3DES}+5Fayycm7kc=</password-encrypted>
</jdbc-driver-params>
<jdbc-connection-pool-params>
<test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
</jdbc-connection-pool-params>
<jdbc-data-source-params>
<jndi-name>TestJNDIforWorkShop2</jndi-name>
<global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol>
</jdbc-data-source-params>
</jdbc-data-source>

■■■web.xml■■■
<resource-ref>
<res-ref-name>TestDSforWorkShop2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

■■■web.xml■■■
<wls:resource-description>
<wls:res-ref-name>TestDSforWorkShop2</wls:res-ref-name>
<wls:jndi-name>TestJNDIforWorkShop2</wls:jndi-name>
</wls:resource-description>


以上の設定でDaoクラスで以下のようにlookupすると・・・

ds = (DataSource)initCon.lookup("java:comp/env/TestDSforWorkShop2");

javax.naming.LinkException:
[Root exception is javax.naming.NameNotFoundException:
Unable to resolve 'TestJNDIforWorkShop2'. Resolved '';
remaining name 'TestJNDIforWorkShop2'];
Link Remaining Name: 'TestJNDIforWorkShop2'

上記のようなエラーが発生してDBに接続できません。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15149&forum=12&start=0

上記トピックによると、トピ主さんは設定ファイルを修正して接続できたとなっています
どのようにすれば、接続できるようになるでしょうか?
よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-12 23:38
念のために netstat -an で Oracle にコネクションが張られているか確認しましょう。

また、例外発生時に BEA-XXXXXX というエラー ID が記録されていないでしょうか?
その ID でドキュメントを検索すると対処方法がわかることがあります。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2007-04-12 23:50
インギさん、すいません。
引き続きお手数をおかけします。

『netstat -an』の結果は

ローカルマシンIP:4076 オラクルサーバーIP:1521 ESTABLISHED

となっていました。

また、エラー内容に『BEA-XXXXX』は含まれていませんでした。


カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2007-04-13 00:20
インギさん!!つながりましたよ!!

おかげさまで、接続できました。

http://edocs.beasys.co.jp/e-docs/wls/docs92/jdbc_admin/packagedjdbc.html

上記サイトを参考に、いろいろと設定ファイルをいじっていましたが、
ドメインホームのConfig/jdbcにある、JDBCモジュールのJNDI名で
lookupしたらつながりました。

つながったのは、いいんですが、このやり方で正しいのでしょうか?
webアプリ内にあるweblogic.xml経由で接続するのが正しい気もしますが・・・(汗
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-13 00:58
グローバルな JNDI 名でルックアップしたということでしょうか?
デプロイされているアプリケーション達が必要とする JNDI 名が被っていなければそれでも良いですが、名前の衝突を避けるためには java:comp/enb/ローカル名 -> web.xml -> weblogic.xml -> グローバル名 という形で間接的に参照した方が良いですね。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2007-04-13 01:01
自己レスです。

いろいろ、試してみた結果を書いておきます。

WebLogic9.2+WorkShop+Oracle10gR2の開発でJNDIを使用してOarcleに接続するために
必要な設定は以下の通りです。

@管理コンソールでJDBCモジュールを作成して、対象サーバーにデプロイ
AWebアプリのWEB-INFに以下のファイルを作成
・weblogic.xml
・web.config

それぞれ、設定は次のようにします。

■■■weblogic.xml■■■
コード:
  <wls:resource-description>
  	<wls:res-ref-name>任意のマッピング名</wls:res-ref-name>
  	<wls:jndi-name>JDBCモジュールに書かれているJNDI名</wls:jndi-name>
  </wls:resource-description>


■■■webl.xml■■■
コード:
  <resource-ref>
  	<res-ref-name>任意のマッピング名</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>



※weblogic.xmlとweb.xmlのres-ref-nameは同一でなければならない。

ここまでの設定で
コード:
ds = (DataSource)initCon.lookup("java:comp/env/任意のマッピング名")



とすると、接続することが出来ます。

インギさん。本当にありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-13 10:16
おめでとうございます!
res-ref-name は "TestDSforWorkShop2" で最初から一致していたようですが、結局何が悪かったんでしょうか?
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2007-04-16 19:33
原因はですね。

http://edocs.beasys.co.jp/e-docs/wls/docs92/jdbc_admin/packagedjdbc.html

上記サイトの説明どおりに、weblogic.xmlに書くJNDI名をサーバーに設定した
JNDI名と競合しないようにユニークな名前をつけてたんですが

サーバーと同じ名前じゃなきゃだめだったみたいです。
1

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