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