- - PR -
DataSourceの扱いについて
| 投稿者 | 投稿内容 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-05 17:52
違います。 ServletのinitメゾットはServletが呼ばれた初回のみ実効されるだけです。 ※destroyが実行されてインスタンスが破棄されれば、また実行されます。 [ メッセージ編集済み 編集者: taku 編集日時 2003-11-05 18:04 ] | ||||||||||||||||||||
|
投稿日時: 2003-11-05 18:03
そうでした。基本も忘れていました。すみません。
Servletのinit()で取得したdatasourceは どこに保持することになるのでしょうか。 ServletContext等ということになるのでしょうか。 そうした場合、とまとさんのご指摘の Web層とビジネスロジック層が密接になるのは datasourceのlookupを毎回行うよりは そうした方が良いということになるのでしょうか。 | ||||||||||||||||||||
|
投稿日時: 2003-11-05 22:01
こんばんは。
誰に対する誹謗中傷なのでしょうか?
逆に使ってはいけないのですか? BMP Entity Beanを作成する場合、 DataSourceをJNDIからlookupしてはいけないのでしょうか?
質問されていると認識しています。 毎回ルックアップするよりも、DataSourceを キャッシングする方がよいと思うけどどうなのだろうか? というのがぷかりんさんの質問内容ではないでしょうか?
initでやっても別に構いませんが、 必ずしもinitでやらなくてもよいのではないでしょうか? そもそもサーブレットを利用しないシステムでは どうするのでしょうか? ぷかりんさん自身が記述している方法ではだめなのでしょうか?
その資料に書かれているから、 サーブレットのinitでやるのが「普通」ということなのでしょうか? 以上 | ||||||||||||||||||||
|
投稿日時: 2003-11-05 22:28
こんばんは。
私の場合、社内のデータベースアクセスフレームワーク (OR Mapper)を使用したケースが多いため、 DataSourceを意識することはほとんどありませんでした。 何が「普通」で何が「普通でない」というのは ともかく、 もし私が同じ問題を解決するとしたら、 ぷかりんさんと同様な方法を取るように思います。 ただ、この方式でどれだけのパフォーマンスの向上になるのか、 また何か問題があるのかは正直わかりません。 しかし、こうやってデータベース接続を取得するインターフェイス を決めたり、局所化しておけば、問題が発生した場合、 他への影響が少なく、対処しやすいと思います。 以上です。 | ||||||||||||||||||||
|
投稿日時: 2003-11-05 23:02
お世話になっております。
私は、コネクションプーリングを管理するクラスを作成し、 そのクラスのstatic変数としてdatasourceを保持しています。 このクラスにはconnectなどのメソッドを準備しておき、 SQLを使用する際にはそのメソッド経由でConnectionを取得しています。 | ||||||||||||||||||||
|
投稿日時: 2003-11-06 01:47
IBM(伏字は必要はないですよね?)は、Servlet init での
キャッシングを薦めています。 http://www-6.ibm.com/jp/software/websphere/developer/bpz/13.html DataSource を動的に変更しなくてはならないシステムは極まれと 思われるので、正論かな。 | ||||||||||||||||||||
|
投稿日時: 2003-11-06 02:37
こんばんは
なるほど。 この記事を読むと、 Servletのinitメソッドはインスタンス化時に1回しか呼ばれないので DataSourceを取得し、キャッシングするタイミングとしては 良いという点を述べていて この点については全く異論はありません。 ただ、この情報だけでは、ぷかりんさんや私が疑問に思っている サーブレットで取得したDataSourceを どうやって業務ロジック層で利用するのかという点について フォーカスされていないように思います。 この記事だけを読むと サーブレットで取得したDataSourceを業務ロジック層に パラメータ渡しするのだろうと想像してしまいます。。。 また、ぷかりんさんが提示したような方法でも、 一度だけJNDIをlookupし、DataSourceをキャッシュする 仕組みを実現できているように思います。 こちらの方法がServletで初期化する方法と比較して よいと思うのは以下の点です。 ・サーブレットから業務ロジック層にDataSourceを パラメータ渡しする必要がない。 サーブレットは、業務ロジック層がどのような永続化を 利用しているか全く関与する必要がない。 ・例えば、Torqueなどの別の永続化機構に変更するような場合、 Web層に影響を与えない。 ・複数のサーブレットを利用し、それぞれのinitメソッドでDataSourceを 取得する場合、コードが散在化する可能性がある。 ※サーブレットのinitメソッドで、ぷかりんさんが提示されたようなクラスの 初期化コードを実行するようなケースはぷかりんさんの提示されたクラスを 利用することに該当するという認識です。 以上です。 | ||||||||||||||||||||
|
投稿日時: 2003-11-06 09:14
おはようございます。
皆様、貴重なご意見を有難うございます。 私が危惧していましたのは、lookupを毎回 行うことによる、実装の重複や、パフォーマンス が悪くなるのではないかということでした。 皆様のご意見をお聞きしまして、やはり 毎回lookupするのはパフォーマンス的に 良くないのではないかと思いました。 各プログラムを作成する人たちがDataSource を意識しなくてもよくなるようにも、なんらか のクラスでラップする方向で行きたいと思います。 ありがとうございました。 | ||||||||||||||||||||
