[seasar-javadoc:980] Re: UnitClassLoader

Hideaki Suzuki [E-MAIL ADDRESS DELETED]
2007年 7月 27日 (金) 03:32:54 JST


鈴木(belltree)です。

文章にするとゴチャっとして、ポイントがつかみづらくなるかも…
…という個人的な考えに基づき、時系列で箇条書き風にして
通常のTestCaseとS2TestCaseの場合の比較という形で、
整理してみました。

構成としては、冒頭に、簡潔なまとめの文章を置いて、その後に、
下記の通常のTestCaseの場合と、S2TestCaseの場合の比較
という配置にすると、分かりやすいような気がするのですが…
いかがでしょう?

あ、ちなみに、場当たり的な思いつきなので 「ありえない!」 という場合も
ぜひ突っ込んで下さい m(_ _)m

>  * {@link org.seasar.extension.unit.S2TestCase}では、 テストメソッド毎に{@link org.seasar.framework.container.S2Container S2コンテナ}を生成してアスペクトを適用したクラスをクラスローダにロードします。
>  * ここで、 テストメソッドが終了してもテストケースが終了していない場合、
>  * アスペクトを適用したクラスはクラスローダにロードされたまま次のテストメソッドを実行することになります。
>  * このままでは新たにクラスをロードする領域がなくなる恐れが発生するため、 実際の{@link org.seasar.extension.unit.S2TestCase}では、
>  * テストメソッド毎にカレントクラスローダを親とする<code>UnitClassLoader</code>を生成し、
>  * アスペクトを適用したクラスをこのクラスローダにロードさせます。 テストメソッド終了後はその<code>UnitClassLoader</code>自体をアンロードするため、アスペクトを適用したクラスも一緒にアンロードされることになります。

■通常のJUnitのTestCaseを使用する場合のシナリオ
1.クラスローダーとして、システムクラスローダーが使用される。
2.アスペクトを適用したクラスがパーマネント領域にロードされる。
3.次々とテストメソッドを実行する際、クラスがパーマネント領域に溜まってゆく。
4.パーマネント領域が満杯になるとOutOfMemoryErrorが発生する。

■S2TestCaseを使用する場合のシナリオ
1.テストメソッド実行前に、空のクラスローダーが用意される。(UnitClassLoader)
2.アスペクトを適用したクラスがUnitClassLoaderのパーマネント領域にロードされる。
  ※パーマネント領域がクラスローダー毎に用意されるのかどうか未調査です…
3.テストメソッドが終了するとロードされたクラスは、UnitClassLoaderのアンロードに伴い除去される。
4.パーマネント領域は、テストメソッド実行前の状態に戻る。

宜しくお願いします。。。

/** 
 * @auther Hideaki Suzuki
 * @contact [E-MAIL ADDRESS DELETED]
 */



seasar-javadoc メーリングリストの案内