- - PR -
TomcatのJNDIについて
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-12-30 22:42
初歩的な質問かもしれませんが回答頂けたらと思い投稿させて頂きました。
Tomcat上で動くアプリケーションからはJNDIをルックアップして DataSourceを取得することができるのですが、 バッチ処理のようなmainで動く処理からはルックアップすることができませんでした。 JNDIの設定とかの問題でルックアップすることは可能でしょうか? それともできないものなのでしょうか? | ||||
|
投稿日時: 2003-12-31 01:41
Tomcat自身の環境を一切使わずに、
Java SE のJDK or JREだけで、JNDIをCallするアプリを動作させた いうことですよね? 標準のJava SE にはJNDIクラスライブラリがついておりません。 (JNDIは一応、J2EEの機能という位置づけなので) Tomcatの環境にある jndi.jar か、 別途 http://java.sun.com/products/jndi/ からEalyAccess版をダウンロードして そのjndi.jarをつかって 対象のアプリ実行時のCLASSPATHに含める必要があります。 | ||||
|
投稿日時: 2003-12-31 05:32
こんにちは、さくらばです。
入ってますけど... 以下の Web ページの機能ガイドのエンタープライズのエンタープライズ機能 のところにしっかりのっています。 http://java.sun.com/j2se/1.4/ja/docs/ja/index.html | ||||
|
投稿日時: 2003-12-31 12:49
「ルックアップできなかった」というのは、何かエラーやら例外やらが帰ってきたのでしょうか?
| ||||
|
投稿日時: 2003-12-31 22:01
回答ありがとうございます。
既存システムを引き継いで調査したところ Tomcat上で動くStrutsのAction処理からのDBアクセスは、 JNDIをルックアップしDataSourceを取得して行っているのですが バッチ処理のmain起動からのDBアクセスは、 JNDIを介さず別コネクションを作成していたのです。 なぜ、DBアクセスを共通化していないのか作った人に質問したところ Tomcatで使用するメモリ領域とバッチ処理のmain起動で使用するメモリ領域が異なり、 うまくルックアップできないのでバッチ用のDBアクセス処理を作っているとの 回答を頂きました。(Weblogicでは問題ないそうですがTomcatではうまくいかないと) この回答に納得がいかず、バッチ処理でJNDIをルックアップして DBアクセスを行っている実例があれば実装方法をお聞きしたかったのです。 できることなら、DBアクセス処理を共通化したいと思ってます。 どんなエラーでできなかったのか、バッチ処理でjndi.jarをCLASSPATHに 含めているかどうか等、ご質問いただいた事項は調査しないとわからないため、 正月明けに調べたいと思います。 | ||||
|
投稿日時: 2004-01-03 17:57
以前Webコンテナ(Tomcat)上で使用するデータベース接続クラスを、
汎用化したいと思ったことがありました。目的は、Tomcat上ではなく JUnitでテストをしたい、単独Javaアプリケーション(いわゆるmain メソッドから実行される形態)でも使いたい、といったことでした。 JNDIからDataSourceを取得する仕組みを何とか実現しようと検討して みましたが、以下の状況で頓挫してしまいました。 ・J2SEのJNDI APIに標準で装備されているサービスプロバイダは LDAP/COSネーミング/RMIレジストリ/DNSであり、どれも別途 サービスプログラムを設定して起動しておく必要がある。 ・ファイルに設定を記述しておくSimple JNDIというライブラリが 存在するので試行してみたが、J2EEのコードで使用する "java:comp/env/jdbc/XXX"の名前においてjava:comp/envの部分が 設定できなかった。これはJ2EE環境特化のようである。 Simple JNDIのホームページは以下のURLです。 http://www.osjava.org/simple-jndi/ 結局のところ、J2EE環境とJ2SE環境ではDataSourceをJNDIから取得 する場合に指定文字列に違いがあるのではないかと思われます。 この違いを吸収するには、DataSourceをlookupする際に指定する文字列 をさらに外部化しなくてはならず、かなり面倒に思われます。 ※ならば、DriverManagerとJDBC URLを外部から与えてしまえば JNDIを使わずとも同様なことが実現できてしまうように思います。 | ||||
|
投稿日時: 2004-01-03 23:25
はじめまして。
>以前Webコンテナ(Tomcat)上で使用するデータベース接続クラスを、 >汎用化したいと思ったことがありました。目的は、Tomcat上ではなく 私は、DataSourceのみをDB接続層(DAO層?)に受け渡します。 DAO層はDBの接続から切断までを担えれいいはずですので、 問題ないかとおもっています。 単体テストやバッチアプリでは、DBCP等をつかうか、 自前でDataSouceをインプリメントしたクラスを作成すれば 事足りますし。 | ||||
1
