- PR -

TomcatのJNDIについて

1
投稿者投稿内容
RIN
会議室デビュー日: 2003/12/30
投稿数: 2
投稿日時: 2003-12-30 22:42
初歩的な質問かもしれませんが回答頂けたらと思い投稿させて頂きました。
Tomcat上で動くアプリケーションからはJNDIをルックアップして
DataSourceを取得することができるのですが、
バッチ処理のようなmainで動く処理からはルックアップすることができませんでした。
JNDIの設定とかの問題でルックアップすることは可能でしょうか?
それともできないものなのでしょうか?
bigben
会議室デビュー日: 2003/03/23
投稿数: 1
投稿日時: 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に含める必要があります。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2003-12-31 05:32
こんにちは、さくらばです。

引用:

bigbenさんの書き込み (2003-12-31 01:41) より:
標準のJava SE にはJNDIクラスライブラリがついておりません。
(JNDIは一応、J2EEの機能という位置づけなので)



入ってますけど...
以下の Web ページの機能ガイドのエンタープライズのエンタープライズ機能
のところにしっかりのっています。

http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
とのっち
会議室デビュー日: 2003/09/26
投稿数: 8
投稿日時: 2003-12-31 12:49
「ルックアップできなかった」というのは、何かエラーやら例外やらが帰ってきたのでしょうか?
RIN
会議室デビュー日: 2003/12/30
投稿数: 2
投稿日時: 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に
含めているかどうか等、ご質問いただいた事項は調査しないとわからないため、
正月明けに調べたいと思います。
ToGo
常連さん
会議室デビュー日: 2002/03/16
投稿数: 46
投稿日時: 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を使わずとも同様なことが実現できてしまうように思います。
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2004-01-03 23:25
はじめまして。

>以前Webコンテナ(Tomcat)上で使用するデータベース接続クラスを、
>汎用化したいと思ったことがありました。目的は、Tomcat上ではなく

私は、DataSourceのみをDB接続層(DAO層?)に受け渡します。
DAO層はDBの接続から切断までを担えれいいはずですので、
問題ないかとおもっています。

単体テストやバッチアプリでは、DBCP等をつかうか、
自前でDataSouceをインプリメントしたクラスを作成すれば
事足りますし。
1

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