-
public interface ClassLoaderRepository
このインタフェースのインスタンスは、MBeanサーバーに登録されたClassLoaderのリストを保持するために使用されます。 これらのインスタンスは、登録済みClassLoaderを使ってクラスをロードするために必要なメソッドを提供します。
ClassLoaderRepository
内の最初のClassLoaderは、常にMBeanサーバー固有のClassLoaderです。ClassLoader
のサブクラスになっておらず、PrivateClassLoader
インタフェースを実装していないMBeanをMBeanサーバーに登録すると、このMBeanは、MBeanサーバーのClassLoaderRepository
の末尾に追加されます。 このMBeanの登録を解除すると、ClassLoaderRepository
からこのMBeanが削除されます。ClassLoaderRepository
内のMBeanの並び順には意味があります。ClassLoaderRepository
内の任意の2つのMBean、XとYについて考えてください。Yの登録を開始する前にXの登録が完了していた場合、XはYの前に並べられます。 XとYが並行して登録された場合、これらの並び順は不確定になります。 MBeanの登録処理は、MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)
メソッドの呼び出し、またはいずれかのMBeanServer
.createMBean
メソッドの呼出しに相当します。- 導入されたバージョン:
- 1.5
- 関連項目:
MBeanServerFactory
-
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド 修飾子と型 メソッド 説明 Class<?>
loadClass(String className)
クラス・ローダーのリストから、指定された名前のクラスをロードします。Class<?>
loadClassBefore(ClassLoader stop, String className)
クラス・ローダーのリストからクラスをロードし、指定されたクラス名の位置で処理を停止します。Class<?>
loadClassWithout(ClassLoader exclude, String className)
クラス・ローダーのリストから、前回指定された名前のクラス以外のクラスをロードします。
-
-
-
メソッドの詳細
-
loadClass
Class<?> loadClass(String className) throws ClassNotFoundException
クラス・ローダーのリストから、指定された名前のクラスをロードします。 ClassLoaderRepository内のClassLoaderに、
ClassLoader.loadClass(String)
メソッドを使ってクラスをロードせよという命令が送られます。 その結果、正常にClass
オブジェクトが返された場合、これがこのメソッドの戻り値になります。ClassNotFoundException
がスローされた場合、次のClassLoaderで引き続き検索が行われます。 それがさらに別の例外をスローした場合、このメソッドは例外をスローします。 リストの末尾に達した場合、ClassNotFoundException
がスローされます。- パラメータ:
className
- ロードされるクラスの名前。- 戻り値:
- ロードされたクラス。
- 例外:
ClassNotFoundException
- 指定されたクラスが見つからない場合。
-
loadClassWithout
Class<?> loadClassWithout(ClassLoader exclude, String className) throws ClassNotFoundException
クラス・ローダーのリストから、前回指定された名前のクラス以外のクラスをロードします。 ClassLoaderRepository内のClassLoader (
exclude
以外)に、ClassLoader.loadClass(String)
メソッドを使ってクラスをロードせよという命令が送られます。 その結果、正常にClass
オブジェクトが返された場合、これがこのメソッドの戻り値になります。ClassNotFoundException
がスローされた場合、次のClassLoaderで引き続き検索が行われます。 それがさらに別の例外をスローした場合、このメソッドは例外をスローします。 リストの末尾に達した場合、ClassNotFoundException
がスローされます。ClassLoaderRepository内に、このメソッドを
loadClass
メソッドから呼び出すClassLoaderがあるとします。同じClassLoaderRepository内に、このClassLoaderと同時に同じ処理を行うClassLoaderがもう1つ存在する場合、デッドロックになります。 デッドロックを回避するためには、loadClassBefore(java.lang.ClassLoader, java.lang.String)
メソッドを使用することをお薦めします。- パラメータ:
className
- ロードされるクラスの名前。exclude
- 除外されるクラス・ローダー。 nullの場合、このメソッドはloadClass(className)
と等価になる。- 戻り値:
- ロードされたクラス。
- 例外:
ClassNotFoundException
- 指定されたクラスが見つからない場合。
-
loadClassBefore
Class<?> loadClassBefore(ClassLoader stop, String className) throws ClassNotFoundException
クラス・ローダーのリストからクラスをロードし、指定されたクラス名の位置で処理を停止します。 ClassLoaderRepository内のClassLoaderに、
ClassLoader.loadClass(String)
メソッドを使ってクラスをロードせよという命令が送られます。 その結果、正常にClass
オブジェクトが返された場合、これがこのメソッドの戻り値になります。ClassNotFoundException
がスローされた場合、次のClassLoaderで引き続き検索が行われます。 それがさらに別の例外をスローした場合、このメソッドは例外をスローします。 検索がstop
またはリストの末尾に達した場合、ClassNotFoundException
がスローされます。通常、このメソッドは、
stop
のloadClass
メソッドから呼び出されます。これにより、ClassLoaderRepository
内の指定のローダーより前のローダーを照会することができます。stop
に達した時点で検索が終了するので、並行クラス・ロードによるデッドロックを回避することができます。- パラメータ:
className
- ロードされるクラスの名前。stop
- クラス・ローダー。この位置で処理が停止される。 nullの場合、このメソッドはloadClass(className)
と等価になる。- 戻り値:
- ロードされたクラス。
- 例外:
ClassNotFoundException
- 指定されたクラスが見つからない場合。
-
-