/* * Copyright 2004-2007 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.unit; /** * {@link org.seasar.extension.unit.S2TestCase S2TestCase} を使用した単体テスト等で使用する * {@link ClassLoader クラスローダ} です。 *

* アスペクトが適用されたクラスを大量に使用するテストを連続して実行する際に、 {@link OutOfMemoryError} * の頻発を回避する目的で使用します。 *

*

* クラスは通常、 システムクラスローダによりVMのパーマネント領域にロードされますが、 新たにクラスをロードする領域がなくなると、 * OutOfMemoryError が発生します。 S2TestCase では、 * テストメソッド毎に、 このUnitClassLoader を生成、使用、消滅させることにより、 * アスペクトが適用されたクラスがGCされることで、パーマネント領域が不足する問題を回避しています。 *

*

* このUnitClassLoaderでは{@link ClassLoader#loadClass(String)}の実装がないため、親クラスローダーに移譲します。 * そのため、loadClass(String)を経由する通常のクラスはUnitClassLoader自身ではロードされず、親クラスローダーでロードされることになります。 * アスペクトが適用されたクラスはloadClass(String)を経由をしないため、このUnitClassLoaderにロードされます。 * このような仕組みでアスペクトが適用されたクラスのみをロードするようになっています。 *

* * @author higa * @author belltree * @author goto * * @see S2FrameworkTestCase */ public class UnitClassLoader extends ClassLoader { /** * @param parent * 親となるクラスローダ */ public UnitClassLoader(ClassLoader parent) { super(parent); } }