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