[Seasar-user:18352] Re: [SAStruts] Tomcat起動時のDB接続について

Hiroshi Ogawa [E-MAIL ADDRESS DELETED]
2009年 8月 21日 (金) 01:55:41 JST


小川です。

小林様、回答ありがとうございました。

> HOT deploy においてはコンテナ初期化時に
> コンポーネントの自動登録を行わないため
> (リクエスト時にオンデマンドで行われます),
> FooService がコンポーネントとして存在して
> いないことになります.

上記についてですが、最初はご指摘の通り、HogeSingletonを
app.diconからインクルードしたファイルに定義していたため、
HogeSingletonで以下のように記述しても Tomcat 起動時に
DIされませんでした。

@Resource
protected FooService fooService;

ただ、app.diconにHogeSingletonを定義した場合は  Tomcat 起動時に
fooService がDIで設定されました(HOT deploy, COOL deployともに)。
fooService は dicon ファイルに定義を記述していません。

COOL deploy ではDIされると思うのですが、HOT deploy でも
DIが行われた理由がわかりますでしょうか・・・?

また、もしHOT deploy時でもServiceが設定されるならば、
Serviceをこれまでどおり SMART deploy の対象にして、
さくさく開発の恩恵を得られるようにしたいと思っています。
ただ、非推奨な方法だと思いますので、何か懸念事項があれば
教えていただけますでしょうか。
(ClassCastException の発生ぐらいでしょうか?であれば
事前に検証しておけば問題ないかなと思っていますが・・・)


また、少し話はそれますが、Seasar 2.4.17以降では publicフィールドを定義しておけば
自動的にDIが行われるということですので、

public FooService fooService;

としてもDIされると思います(実際されました)。

Action では通常 @Resource + protected で Service を定義する
と思うのですが、これは public フィールドにすると JSP からも参照できて
しまうため都合が悪いから、という理解でよろしいでしょうか?

よろしくお願いします。


2009/08/20 2:30 に Koichi Kobayashi<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 小林 (koichik) です.
>
> Date:    Thu, 20 Aug 2009 00:58:14 +0900
> From:    Hiroshi Ogawa <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:18335] [SAStruts] Tomcat起動時のDB接続について
>
>> ・Tomcat起動時にDBアクセスをServiceを使って行うためには、
>> どのような方法をとるべきでしょうか?それとも起動時にServiceを使うことは
>> できないでしょうか?
>
> その Service も SMART deploy 非対象として
> 作成し,dicon に登録すれば可能です.
> というか,それがオススメです.
>
>> ・上記の設定でfooServiceがDIされない理由はどういったものでしょうか?
>> app.diconから2つのdiconをインクルートした場合、一方からもう一方で
>> 定義されているコンポーネントをDIできない?ことと同じような理由でしょうか?
>
> 記載された情報だけでは判断できませんが,
> HOT deploy においてはコンテナ初期化時に
> コンポーネントの自動登録を行わないため
> (リクエスト時にオンデマンドで行われます),
> FooService がコンポーネントとして存在して
> いないことになります.
>
> COOL deploy ではコンテナ初期化時に自動登録
> されるので,FooService もコンポーネントとして
> 存在します.
> その場合は,HogeSingleton が app.dicon ではなく,
> インクルードされる dicon に定義されていることが
> 考えられます.
> SMART deploy  で自動登録されるコンポーネントは
> ルートのコンテナ (app.dicon) に登録されるので,
> そこからインクルードされる dicon に定義された
> コンポーネントからは自動登録されたコンポーネントは
> 不可視です.
>
>
> --
> <component name="koichik">
>    <property name="fullName">"Koichi Kobayashi"</property>
>    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内