JavaTM 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 Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策