Module java.management

Class MLet

所有已实现的接口:
Closeable, Externalizable, Serializable, AutoCloseable, MLetMBean, MBeanRegistration
直接已知的子类:
PrivateMLet

@Deprecated(since="20", forRemoval=true) public class MLet extends URLClassLoader implements MLetMBean, MBeanRegistration, Externalizable
Deprecated, for removal: This API element is subject to removal in a future version.
This API is part of Management Applets (m-lets), which is a legacy feature that allows loading of remote MBeans. This feature is not usable without a Security Manager, which is deprecated and subject to removal in a future release. Consequently, this API is also deprecated and subject to removal. There is no replacement.
允许您在来自远程URL的MBean服务器中实例化和注册一个或多个MBeans。M-let是管理小程序的快捷方式。M-let服务通过加载一个m-let文本文件来实现这一点,该文件指定要获取的MBeans的信息。每个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
此属性指定包含要获取的MBean的序列化表示的.ser文件。此文件必须包含在ARCHIVE属性指定的.jar文件之一中。如果.jar文件包含目录层次结构,请指定此层次结构中文件的路径。否则将找不到匹配项。必须存在CODEOBJECT之一。
ARCHIVE = "archiveList"
此必需属性指定一个或多个包含MBeans或其他MBean使用的资源的.jar文件。其中一个.jar文件必须包含由CODEOBJECT属性指定的文件。如果archivelist包含多个文件:
  • 每个文件必须用逗号(,)与其后的文件分隔。
  • archivelist必须用双引号括起来。
archivelist中的所有.jar文件必须存储在由代码库URL指定的目录中。
CODEBASE = codebaseURL
此可选属性指定要获取的MBean的代码库URL。它标识包含由ARCHIVE属性指定的.jar文件的目录。仅当.jar文件不在与m-let文本文件相同的目录中时才指定此属性。如果未指定此属性,则使用m-let文本文件的基本URL。
NAME = mbeanname
此可选属性指定在m-let服务注册时分配给MBean实例的对象名称。如果mbeanname以冒号字符(:)开头,则对象名称的域部分是MBean服务器的默认域,由MBeanServer.getDefaultDomain()返回。
VERSION = version
此可选属性指定要获取的MBean及相关.jar文件的版本号。此版本号可用于指定下次加载m-let文本文件时从服务器加载这些文件以更新本地缓存中存储的文件。version必须是一系列由句点分隔的非负十进制整数。
arglist
此可选属性指定要实例化的MBean的一个或多个参数列表。此列表描述要传递给MBean构造函数的参数。使用以下语法指定arglist中的每个项目:
<ARG TYPE=argumentType VALUE=value>
其中:
  • argumentType是将作为参数传递给MBean构造函数的参数类型。

参数列表中的参数类型应为Java基本类型或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
参见:
  • Constructor Details

    • MLet

      public MLet()
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用默认委托父 ClassLoader 构造一个新的 MLet。
    • MLet

      public MLet(URL[] urls)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用指定的 URLs 和默认委托父 ClassLoader 构造一个新的 MLet。在首先在父类加载器中搜索后,将按指定顺序搜索类和资源的 URLs。
      参数:
      urls - 用于加载类和资源的 URLs。
    • MLet

      public MLet(URL[] urls, ClassLoader parent)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用给定的 URLs 构造一个新的 MLet。在首先在指定的父类加载器中搜索后,将按指定顺序搜索类和资源的 URLs。父级参数将用作委托的父类加载器。
      参数:
      urls - 用于加载类和资源的 URLs。
      parent - 用于委托的父类加载器。
    • MLet

      public MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用指定的 URLs、父类加载器和 URLStreamHandlerFactory 构造一个新的 MLet。父级参数将用作委托的父类加载器。工厂参数将用作在创建新的 URLs 时获取协议处理程序的流处理程序工厂。
      参数:
      urls - 用于加载类和资源的 URLs。
      parent - 用于委托的父类加载器。
      factory - 创建 URLs 时要使用的 URLStreamHandlerFactory。
    • MLet

      public MLet(URL[] urls, boolean delegateToCLR)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用默认委托父 ClassLoader 构造一个新的 MLet,用于指定的 URLs。在首先在父类加载器中搜索后,将按指定顺序搜索类和资源的 URLs。
      参数:
      urls - 用于加载类和资源的 URLs。
      delegateToCLR - 如果在父 ClassLoader 或 URLs 中找不到类时,MLet 应该委托给其包含的 MBeanServer 的 ClassLoaderRepository
    • MLet

      public MLet(URL[] urls, ClassLoader parent, boolean delegateToCLR)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用给定的 URLs 构造一个新的 MLet。在首先在指定的父类加载器中搜索后,将按指定顺序搜索类和资源的 URLs。父级参数将用作委托的父类加载器。
      参数:
      urls - 用于加载类和资源的 URLs。
      parent - 用于委托的父类加载器。
      delegateToCLR - 如果在父 ClassLoader 或 URLs 中找不到类时,MLet 应该委托给其包含的 MBeanServer 的 ClassLoaderRepository
    • MLet

      public MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory, boolean delegateToCLR)
      Deprecated, for removal: This API element is subject to removal in a future version.
      使用指定的 URLs、父类加载器和 URLStreamHandlerFactory 构造一个新的 MLet。父级参数将用作委托的父类加载器。工厂参数将用作在创建新的 URLs 时获取协议处理程序的流处理程序工厂。
      参数:
      urls - 用于加载类和资源的 URLs。
      parent - 用于委托的父类加载器。
      factory - 创建 URLs 时要使用的 URLStreamHandlerFactory。
      delegateToCLR - 如果在父 ClassLoader 或 URLs 中找不到类时,MLet 应该委托给其包含的 MBeanServer 的 ClassLoaderRepository
  • Method Details

    • addURL

      public void addURL(URL url)
      Deprecated, for removal: This API element is subject to removal in a future version.
      将指定的 URL 添加到搜索类和资源的 URL 列表中。
      指定者:
      addURL 在接口 MLetMBean
      覆盖:
      addURL 在类 URLClassLoader
      参数:
      url - 要添加到 URL 搜索路径的 URL。
    • addURL

      public void addURL(String url) throws ServiceNotFoundException
      Deprecated, for removal: This API element is subject to removal in a future version.
      将指定的 URL 添加到搜索类和资源的 URL 列表中。
      指定者:
      addURL 在接口 MLetMBean
      参数:
      url - 要添加的 URL。
      抛出:
      ServiceNotFoundException - 指定的 URL 格式不正确。
    • getURLs

      public URL[] getURLs()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回用于加载类和资源的 URL 搜索路径。这包括最初在构造函数中指定的 URL 列表,以及后来通过 addURL() 方法追加的任何 URL。
      指定者:
      getURLs 在接口 MLetMBean
      覆盖:
      getURLs 在类 URLClassLoader
      返回:
      用于加载类和资源的 URL 搜索路径。
    • getMBeansFromURL

      public Set<Object> getMBeansFromURL(URL url) throws ServiceNotFoundException
      Deprecated, for removal: This API element is subject to removal in a future version.
      加载包含定义要添加到 MBean 服务器的 MBeans 的 MLET 标记的文本文件。文本文件的位置由 URL 指定。在 MLET 文件中指定的 MBeans 将被实例化并注册到 MBean 服务器中。
      指定者:
      getMBeansFromURL 在接口 MLetMBean
      参数:
      url - 要加载为 URL 对象的文本文件的 URL。
      返回:
      包含 m-let 文本文件中每个 MLET 标记的一个条目的集合。每个条目指定已创建 MBean 的 ObjectInstance,或者如果无法创建 MBean,则指定可抛出的对象(即错误或异常)。
      抛出:
      ServiceNotFoundException - 发生以下错误之一:m-let 文本文件不包含 MLET 标记,找不到 m-let 文本文件,未指定 MLET 标记的必需属性,url 的值为 null。
      IllegalStateException - MLet MBean 未向 MBeanServer 注册。
    • getMBeansFromURL

      public Set<Object> getMBeansFromURL(String url) throws ServiceNotFoundException
      Deprecated, for removal: This API element is subject to removal in a future version.
      加载包含定义要添加到 MBean 服务器的 MBeans 的 MLET 标记的文本文件。文本文件的位置由 URL 指定。在 MLET 文件中指定的 MBeans 将被实例化并注册到 MBean 服务器中。
      指定者:
      getMBeansFromURL 在接口 MLetMBean
      参数:
      url - 要加载为 String 对象的文本文件的 URL。
      返回:
      包含 m-let 文本文件中每个 MLET 标记的一个条目的集合。每个条目指定已创建 MBean 的 ObjectInstance,或者如果无法创建 MBean,则指定可抛出的对象(即错误或异常)。
      抛出:
      ServiceNotFoundException - 发生以下错误之一:m-let 文本文件不包含 MLET 标记,找不到 m-let 文本文件,未指定 MLET 标记的必需属性,url 格式不正确。
      IllegalStateException - MLet MBean 未向 MBeanServer 注册。
    • getLibraryDirectory

      public String getLibraryDirectory()
      Deprecated, for removal: This API element is subject to removal in a future version.
      获取库加载程序用于在将本地库加载到内存之前存储本地库的当前目录。
      指定者:
      getLibraryDirectory 在接口 MLetMBean
      返回:
      库加载程序当前使用的目录。
      抛出:
      UnsupportedOperationException - 如果此实现不支持以这种方式存储本地库。
      参见:
    • setLibraryDirectory

      public void setLibraryDirectory(String libdir)
      Deprecated, for removal: This API element is subject to removal in a future version.
      设置库加载器在将本机库加载到内存之前用于存储本机库的目录。
      指定者:
      setLibraryDirectory 在接口 MLetMBean
      参数:
      libdir - 库加载器使用的目录。
      抛出:
      UnsupportedOperationException - 如果此实现不支持以这种方式存储本机库。
      参见:
    • preRegister

      public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
      Deprecated, for removal: This API element is subject to removal in a future version.
      允许 m-let 在注册到 MBean 服务器之前执行其需要的任何操作。如果 ObjectName 为 null,则 m-let 为其注册提供默认名称<defaultDomain>:type=MLet
      指定者:
      preRegister 在接口 MBeanRegistration
      参数:
      server - 将注册 m-let 的 MBean 服务器。
      name - m-let 的对象名称。
      返回:
      已注册的 m-let 的名称。
      抛出:
      Exception - MBean 服务器应捕获此异常并重新抛出为 MBeanRegistrationException。
    • postRegister

      public void postRegister(Boolean registrationDone)
      Deprecated, for removal: This API element is subject to removal in a future version.
      允许 m-let 在注册到 MBean 服务器后或注册失败后执行所需的任何操作。
      指定者:
      postRegister 在接口 MBeanRegistration
      参数:
      registrationDone - 表示 m-let 是否已成功注册到 MBean 服务器。值为 false 意味着注册阶段失败。
    • preDeregister

      public void preDeregister() throws Exception
      Deprecated, for removal: This API element is subject to removal in a future version.
      允许 m-let 在被 MBean 服务器取消注册之前执行其需要的任何操作。
      指定者:
      preDeregister 在接口 MBeanRegistration
      抛出:
      Exception - MBean 服务器应捕获此异常并重新抛出为 MBeanRegistrationException。
    • postDeregister

      public void postDeregister()
      Deprecated, for removal: This API element is subject to removal in a future version.
      允许 m-let 在 MBean 服务器中取消注册后执行所需的任何操作。
      指定者:
      postDeregister 在接口 MBeanRegistration
    • writeExternal

      public void writeExternal(ObjectOutput out) throws IOException, UnsupportedOperationException
      Deprecated, for removal: This API element is subject to removal in a future version.

      将此 MLet 的内容保存到给定的 ObjectOutput。并非所有实现都支持此方法。不支持的实现会抛出 UnsupportedOperationException。子类可以重写此方法以支持它或更改所写数据的格式。

      所写数据的格式未指定,但如果实现支持 writeExternal(java.io.ObjectOutput),则必须以使前者写入的内容可以被后者读取的方式支持 readExternal(java.io.ObjectInput)

      指定者:
      writeExternal 在接口 Externalizable
      参数:
      out - 要写入的对象输出流。
      抛出:
      IOException - 写入时发生问题。
      UnsupportedOperationException - 如果此实现不支持此操作。
    • readExternal

      Deprecated, for removal: This API element is subject to removal in a future version.

      从给定的 ObjectInput 中恢复此 MLet 的内容。并非所有实现都支持此方法。不支持的实现会抛出 UnsupportedOperationException。子类可以重写此方法以支持它或更改读取数据的格式。

      读取数据的格式未指定,但如果实现支持 readExternal(java.io.ObjectInput),则必须以使后者写入的内容可以被前者读取的方式支持 writeExternal(java.io.ObjectOutput)

      指定者:
      readExternal 在接口 Externalizable
      参数:
      in - 要从中读取的对象输入流。
      抛出:
      IOException - 读取时发生问题。
      ClassNotFoundException - 如果无法找到要恢复的对象的类。
      UnsupportedOperationException - 如果此实现不支持此操作。
    • loadClass

      public Class<?> loadClass(String name, ClassLoaderRepository clr) throws ClassNotFoundException
      Deprecated, for removal: This API element is subject to removal in a future version.

      加载一个类,如果在此 MLet 的 URLs 中找不到该类,则使用给定的 ClassLoaderRepository。给定的 ClassLoaderRepository 可以为 null,在这种情况下,如果在此 MLet 的 URLs 中找不到该类,则会立即抛出 ClassNotFoundException

      参数:
      name - 要加载的类的名称。
      clr - 将用于搜索给定类的 ClassLoaderRepository,如果在此 ClassLoader 中找不到该类。可能为 null。
      返回:
      结果 Class 对象。
      抛出:
      ClassNotFoundException - 无法在此 ClassLoader 或给定的 ClassLoaderRepository 中找到指定的类。
    • findClass

      protected Class<?> findClass(String name) throws ClassNotFoundException
      Deprecated, for removal: This API element is subject to removal in a future version.
      这是正在重新定义的类加载器的主要方法。
      覆盖:
      findClass 在类 URLClassLoader
      参数:
      name - 类的名称。
      返回:
      结果 Class 对象。
      抛出:
      ClassNotFoundException - 无法找到指定的类。
    • findLibrary

      protected String findLibrary(String libname)
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回本机库的绝对路径名。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 属性的路径搜索库。

      覆盖:
      findLibrary 在类 ClassLoader
      参数:
      libname - 库的名称。
      返回:
      本机库的绝对路径。
      参见:
    • check

      protected URL check(String version, URL codebase, String jarfile, MLetContent mlet) throws Exception
      Deprecated, for removal: This API element is subject to removal in a future version.

      当扩展此服务以支持缓存和版本控制时,应重写此方法。当从MLet文件中提取版本、代码库和jar文件时,它将从getMBeansFromURL调用,并可用于验证加载给定MBean是否正确,或者用不同的URL替换给定的URL。

      此方法的默认实现将返回未更改的codebase

      参数:
      version - 本地存储的.jar文件的版本号。
      codebase - 远程.jar文件的基本URL。
      jarfile - 要加载的.jar文件的名称。
      mlet - 代表MLET标签的MLetContent实例。
      返回:
      用于加载MBean的代码库。返回值不应为null。
      抛出:
      Exception - 如果由于某种原因不应加载MBean。异常将添加到由getMBeansFromURL返回的集合中。