JavaTM Platform
Standard Ed. 6

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

メソッドの概要
 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 で引き続き検索が行われます。この ClassLoader も例外をスローした場合、このメソッドは例外をスローします。リストの末尾に達した場合、ClassNotFoundException がスローされます。

パラメータ:
className - ロードされるクラスの名前
戻り値:
ロードされたクラス
例外:
ClassNotFoundException - 指定されたクラスが見つからない場合

loadClassWithout

Class<?> loadClassWithout(ClassLoader exclude,
                          String className)
                          throws ClassNotFoundException
 

クラスローダーのリストから、前回指定された名前のクラス以外のクラスをロードします。exclude を除く ClassLoaderRepository 内の ClassLoader に、ClassLoader.loadClass(String) メソッドを使ってクラスをロードせよという命令が送られます。その結果、正常に Class オブジェクトが返された場合、これがこのメソッドの戻り値になります。ClassNotFoundException がスローされた場合、次の ClassLoader で引き続き検索が行われます。この 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 で引き続き検索が行われます。この ClassLoader も例外をスローした場合、このメソッドは例外をスローします。検索が stop またはリストの末尾に達した場合、ClassNotFoundException がスローされます。

 

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

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

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。