[Seasar-user:17625] Re: [S2Container] ソースが多くなった時の開発

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 4日 (木) 20:20:20 JST


小林 (koichik) です.

Date:    Thu, 04 Jun 2009 19:41:45 +0900
From:    松崎 学 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17624] [S2Container] ソースが多くなった時の開発

> 複数サブシステムを1つのwarファイルにまとめている為、
> ソースが多くなってきて、画面遷移がものすごく遅くなってきてしまいました。
> Daoが現在260個近くあり、これが毎回HotDeployされています。

本来 HOT deploy では必要になったコンポーネントのみ
インスタンス化されるので,システムに Dao が何千個
何万個あろうとも,アクセスされた画面の処理で
使われる Dao が少なければ極端に遅くなることは
ないはずです.

おそらく,どんな画面からも使われる,多くの Dao に
依存する巨大なクラスがあるなど,実際には不要な
コンポーネントまでインスタンス化されるような
構成になっているのではないでしょうか?

画面にアクセスした際にコンソールに出力される
「コンポーネントを登録しました」のメッセージを
確認して,余計なコンポーネントがインスタンス化
されていないか確認してみてください.
# 開発がある程度進んでいるなら,今更それを
# 見直すのは難しいかもしれませんが.

> プロジェクトを共通部分やサブシステム単位に分割して、
> jarファイル化すると早くなりますか?

Seasar2.4.35 以降で,Jar に分割したパッケージを
HOT deploy 非対象として convention.dicon に記述すれば
効果があります.
そのためには,<addRootPackage> の第 2 引数を false に
します.

<initMethod name="addRootPackageName">
  <arg>"xxx.yyy.zzz"</arg>
  <arg>false</arg><!-- HOT deploy 非対象 -->
</initMethod>


実際の開発では画面遷移の度に HOT deploy で
コンポーネントを作成し直す必要はないことが多い
はずなので,Seasar2.4.35 以降にバージョンアップして
以下の機能を試してみてはいかがでしょうか.

https://www.seasar.org/issues/browse/CONTAINER-352
http://www.seasar.org/wiki/index.php?SeasarUpdateOperationLog#j39e75d1

この場合,以下のアドレスにアクセスするタイミングでのみ
HOT deploy されるようになるので,ソースの修正&ビルドを
行ったタイミングで (別ウィンドウまたはタブを用意して)
このアドレスにアクセスするようにすれば,そこそこ快適に
なるかもしれません.

http://<host>/<context>/<servlet>/hotdeploy?mode=manual


また,Dao の初期化に時間がかかっているのだとしたら,
S2Dao の初期化で DBMS にメタデータを取りに行っていないか
確認してみてください.



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