[seasar-javadoc:957] Re: UnitClassLoader
Hideaki Suzuki
[E-MAIL ADDRESS DELETED]
2007年 7月 7日 (土) 14:40:00 JST
鈴木(belltree)です。
せとあずさ女史(?)、小林さん レスありがとうございます m(_ _)m
【使用目的】
> > 【使用目的(私的見解)】
> > クラスがロードされていない、無垢な状態でユニットテストを実行したい
> > 場合に使用する。
> > ※staticフィールドに前の値が残ってるとテストにならない場合とか?
>
> これは,せとあずさ女史の言うとおりで,JUnit を
> 使った単体テストで AOP を適用したクラスが大量に
> システムクラスローダにロードされるとパーマネント
> 領域が不足して OutOfMemoryError が頻発するのを
> 回避するのが目的です.
なるほど〜! そういうことですか!!!
懇切丁寧なご説明、ありがとうございます♪♪♪
個人的に、上の説明を、クラス説明部分に入れたいですね〜。
私レベルの人がJavadocを読んだ時に、勉強にもなるし…
このクラスを一般のアプリ開発ユーザーが直接使用することは稀にしても、
Seasarファミリープロダクツの開発者が、テストで使用する可能性はあるし…
(事実、S2Tigerのテストケースなどで使用されている※1)
ただ、Seasar Javadoc の基本方針は、Simple is Best と認識しているので、
意見の分かれるところかも…
※1
org.seasar.framework.unit.S2TestMethodRunner
org.seasar.framework.jpa.impl.PersistenceClassTransformerImplTest
> > ぶっちゃけ、「java.lang.ClassLoaderがAbstractなので、テストする時に、
> > 直接インスタンス化できるClassLoaderはないんかい!」
> > というのが、このクラスの生まれた真の理由?
>
> インスタンス化できるクラスローダとしては
> URLClassLoader があります.
> でも,あれは自分でクラスパスを持ってて,クラスを
> 見つけてロードしちゃうんですよね.
> UnitClassLoader は自分でクラスを見つける必要はないという
> 非常に特殊なクラスローダなのです.
なるほど〜。ClassLoaderの実装は、通常、ロードするクラスの場所に
関する情報を持つものなのですね。確かに、"ローダー"ですもんね…^ ^;;;
S2AOPを使用するとJavassistでアスペクトが適用されたクラスを
カレントスレッドのクラスローダーにプログラマちっくにロードするので、
ロード元クラスに関する情報は不要であると…ゆうことですね(自信15%)。
<余談ですけど…>
このクラスと同じ構成のクラスが、sun-jdkのsunパッケージにありました。
sun.reflect.DelegatingClassLoader
中身はこれだけ
package sun.reflect;
class DelegatingClassLoader extends ClassLoader
{
DelegatingClassLoader(ClassLoader classloader) {
super(classloader);
}
}
※JADりました。ちなみにjdk-1.5.0._06。
このクラスの使用目的も気になるところではありますが…
今日は天気がいいので(?)この辺で♪
…間違いない! 余談だ!
【わたくし事】
> > org.seasar.framework.unit.UnitClassLoaderにサインアップしました。
>
> お,完全復活ですね♪
恥ずかしながら、生きながらえて帰ってまいりました♪ (- -)ヾ
> > …もう遅いので、今日はこの辺で… 明日(今日)起きられるのか?(⇒ 自分 orz)
>
> 起きられたのでしょうか? (^^;
結局、起きっぱなしでした … ^ ^;ヾ
( お昼寝が長くなってすみません ⇒ 現場の皆さん )
/**
* @auther Hideaki Suzuki
* @contact [E-MAIL ADDRESS DELETED]
*/
seasar-javadoc メーリングリストの案内