- PR -

Strutsにおけるデータソース定義

1
投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-05-06 14:36
こんにちは、Strutsアプリケーションにおけるデータベース接続に関する質問です。

環境
・Tomcat 5
・Struts 1.1
・PostgreSQL 7.3

Strutsアプリケーションはデータベースに接続して、情報を保存したり取り出したりします。
現在はstruts-config.xml の data-sourcesエレメントにDB接続情報(URL,User,Password)を記述しています。
Javaコードからは Action#getDataSource() を利用して、Connectionオブジェクトを取得しています。

さて、ユーザ認証機能を追加しようということで、データベースにユーザ情報、ロール情報を定義しました。

これをTomcat5のJDBCレルム、またはデータソースレルムにより利用するつもりです。
この場合には、server.xmlにもDB接続情報を追加してあげる必要があるはずです。

ここで質問なのですが、次のような要求を満たすよいアイディアはありませんでしょうか?

1)データベース接続情報はできれば一箇所で管理したい
2)アプリケーションコードはできれば変更したくない
  (今のままAction#getDataSource()を使いたい)

server.xmlにJNDIリソースを定義し、認証にはJNDIレルムを使用、同じJNDIリソースをStrutsデータソースでも利用できたりするとありがたいのですが。

どなたかよい方法を知っていれば教えてください。

[ メッセージ編集済み 編集者: カーニー 編集日時 2004-05-06 14:40 ]
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-05-06 20:24
ご存じだとは思いますがstruts側でのデータソース、JNDIは推奨されていませんので、tomcatなどコンテナ側でのJNDIやプーリングを行うように変更した方が良いと思います。
どうしても Action#getDataSource() を利用したいというのであれば、Actionのサブクラスを作成してオーバーライドするというのはいかがでしょうか。うまくいきますかねえ(^^;
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-05-06 23:49
Action.java を見ると、getDataSource() は ServletContext から
DataSource を getAttribute() してるだけです。

という事で、それを予め setAttribute() しておくだけ、
などという簡単な対応では無理っぽいでしょうか。
例えば PlugIn を実装し、init() 内でそれを行うとか。

しかしこれだと ActionServlet#findDataSource() には
間違い無く対応出来ない。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-05-07 13:08
aaさん、はしもとさん、ご返答どうもありがとうございます。

引用:

aaさんの書き込み (2004-05-06 20:24) より:
ご存じだとは思いますがstruts側でのデータソース、JNDIは推奨されていませんので、tomcatなどコンテナ側でのJNDIやプーリングを行うように変更した方が良いと思います。



確かにマニュアルにはそう書いてあるんですが、何か理由があって結局Strutsのデータソースマネージャを使うことにしたんですよね・・・理由が思い出せない。
思い出せないってことは大した理由じゃなかったのかな・・・。

うーん、規模も小さいアプリケーションだし、書き直しちゃおうかなー。

それにstruts-config.xmlに定義を書くのって、最終的にアプリケーションをwarファイルで配布することを考えるといまいちだったんですよね。
配布先でwarを解凍した後にstruts-config.xmlを編集しないといけない点が。

今回はコードを書き直す方向で考えたいと思います。
アドバイスどうもありがとうございました。
1

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