このページで解決しない高度なJavaのシステム障害はJaTSにお任せください

Trouble 17: Seasar2に関する問題



<Q17-1>S2DaoMaker(Ver0.5以前)で数百以上のテーブルに対してDAOを作成すると、コンポーネントの取得に時間がかかります。

数百以上のテーブルを使用するシステムを開発しています。

画面遷移に2~8秒もかかるので、解析したところ、DAO、Logic、Action等、アプリケーション側では遅れはなく、S2のフレームワーク側が問題の様です。

何が原因なのでしょうか?
また、どのような対処方法があるでしょうか?

<発生環境>
OS Any
JDK Any
Vender Sun
Seasar2 S2Container2.3.7
<A17-1>
S2Container2.3.7以前では、diconファイルを細かくincludeで分割しすぎると、コンポーネントの検索が線形検索に近い状態で処理されるためです。

今回は、S2DaoMakerを使用しているので、1つのdiconに1つのコンポーネントを定義し、それらをincludeするような構成になり、パフォーマンスが劣化します。

対処方法として、1つの dicon になるべく多くのcomponent定義を記述し、アプリケーション全体の diconファイル/include 定義が少なくなるようにすると、改善されます。

例えば、次の条件で定義を行う場合を考えます。

・app.diconに100個のdiconを定義し、各dicon内でalldao.diconをincludeしている。
・alldao.diconでは200個のdiconを定義し、各dicon内にDaoが定義している。

すると、以下のようなdicon構成になります。
 app.dicon
 ├─alpha1.dicon
 │  └─alldao.dicon
 │      ├─mydao1.dicon       <--- 1回目の検索
 │      │  └─MyDao1
 │      ├─mydao2.dicon       <--- 2回目の検索
 │      │  └─MyDao2
 │      │   ・
 │      │   ・
 │      │   ・
 │      └─mydao200.dicon     <--- 100回目の検索
 │          └─MyDao200
 ├─alpha2.dicon
 │  └─alldao.dicon
 │    ・
 │    ・
 │    ・
 └─alpha101.dicon             <--- 20001回目の検索
     └─<検索対象Component>
 ※図の順でdiconファイルに記述されているものとします。
 ※分かりやすさのため、末端のdiconでの検索のみを数えています。
この構成で<検索対象Component>を検索すると、alldao.dicon内のdiconに対して20000(=100×200)回もの検索処理が実行された後、<検索対象Component>を発見します。

dicon定義を修正し、以下のようにalldao.dicon内で直接200個のDaoを定義することで、20001回の検索処理が101回になります。

 app.dicon
 ├─alpha1.dicon
 │  └─alldao.dicon           <--- 1回目の検索
 │      ├─MyDao1
 │      ├─MyDao2
 │      │    ・
 │      │    ・
 │      │    ・
 │      └─MyDao200
 ├─alpha2.dicon
 │  └─alldao.dicon           <--- 2回目の検索
 │    ・
 │    ・
 │    ・
 └─alpha101.dicon             <--- 101回目の検索
     └─<検索対象Component>
 ※図の順でdiconファイルに記述されているものとします。
 ※分かりやすさのため、末端のdiconでの検索のみを数えています。

Page Top

注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
Acroquest Technology 株式会社は一切関知いたしません。

  • 現象別Index
  • 原因別Index

Find Bugsバグ詳細

Find Bugs Bug Descriptions日本語版

RSSで更新情報を取得する

RSSとは、ホームページの更新情報を配信する為のフォーマットです。
RSSを利用すると、登録したページの情報が更新された場合に、更新情報を自動的に受け取る事ができます。

詳細

弊社小森が執筆致しました

Javaでオブジェクト指向開発

Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。
本書は、Javaのソフトウェア開発を中心に事業を発展させてきたAcroquest社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。

メールマガジン配信中

Javaトラブルシューティングのメルマガをはじめました!是非ご購読ください

詳細