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メソッドの呼出しに相当します。
MBeanServerFactory| 修飾子と型 | メソッドと説明 |
|---|---|
Class<?> |
loadClass(String className)
クラス・ローダーのリストから、指定された名前のクラスをロードします。
|
Class<?> |
loadClassBefore(ClassLoader stop, String className)
クラス・ローダーのリストからクラスをロードし、指定されたクラス名の位置で処理を停止します。
|
Class<?> |
loadClassWithout(ClassLoader exclude, String className)
クラス・ローダーのリストから、前回指定された名前のクラス以外のクラスをロードします。
|
Class<?> loadClass(String className) throws ClassNotFoundException
クラス・ローダーのリストから、指定された名前のクラスをロードします。ClassLoaderRepository内のClassLoaderに、ClassLoader.loadClass(String)メソッドを使ってクラスをロードせよという命令が送られます。その結果、正常にClassオブジェクトが返された場合、これがこのメソッドの戻り値になります。ClassNotFoundExceptionがスローされた場合、次のClassLoaderで引き続き検索が行われます。それがさらに別の例外をスローした場合、このメソッドは例外をスローします。リストの末尾に達した場合、ClassNotFoundExceptionがスローされます。
className - ロードされるクラスの名前。ClassNotFoundException - 指定されたクラスが見つからない場合。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 - 指定されたクラスが見つからない場合。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 - 指定されたクラスが見つからない場合。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.