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