[Seasar-user:10207] Re: SMART deploy ルートパッケージを複数登録した場合の問題

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 8月 30日 (木) 03:00:16 JST


小林 (koichik) です.

Date:    Wed, 29 Aug 2007 23:58:19 +0900
From:    "溝口" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10198] SMART deploy ルートパッケージを複数登録した場合の問題

> SMART deployを使用し、ルートパッケージを複数登録した場合に、
> 同じ名前のインタフェイスを複数登録したいのですが、この際に、
> 先に登録したルートパッケージに存在するコンポーネントを取得すると、
> 正しく、先に登録したルートパッケージに存在するインタフェイスが
> 返ってきます。
> しかし、後で登録したルートパッケージに存在するコンポーネントを
> 取得すると、先に登録したルートパッケージに存在する、インタフェイス
> が返ってきてしまいます。

「取得すると」の意味がよく分からないのですが,
S2 の DI のことでしょうか?
DI といっても自動バインディングなのか
dicon ファイルに <property> 要素で指定を
しているのか,どちらでしょうか?

http://d.hatena.ne.jp/MIZOMIZO/20070828#1188302689

のスタックトレースを見る限りだと,

at org.seasar.framework.container.assembler.AbstractBindingTypeDef.setValue(AbstractBindingTypeDef.java:308)

自動バインディングでここに来ることは考えにくい
(この一つ下が 210 行目なら自動バインディング,
127 行目ならマニュアル) ので,

<property name="schemaVersionDao">schemaVersionDao</property>

のようになっているんじゃないかと思われますが,
これだとコンポーネントを名前で探すことになるので,
適切に DI することはできないと思います.
# あるいはプロパティに @Binding アノテーション
# または定数アノテーションを指定しているか.


> 当初、SMART deployを使用せず、ComponentAutoRegisterを使用していたのですが、
> クライアントのSWINGアプリの起動時間がかかるため、WARM deployを使おうと
> 考えまし。
略
> インタフェイス名を変更しなければならないでしょうか。それとも、なにか設定方法が
> 有りましたら、ご教示ください。

自動バインディングであれば,型でコンポーネントを
探すことができるので問題ないはずです.
# 試していませんが.

ただし,インタフェース名 (正確にはプロパティの
型名) は規約に従っている必要があります.

インタフェースの名前が規約に従っていれば,
最初にプロパティの型でコンポーネントを探しに
いくので,コンポーネント定義が作成されて
自動登録されます.

しかし,インタフェース名が規約に従っていないと
プロパティ名からコンポーネント定義を作成することに
なり,最初のルートパッケージで見つかるクラスしか
自動登録されなくなります.
この場合,最初のルートパッケージ以外は
型が合わないので DI されません.

そんなわけで (どんなわけで?),ルートパッケージ毎に
インタフェース名を変える必要はないと思いますが,
インタフェース名は規約に合っている必要があります.


-- 
<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 メーリングリストの案内