モジュール java.management
パッケージ javax.management.loading

インタフェースClassLoaderRepository



  • 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、XYについて考えてください。Yの登録を開始する前にXの登録が完了していた場合、XYの前に並べられます。 XYが並行して登録された場合、これらの並び順は不確定になります。 MBeanの登録処理は、MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)メソッドの呼び出し、またはいずれかのMBeanServer.createMBeanメソッドの呼出しに相当します。

    導入されたバージョン:
    1.5
    関連項目:
    MBeanServerFactory
    • メソッドの詳細

      • 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がスローされます。

        通常、このメソッドは、stoploadClassメソッドから呼び出されます。これにより、ClassLoaderRepository内の指定のローダーより前のローダーを照会することができます。 stopに達した時点で検索が終了するので、並行クラス・ロードによるデッドロックを回避することができます。

        パラメータ:
        className - ロードされるクラスの名前。
        stop - クラス・ローダー。この位置で処理が停止される。 nullの場合、このメソッドはloadClass(className)と等価になる。
        戻り値:
        ロードされたクラス。
        例外:
        ClassNotFoundException - 指定されたクラスが見つからない場合。