JavaTM 2 Platform
Standard Ed. 6

javax.management.loading
類別 MLet

java.lang.Object
  繼承者 java.lang.ClassLoader
      繼承者 java.security.SecureClassLoader
          繼承者 java.net.URLClassLoader
              繼承者 javax.management.loading.MLet
所有已實作的介面:
Externalizable, Serializable, MLetMBean, MBeanRegistration
直接已知子類別:
PrivateMLet

public class MLet
extends URLClassLoader
implements MLetMBean, MBeanRegistration, Externalizable

允許實例化和註冊來自遠端 URL 的 MBean 伺服器中一個或幾個 MBean。M-let 是管理 applet 的捷徑。m-let 服務通過載入一個 m-let 文本檔案來實作此功能,該文本檔案指定了要獲取的 MBean 上的資訊。每個 MBean 上的資訊都是在某個標記的單個實例中指定的,該標記稱為 MLET 標記。m-let 文本檔案的位置由 URL 指定。

MLET 標記具有以下語法:

<MLET
CODE = class | OBJECT = serfile
ARCHIVE = "archiveList"
[CODEBASE = codebaseURL]
[NAME = mbeanname]
[VERSION = version]
>
[arglist]
</MLET>

其中:

CODE = class
此屬性指定了要獲取的 MBean 的 Java 類別的全名,包括套件名稱。編譯後的 MBean 的 .class 檔案必須包含在 ARCHIVE 屬性指定的 .jar 檔案中。CODEOBJECT 必須存在。
OBJECT = serfile
此屬性指定了 .ser 檔案,該檔案包含要獲取的 MBean 的序列化表示形式。此檔案必須包含在 ARCHIVE 屬性指定的 .jar 檔案中。如果 .jar 檔案包含目錄層次結構,則需要指定此層次結構中的檔案路徑。否則將找不到比對項。CODEOBJECT 必須存在。
ARCHIVE = "archiveList"
此屬性是必需的,它指定了一個或多個 .jar 檔案,這些檔案包含要獲取的 MBean 使用的 MBean 或其他資源。.jar 檔案之一必須包含 CODEOBJECT 屬性所指定的檔案。如果 archivelist 套件含多個檔案: archivelist 中的所有 .jar 檔案必須存儲在程式碼基 URL 指定的目錄中。
CODEBASE = codebaseURL
此可選屬性指定了要獲取的 MBean 的程式碼基 URL。它標識了包含 ARCHIVE 指定的 .jar 檔案的目錄。僅當 .jar 檔案與 m-let 文本檔案不在同一目錄中時,指定此屬性。如果不指定此屬性,則使用 m-let 文本檔案的基本 URL。
NAME = mbeanname
當 m-let 已註冊 MBean 實例時,此可選屬性指定了要分派給 MBean 實例的物件名稱。如果 mbeanname 以冒號字元 (:) 開始,則物件名稱的域部分是 MBean 伺服器的預設域,可由 MBeanServer.getDefaultDomain() 返回。
VERSION = version
此可選屬性指定了要獲取的 MBean 版本號和關聯的 .jar 檔案。此版本號可用於指定從伺服器載入 .jar 檔案,以便在下次調用 m-let 文本檔案時更新存儲在本地快取記憶體中的檔案。version 必須是一系列非負的十進制整數,每個整數都通過句點與它前面的整數隔開。
arglist
此可選屬性指定了將被實例化的 MBean 的一個或多個參數的列表。此列表描述了要傳遞給 MBean 的建構子的參數。使用以下語法指定 arglist 中的每一項:

<ARG TYPE=argumentType VALUE=value>

其中:

參數列表中的參數型別應為 Java 基本型別(java.lang.Boolean、java.lang.Byte、 java.lang.Short、java.lang.Long、java.lang.Integer、java.lang.Float、java.lang.Double 和 java.lang.String)。

當載入一個 m-let 文本檔案時,創建並註冊該檔案中所指定的每個 MBean 的實例。

m-let 服務擴展了 java.net.URLClassLoader,可以用它載入代理的 VM 中的遠端類別和 jar 檔案。

注意 - MLet 類別載入器使用 MBeanServerFactory.getClassLoaderRepository(javax.management.MBeanServer) 來載入在已載入 jar 檔案中找不到的類別。

從以下版本開始:
1.5
另請參見:
序列化表格

建構子摘要
MLet()
          使用預設的代理父類別載入器建構新的 MLet。
MLet(URL[] urls)
          使用預設的代理父類別載入器為指定的 URL 建構新的 MLet。
MLet(URL[] urls, boolean delegateToCLR)
          使用預設的代理父類別載入器為指定的 URL 建構新的 MLet。
MLet(URL[] urls, ClassLoader parent)
          為給定的 URL 建構新的 MLet。
MLet(URL[] urls, ClassLoader parent, boolean delegateToCLR)
          為給定的 URL 建構新的 MLet。
MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
          為指定的 URL、父類別載入器和 URLStreamHandlerFactory 建構新的 MLet。
MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory, boolean delegateToCLR)
          為指定的 URL、父類別載入器和 URLStreamHandlerFactory 建構新的 MLet。
 
方法摘要
 void addURL(String url)
          將指定的 URL 追加到 URL 列表中,以便搜尋類別和資源。
 void addURL(URL url)
          將指定的 URL 追加到 URL 列表中,以便搜尋類別和資源。
protected  URL check(String version, URL codebase, String jarfile, MLetContent mlet)
          當擴展此服務來支持快取記憶體和版本控制時,要覆寫此方法。
protected  Class<?> findClass(String name)
          這是要重新定義的類別載入器的主要方法。
protected  String findLibrary(String libname)
          返回本機資源庫的絕對路徑名稱。
 String getLibraryDirectory()
          獲取資源庫載入器在將本機資源庫載入到記憶體中之前用於存儲這些本機資源庫的當前目錄。
 Set<Object> getMBeansFromURL(String url)
          載入一個套件含 MLET 標記的文本檔案,這些標記定義了要添加到 MBean 伺服器的 MBean。
 Set<Object> getMBeansFromURL(URL url)
          載入一個套件含 MLET 標記的文本檔案,這些標記定義了要添加到 MBean 伺服器的 MBean。
 URL[] getURLs()
          返回用於載入類別和資源的 URL 搜尋路徑。
 Class<?> loadClass(String name, ClassLoaderRepository clr)
          如果在此 MLet 的 URL 中找不到某個類別,則使用給定的 ClassLoaderRepository 載入該類別。
 void postDeregister()
          允許 m-let 在已從 MBean 伺服器註銷之後執行任何所需要的操作。
 void postRegister(Boolean registrationDone)
          允許 m-let 在已註冊到 MBean 伺服器之後或註冊失敗之後執行任何所需要的操作。
 void preDeregister()
          允許 m-let 在由 MBean 伺服器註銷之前執行任何所需要的操作。
 ObjectName preRegister(MBeanServer server, ObjectName name)
          允許在將 m-let 註冊到 MBean 之前執行任何所需要的操作。
 void readExternal(ObjectInput in)
          從給定的 ObjectInput 恢復此 MLet 的內容。
 void setLibraryDirectory(String libdir)
          設置在將本機資源庫載入到記憶體中之前資源庫載入器用來存儲這些本機資源庫的目錄。
 void writeExternal(ObjectOutput out)
          將此 MLet 的內容保存到給定的 ObjectOutput
 
從類別 java.net.URLClassLoader 繼承的方法
definePackage, findResource, findResources, getPermissions, newInstance, newInstance
 
從類別 java.security.SecureClassLoader 繼承的方法
defineClass, defineClass
 
從類別 java.lang.ClassLoader 繼承的方法
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
從介面 javax.management.loading.MLetMBean 繼承的方法
getResource, getResourceAsStream, getResources
 

建構子詳細資訊

MLet

public MLet()
使用預設的代理父類別載入器建構新的 MLet。


MLet

public MLet(URL[] urls)
使用預設的代理父類別載入器為指定的 URL 建構新的 MLet。首先在父類別載入器中搜尋 URL,然後按照為類別和資源指定的順序搜尋 URL。

參數:
urls - 從其位置載入類別和資源的 URL。

MLet

public MLet(URL[] urls,
            ClassLoader parent)
為給定的 URL 建構新的 MLet。首先在指定的父類別載入器中搜尋 URL,然後按照為類別和資源指定的順序搜尋 URL。該父參數將用作代理的父類別載入器。

參數:
urls - 從其指示的位置載入類別和資源的 URL。
parent - 代理的父類別載入器。

MLet

public MLet(URL[] urls,
            ClassLoader parent,
            URLStreamHandlerFactory factory)
為指定的 URL、父類別載入器和 URLStreamHandlerFactory 建構新的 MLet。該父參數將用作代理的父類別載入器。在創建新 URL 時,該處理器參數將用作獲取協議處理程序的串流處理程序處理器。

參數:
urls - 從其指示的位置載入類別和資源的 URL。
parent - 代理的父類別載入器。
factory - 創建 URL 時要使用的 URLStreamHandlerFactory。

MLet

public MLet(URL[] urls,
            boolean delegateToCLR)
使用預設的代理父類別載入器為指定的 URL 建構新的 MLet。首先在父類別載入器中搜尋 URL,然後按照為類別和資源指定的順序搜尋 URL。

參數:
urls - 從其指示的位置載入類別和資源的 URL。
delegateToCLR - 如果該參數為 true,則當在父類別載入器或 URL 中均未找到某個類別時,MLet 應該委託給該類別的套件含 MBeanServer 的 ClassLoaderRepository

MLet

public MLet(URL[] urls,
            ClassLoader parent,
            boolean delegateToCLR)
為給定的 URL 建構新的 MLet。首先在指定的父類別載入器中搜尋 URL,然後按照為類別和資源指定的順序搜尋 URL。該父參數將用作代理的父類別載入器。

參數:
urls - 從其指示的位置載入類別和資源的 URL。
parent - 代理的父類別載入器。
delegateToCLR - 如果該參數為 true,則當在父類別載入器或 URL 中均未找到某個類別時,MLet 應該委託給該類別的套件含 MBeanServer 的 ClassLoaderRepository

MLet

public MLet(URL[] urls,
            ClassLoader parent,
            URLStreamHandlerFactory factory,
            boolean delegateToCLR)
為指定的 URL、父類別載入器和 URLStreamHandlerFactory 建構新的 MLet。該父參數將用作代理的父類別載入器。在創建新 URL 時,該處理器參數將用作獲取協議處理程序的串流處理程序處理器。

參數:
urls - 從其指示的位置載入類別和資源的 URL。
parent - 代理的父類別載入器。
factory - 創建 URL 時要使用的 URLStreamHandlerFactory。
delegateToCLR - 如果該參數為 true,則當在父類別載入器或 URL 中均未找到某個類別時,MLet 應該委託給該類別的套件含 MBeanServer 的 ClassLoaderRepository
方法詳細資訊

addURL

public void addURL(URL url)
將指定的 URL 追加到 URL 列表中,以便搜尋類別和資源。

指定者:
介面 MLetMBean 中的 addURL
覆寫:
類別 URLClassLoader 中的 addURL
參數:
url - 將添加到 URL 搜尋路徑中的 URL

addURL

public void addURL(String url)
            throws ServiceNotFoundException
將指定的 URL 追加到 URL 列表中,以便搜尋類別和資源。

指定者:
介面 MLetMBean 中的 addURL
參數:
url - 要添加的 URL。
拋出:
ServiceNotFoundException - 如果指定的 URL 錯誤。

getURLs

public URL[] getURLs()
返回用於載入類別和資源的 URL 搜尋路徑。這包括為建構子指定的原始 URL 列表,以及 addURL() 方法後來添加的 URL。

指定者:
介面 MLetMBean 中的 getURLs
覆寫:
類別 URLClassLoader 中的 getURLs
返回:
用於載入類別和資源的 URL 搜尋路徑。

getMBeansFromURL

public Set<Object> getMBeansFromURL(URL url)
                             throws ServiceNotFoundException
載入一個套件含 MLET 標記的文本檔案,這些標記定義了要添加到 MBean 伺服器的 MBean。文本檔案的位置由 URL 指定。MLET 檔案中指定的 MBean 將被實例化並在 MBean 伺服器中註冊。

指定者:
介面 MLetMBean 中的 getMBeansFromURL
參數:
url - 以 URL 物件形式載入的文本檔案的 URL。
返回:
一個集合,在所載入的 m-let 文本檔案中,每個 MLET 標記都對應該集合中的一項。每一項要麼指定了所創建的 MBean 的 ObjectInstance,要麼在無法創建 MBean 時指定一個 throwable 物件(即一個錯誤或異常)。
拋出:
ServiceNotFoundException - 如果發生以下錯誤之一:m-let 文本檔案不包含 MLET 標記;未找到 m-let 文本檔案;未指定 MLET 標記的必需的屬性;url 的值為 null。
IllegalStateException - 如果沒有在 MBeanServer 中註冊 MLet MBean。

getMBeansFromURL

public Set<Object> getMBeansFromURL(String url)
                             throws ServiceNotFoundException
載入一個套件含 MLET 標記的文本檔案,這些標記定義了要添加到 MBean 伺服器的 MBean。文本檔案的位置由 URL 指定。MLET 檔案中指定的 MBean 將被實例化並在 MBean 伺服器中註冊。

指定者:
介面 MLetMBean 中的 getMBeansFromURL
參數:
url - 以 String 物件形式載入的文本檔案的 URL。
返回:
一個集合,在所載入的 m-let 文本檔案中,每個 MLET 標記都對應該集合中的一項。每一項要麼指定了所創建的 MBean 的 ObjectInstance,要麼在無法創建 MBean 時指定一個 throwable 物件(即一個錯誤或異常)。
拋出:
ServiceNotFoundException - 如果發生以下錯誤之一:m-let 文本檔案不包含 MLET 標記;未找到 m-let 文本檔案;未指定 MLET 標記的必需的屬性,url 錯誤。
IllegalStateException - 如果沒有在 MBeanServer 中註冊 MLet MBean。

getLibraryDirectory

public String getLibraryDirectory()
獲取資源庫載入器在將本機資源庫載入到記憶體中之前用於存儲這些本機資源庫的當前目錄。

指定者:
介面 MLetMBean 中的 getLibraryDirectory
返回:
資源庫載入器使用的當前目錄。
拋出:
UnsupportedOperationException - 如果此實作不支持以這種方式存儲本機資源庫。
另請參見:
setLibraryDirectory(java.lang.String)

setLibraryDirectory

public void setLibraryDirectory(String libdir)
設置在將本機資源庫載入到記憶體中之前資源庫載入器用來存儲這些本機資源庫的目錄。

指定者:
介面 MLetMBean 中的 setLibraryDirectory
參數:
libdir - 資源庫載入器使用的目錄。
拋出:
UnsupportedOperationException - 如果此實作不支持以這種方式存儲本機資源庫。
另請參見:
getLibraryDirectory()

preRegister

public ObjectName preRegister(MBeanServer server,
                              ObjectName name)
                       throws Exception
允許在將 m-let 註冊到 MBean 之前執行任何所需要的操作。如果 ObjectName 為 null,則 m-let 為它的註冊 <defaultDomain>:type=MLet 提供了一個預設名稱。

指定者:
介面 MBeanRegistration 中的 preRegister
參數:
server - 將在其中註冊 m-let 的 MBean 伺服器。
name - m-let 的物件名稱。
返回:
所註冊的 m-let 名稱。
拋出:
Exception - 此異常應由 MBean 伺服器捕獲,並以 MBeanRegistrationException 的形式重新拋出。

postRegister

public void postRegister(Boolean registrationDone)
允許 m-let 在已註冊到 MBean 伺服器之後或註冊失敗之後執行任何所需要的操作。

指定者:
介面 MBeanRegistration 中的 postRegister
參數:
registrationDone - 指示 m-let 是否已經成功註冊到 MBean 伺服器。值 false 意味著註冊失敗。

preDeregister

public void preDeregister()
                   throws Exception
允許 m-let 在由 MBean 伺服器註銷之前執行任何所需要的操作。

指定者:
介面 MBeanRegistration 中的 preDeregister
拋出:
java.langException - 此異常應由 MBean 伺服器捕獲,並以 MBeanRegistrationException 的形式重新拋出它。
Exception - MBean 伺服器會捕捉此異常並以 MBeanRegistrationException 的形式重新拋出。

postDeregister

public void postDeregister()
允許 m-let 在已從 MBean 伺服器註銷之後執行任何所需要的操作。

指定者:
介面 MBeanRegistration 中的 postDeregister

writeExternal

public void writeExternal(ObjectOutput out)
                   throws IOException,
                          UnsupportedOperationException

將此 MLet 的內容保存到給定的 ObjectOutput。不是所有的實作都支持此方法。不支持此方法的實作將拋出 UnsupportedOperationException。子類別可以覆寫此方法以支持它或更改寫入資料的格式。

寫入資料的格式是未指定的,但如果某個實作支持 writeExternal(java.io.ObjectOutput),則它必須也支持 readExternal(java.io.ObjectInput),以便後者可以讀取前者所寫入的內容。

指定者:
介面 Externalizable 中的 writeExternal
參數:
out - 要寫入的物件輸出串流。
拋出:
IOException - 如果在寫入時發生問題。
UnsupportedOperationException - 如果此實作不支持此操作。

readExternal

public void readExternal(ObjectInput in)
                  throws IOException,
                         ClassNotFoundException,
                         UnsupportedOperationException

從給定的 ObjectInput 恢復此 MLet 的內容。不是所有的實作都支持此方法。不支持此方法的實作將拋出 UnsupportedOperationException。子類別可以覆寫此方法以支持它或更改讀取資料的格式。

讀取資料的格式是未指定的,但如果某個實作支持 readExternal(java.io.ObjectInput),則它必須也支持 writeExternal(java.io.ObjectOutput),以便前者可以讀取後者所寫入的內容。

指定者:
介面 Externalizable 中的 readExternal
參數:
in - 要從中讀取的物件輸入串流。
拋出:
IOException - 如果在讀取時出現問題。
ClassNotFoundException - 如果找不到要恢復的物件的類別。
UnsupportedOperationException - 如果此實作不支持此操作。

loadClass

public Class<?> loadClass(String name,
                          ClassLoaderRepository clr)
                   throws ClassNotFoundException

如果在此 MLet 的 URL 中找不到某個類別,則使用給定的 ClassLoaderRepository 載入該類別。給定的 ClassLoaderRepository 可以為 null,在這種情況下, 如果在此 MLet 的 URL 中找不到該類別,則立即發生 ClassNotFoundException

參數:
name - 想要載入的類別名稱。
clr - 在此類別載入器中未找到給定類別時用於搜尋給定類別的 ClassLoaderRepository。可以為 null。
返回:
得到的 Class 物件。
拋出:
ClassNotFoundException - 如果在此類別載入器和給定的 ClassLoaderRepository 中均找不到指定的類別。

findClass

protected Class<?> findClass(String name)
                      throws ClassNotFoundException
這是要重新定義的類別載入器的主要方法。

覆寫:
類別 URLClassLoader 中的 findClass
參數:
name - 類別的名稱。
返回:
得到的 Class 物件。
拋出:
ClassNotFoundException - 如果找不到指定的類別。

findLibrary

protected String findLibrary(String libname)
返回本機資源庫的絕對路徑名稱。虛擬機器 (VM) 調用此方法尋找屬於利用此類別載入器載入的類別的本機資源庫。首先只使用第一個本機資源庫名稱在 JAR 檔案中搜尋資源庫,如果未找到這樣的本機資源庫,則使用本機資源庫名稱連同特定於架構的路徑名(OSName/OSArch/OSVersion/lib/nativelibname)來搜尋,即

Solaris SPARC 5.7 上的資源庫 stat 將按照以下方式在 JAR 檔案中進行搜尋:

  1. libstat.so
  2. SunOS/sparc/5.7/lib/libstat.so
Windows NT 4.0 上的資源庫 stat 將按照以下方式在 JAR 檔案中進行搜尋:
  1. stat.dll
  2. WindowsNT/x86/4.0/lib/stat.dll

更明確地說,可以設 nativelibnameSystem.mapLibraryName(libname) 的結果。這樣將在 JAR 檔案中依次搜尋以下名稱:
nativelibname
<os.name>/<os.arch>/<os.version>/lib/nativelibname
其中 <X> 表示 System.getProperty(X)(結果中不帶空格);/ 代表檔案分隔符 (File.separator)。

如果此方法返回 null,即在任何使用此類別載入器載入的 JAR 檔案中都找不到資源庫,則 VM 根據指定為 java.library.path 屬性的路徑搜尋資源庫。

覆寫:
類別 ClassLoader 中的 findLibrary
參數:
libname - 資源庫名稱。
返回:
本機資源庫的絕對路徑。
另請參見:
System.loadLibrary(String), System.mapLibraryName(String)

check

protected URL check(String version,
                    URL codebase,
                    String jarfile,
                    MLetContent mlet)
             throws Exception

當擴展此服務來支持快取記憶體和版本控制時,要覆寫此方法。當已經從 MLet 檔案提取出版本、程式碼基和 jarfile 時,從 getMBeansFromURL 調用此方法,可以用它驗證是否可以正確載入給定的 MBean,或者用不同的 URL 替換給定的 URL。

此方法的預設實作返回未更改的 codebase

參數:
version - 本地存儲的 .jar 檔案的版本號。
codebase - 遠端 .jar 檔案的基本 URL。
jarfile - 要載入的 .jar 檔案名稱。
mlet - 表示 MLET 標記的 MLetContent 實例。
返回:
用於已載入 MBean 的程式碼基。返回值應該不為 null。
拋出:
Exception - 如果由於某種原因未載入 MBean。該異常將被添加到 getMBeansFromURL 返回的集合中。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only