- - PR -
Weblogic9.2でJNDIを使用してOracle10gに接続する方法
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 上記トピックによると、トピ主さんは設定ファイルを修正して接続できたとなっています どのようにすれば、接続できるようになるでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2007-04-12 23:38
念のために netstat -an で Oracle にコネクションが張られているか確認しましょう。
また、例外発生時に BEA-XXXXXX というエラー ID が記録されていないでしょうか? その ID でドキュメントを検索すると対処方法がわかることがあります。 | ||||||||||||
|
投稿日時: 2007-04-12 23:50
インギさん、すいません。
引き続きお手数をおかけします。 『netstat -an』の結果は ローカルマシンIP:4076 オラクルサーバーIP:1521 ESTABLISHED となっていました。 また、エラー内容に『BEA-XXXXX』は含まれていませんでした。 | ||||||||||||
|
投稿日時: 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経由で接続するのが正しい気もしますが・・・(汗 | ||||||||||||
|
投稿日時: 2007-04-13 00:58
グローバルな JNDI 名でルックアップしたということでしょうか?
デプロイされているアプリケーション達が必要とする JNDI 名が被っていなければそれでも良いですが、名前の衝突を避けるためには java:comp/enb/ローカル名 -> web.xml -> weblogic.xml -> グローバル名 という形で間接的に参照した方が良いですね。 | ||||||||||||
|
投稿日時: 2007-04-13 01:01
自己レスです。
いろいろ、試してみた結果を書いておきます。 WebLogic9.2+WorkShop+Oracle10gR2の開発でJNDIを使用してOarcleに接続するために 必要な設定は以下の通りです。 @管理コンソールでJDBCモジュールを作成して、対象サーバーにデプロイ AWebアプリのWEB-INFに以下のファイルを作成 ・weblogic.xml ・web.config それぞれ、設定は次のようにします。 ■■■weblogic.xml■■■
■■■webl.xml■■■
※weblogic.xmlとweb.xmlのres-ref-nameは同一でなければならない。 ここまでの設定で
とすると、接続することが出来ます。 インギさん。本当にありがとうございました。 | ||||||||||||
|
投稿日時: 2007-04-13 10:16
おめでとうございます!
res-ref-name は "TestDSforWorkShop2" で最初から一致していたようですが、結局何が悪かったんでしょうか? | ||||||||||||
|
投稿日時: 2007-04-16 19:33
原因はですね。
http://edocs.beasys.co.jp/e-docs/wls/docs92/jdbc_admin/packagedjdbc.html 上記サイトの説明どおりに、weblogic.xmlに書くJNDI名をサーバーに設定した JNDI名と競合しないようにユニークな名前をつけてたんですが サーバーと同じ名前じゃなきゃだめだったみたいです。 |
1