かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

サーブレット対応を入れてみた

開発中のDIコンテナですが、サーブレット対応を入れてみました。他にも色々フィックス中ですが・・・

リクエストやらレスポンスやらを受け取るセッターメソッドやらコンストラクタがある場合にインジェクションもできますし、コンテナ内のインスタンスをリクエストやセッションにバインドできます。

他のDIコンテナではインスタンスのライフサイクルがリクエストやセッションも対応していたりしていますが、コンテキストにも対応させました。さらにそれぞれのライフサイクルの終了に合わせて、自動的に破棄処理も可能です。

例えばトランザクションをリクエストから取得するときに開始して、リクエストが終了するときにコミットするというような事が、特にフィルタ等がなくても可能です。

DIコンテナを使うケースってどうしてもJ2EEの世界になってしまうので、今後トランザクションのサポートやJDBCのサポートも欲しいところですが、Spring Framework同様に自前では実装を持つ気はありません。グローバルトランザクションの実装って恐ろしく大変なんで、多分JOTM辺りを使う事になりそうです。

投稿日時 : 2007年9月11日 1:38

Feedback

# re: サーブレット対応を入れてみた 2007/09/11 11:39 凪瀬

おや。
ひっそりと開発を進められていたのですねw

> コンテナ内のインスタンスをリクエストやセッションにバインドできます
doGet()などでServletRequest#getAttribute()でDI管理されているオブジェクトが取得できるのですか?

トランザクション関連は既存のものを流用するのが吉でしょうねぇ。

# re: サーブレット対応を入れてみた 2007/09/11 12:06 かつのり

内部実装を言うと取得は出来ますが、
実際のところライフサイクル管理用としか使われていません。

内部実装では、getAttributeして取得できなければ生成して保持、
取得できればそのままという感じです。
同一のスコープ内でのシングルトンをイメージすると分かりやすいかも。

でもgetAttributeで取得できるようにするのは面白いかもしれないですね。
でもオブジェクトの管理の単位が、名前空間+IDで一意になるので、ちと厳しいかも。

IDや名前空間の禁則文字をサポートさせようかな。
¥マークを禁止にして、名前空間とIDの区切りにすればよいかも。

# re: サーブレット対応を入れてみた 2007/09/11 12:50 凪瀬

名前が衝突するだろうけど、どうやっているのかなぁと思ってたのですが。

近年では生のServletを作る機会は減りましたから、ServletRequestあたりから取得できないと不便だと思ったのですよ。
JSPでの利用も視野に入れておかないといけないし。

名前の衝突さえ対応できれば、FilterとかでServletRequestのProxy作れば簡単にできるんですけどね。

# re: サーブレット対応を入れてみた 2007/09/11 13:27 かつのり

Spring辺りだとBeanに複数名前とIDという組み合わせで管理されていますね。
Seasar2はユニークな名前だったかな。

こっちのは名前空間+IDでユニークになるようにしているので、
[ID]@[Namespace]見たいな感じで各スコープに格納するといいかも。

# AXxBVKzFiGPkLlohQ 2011/12/22 22:20 http://www.discreetpharmacist.com/fre/index.asp

I was looking for the report in Yandex and suddenly came across this page. I found a little information on my topic of my report. I would like more, and thanks for that..!

# czJOdNoZXt 2012/01/04 6:26 http://www.kosherbeefjerky.com/

Mg90Q7 Informative, but not convincing. Something is missing but what I can not understand. But I will say frankly: bright and benevolent thoughts!...

タイトル
名前
Url
コメント