- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- javax.management.loading.MLet
-
- All Implemented Interfaces:
-
Closeable
,Externalizable
,Serializable
,AutoCloseable
,MLetMBean
,MBeanRegistration
- 已知直接子类:
-
PrivateMLet
public class MLet extends URLClassLoader implements MLetMBean, MBeanRegistration, Externalizable
允许您在来自远程URL的MBean服务器中实例化和注册一个或多个MBean。 M-let是管理小程序的捷径。 m-let服务通过加载m-let文本文件来实现,该文本文件指定要获取的MBean的信息。 每个MBean的信息在标签的单个实例中指定,称为MLET标记。 m-let文本文件的位置由URL指定。MLET
标记具有以下语法:<
MLET
CODE =
类| OBJECT =
serfile
ARCHIVE = "
archiveList"
[CODEBASE =
codebaseURL]
[NAME =
mbeanname]
[VERSION =
版本]
>
[
arglist]
</MLET
>哪里:
-
CODE =
课 -
此属性指定要获取的MBean的完整Java类名称,包括包名称。
MBean编译的
.class
文件必须包含在ARCHIVE
属性指定的.jar
文件之一中。 必须存在CODE
或OBJECT
。 -
OBJECT =
OBJECT = -
此属性指定包含要获取的MBean的序列化表示的
.ser
文件。 该文件必须包含在由ARCHIVE
属性指定的.jar
文件之一中。 如果.jar
文件包含目录层次结构,请指定此层次结构中文件的路径。 否则将找不到匹配项。 必须存在CODE
或OBJECT
。 -
ARCHIVE = "
archiveList"
-
此强制属性指定一个或多个包含MBean使用的MBean或其他资源的
.jar
文件。.jar
文件之一必须包含由CODE
或OBJECT
属性指定的文件。 如果存档列表包含多个文件:- 每个文件必须与逗号(,)之后的文件分开。
- 存档列表必须用双引号括起来。
.jar
文件archiveList中必须存储在由代码库URL指定的目录。 -
CODEBASE =
codebaseURL -
此可选属性指定要获取的MBean的代码库URL。
它标识包含由
ARCHIVE
属性指定的.jar
文件的目录。 仅当.jar
文件与m-let文本文件不在同一目录中时才指定此属性。 如果未指定此属性,则使用m-let文本文件的基本URL。 -
NAME =
mbeanname -
此可选属性指定当m-let服务注册时要分配给MBean实例的对象名称。
如果mbeanname以冒号字符(:)开头,则对象名称的域部分是由
MBeanServer.getDefaultDomain()
返回的MBean服务器的默认域。 -
VERSION =
版本 -
此可选属性指定要获取的MBean和关联的
.jar
文件的版本号。 该版本号可用于指定从服务器加载.jar
文件,以便在.jar
加载m-let文本文件时更新本地存储在缓存中的文件。 版本必须是一系列非负十进制整数,每个十进制整数与之前的一个周期隔开。 - arglist中
-
此可选属性指定要实例化的MBean的一个或多个参数的列表。
此列表描述了要传递MBean构造函数的参数。
使用以下语法来指定arglist中的每个项目:
-
<
ARG TYPE=
argumentTypeVALUE=
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服务扩展了
java.net.URLClassLoader
,可用于在代理的VM中加载远程类和jar文件。注意 -
MLet
类加载器使用MBeanServerFactory.getClassLoaderRepository(javax.management.MBeanServer)
加载在加载的jar文件中找不到的类。- 从以下版本开始:
- 1.5
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 MLet()
使用默认委派父类ClassLoader构造新的MLet。MLet(URL[] urls)
使用默认的委派父类ClassLoader构造指定URL的新MLet。MLet(URL[] urls, boolean delegateToCLR)
使用默认的委派父类ClassLoader构造指定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。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
加载一个包含定义要添加到MBean服务器的MBean的MLET标签的文本文件。Set<Object>
getMBeansFromURL(URL url)
加载一个包含定义要添加到MBean服务器的MBean的MLET标签的文本文件。URL[]
getURLs()
返回加载类和资源的URL的搜索路径。Class<?>
loadClass(String name, ClassLoaderRepository clr)
加载一个类,使用给定的ClassLoaderRepository
如果该类没有在这个MLet的URL中找到。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
。-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Methods inherited from interface javax.management.loading.MLetMBean
getResource, getResourceAsStream, getResources
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
-
Methods inherited from class java.net.URLClassLoader
close, definePackage, findResource, findResources, getPermissions, getResourceAsStream, newInstance, newInstance
-
-
-
-
构造方法详细信息
-
MLet
public MLet()
使用默认委派父类ClassLoader构造新的MLet。
-
MLet
public MLet(URL[] urls)
使用默认的委派父类ClassLoader构造指定URL的新MLet。 在首次搜索父类加载器后,将按照为类和资源指定的顺序搜索URL。- 参数
-
urls
- 加载类和资源的URL。
-
MLet
public MLet(URL[] urls, ClassLoader parent)
为给定的URL构造一个新的MLet。 在首次搜索指定的父类加载器后,将按照为类和资源指定的顺序搜索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)
使用默认的委派父类ClassLoader构造指定URL的新MLet。 在首次搜索父类加载器后,将按照为类和资源指定的顺序搜索URL。- 参数
-
urls
- 加载类和资源的URL。 -
delegateToCLR
- 如果在父类ClassLoader或URL中找不到类时,则MLet应委托其包含的MBeanServer的ClassLoaderRepository
。
-
MLet
public MLet(URL[] urls, ClassLoader parent, boolean delegateToCLR)
为给定的URL构造一个新的MLet。 在首次搜索指定的父类加载器后,将按照为类和资源指定的顺序搜索URL。 父参数将被用作委托的父类加载器。- 参数
-
urls
- 加载类和资源的URL。 -
parent
- 用于委派的父类加载器。 -
delegateToCLR
- 如果在父类ClassLoader或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
- 如果在父类ClassLoader或URL中找不到类时,则MLet应委派给其包含的MBeanServer的ClassLoaderRepository
。
-
-
方法详细信息
-
addURL
public void addURL(URL url)
将指定的URL附加到URL列表中以搜索类和资源。- Specified by:
-
addURL
在接口MLetMBean
- 重写:
-
addURL
在URLClassLoader
- 参数
-
url
- 要添加到URL搜索路径的URL
-
addURL
public void addURL(String url) throws ServiceNotFoundException
将指定的URL附加到URL列表中以搜索类和资源。- Specified by:
-
addURL
在接口MLetMBean
- 参数
-
url
- 要添加的URL。 - 异常
-
ServiceNotFoundException
- 指定的网址格式错误。
-
getURLs
public URL[] getURLs()
返回加载类和资源的URL的搜索路径。 这包括为构造函数指定的URL的原始列表,以及随后由addURL()方法附加的任何URL。- Specified by:
-
getURLs
在接口MLetMBean
- 重写:
-
getURLs
在URLClassLoader
- 结果
- 用于加载类和资源的URL的搜索路径。
-
getMBeansFromURL
public Set<Object> getMBeansFromURL(URL url) throws ServiceNotFoundException
加载一个包含定义要添加到MBean服务器的MBean的MLET标签的文本文件。 文本文件的位置由URL指定。 在MLET文件中指定的MBean将被实例化并注册到MBean服务器中。- Specified by:
-
getMBeansFromURL
在接口MLetMBean
- 参数
-
url
- 要作为URL对象加载的文本文件的URL。 - 结果
- 一个包含m-let文本文件中每个MLET标签一个条目的集合。 如果无法创建MBean,则每个条目都指定创建的MBean的ObjectInstance或抛出的对象(即错误或异常)。
- 异常
-
ServiceNotFoundException
- 发生以下错误之一:m-let文本文件不包含MLET标记,未找到m-let文本文件,未指定MLET标记的强制属性,url的值为null 。 -
IllegalStateException
- MLet MBean未注册到MBeanServer。
-
getMBeansFromURL
public Set<Object> getMBeansFromURL(String url) throws ServiceNotFoundException
加载一个包含定义要添加到MBean服务器的MBean的MLET标签的文本文件。 文本文件的位置由URL指定。 在MLET文件中指定的MBean将被实例化并注册到MBean服务器中。- Specified by:
-
getMBeansFromURL
在接口MLetMBean
- 参数
-
url
- 要作为String对象加载的文本文件的URL。 - 结果
- 一个包含m-let文本文件中每个MLET标签一个条目的集合。 如果无法创建MBean,则每个条目都指定创建的MBean的ObjectInstance或抛出的对象(即错误或异常)。
- 异常
-
ServiceNotFoundException
- 发生以下错误之一:m-let文本文件不包含MLET标记,未找到m-let文本文件,未指定MLET标记的强制属性,URL格式错误。 -
IllegalStateException
- MLet MBean未向MBeanServer注册。
-
getLibraryDirectory
public String getLibraryDirectory()
获取库加载器用于存储本机库的当前目录,然后再将其加载到内存中。- Specified by:
-
getLibraryDirectory
在接口MLetMBean
- 结果
- 库加载器使用的当前目录。
- 异常
-
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。 - 另请参见:
-
setLibraryDirectory(java.lang.String)
-
setLibraryDirectory
public void setLibraryDirectory(String libdir)
设置用于存储本机库的库加载器使用的目录,然后将其加载到内存中。- Specified by:
-
setLibraryDirectory
在接口MLetMBean
- 参数
-
libdir
- 库加载器使用的目录。 - 异常
-
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。 - 另请参见:
-
getLibraryDirectory()
-
preRegister
public ObjectName preRegister(MBeanServer server, ObjectName name) throws 异常
允许m-let在MBean服务器注册之前执行所需的任何操作。 如果ObjectName为空,则m-let为其注册<defaultDomain>提供默认名称:type = MLet- Specified by:
-
preRegister
在接口MBeanRegistration
- 参数
-
server
- 将在其中注册m-let的MBean服务器。 -
name
- m-let的对象名称。 - 结果
- m-let注册的名称。
- 异常
-
异常
- 这个异常应该被MBean服务器捕获,并重新抛出为MBeanRegistrationException。
-
postRegister
public void postRegister(Boolean registrationDone)
允许m-let在MBean服务器中注册或注册失败后执行所需的操作。- Specified by:
-
postRegister
在接口MBeanRegistration
- 参数
-
registrationDone
- 指示m-let是否已在MBean服务器中成功注册。 值false表示注册阶段失败。
-
preDeregister
public void preDeregister() throws 异常
允许m-let在MBean服务器取消注册之前执行所需的任何操作。- Specified by:
-
preDeregister
在接口MBeanRegistration
- 异常
-
异常
- 此异常应被MBean服务器捕获,并重新抛出为MBeanRegistrationException。
-
postDeregister
public void postDeregister()
允许m-let在MBean服务器中取消注册后执行所需的操作。- Specified by:
-
postDeregister
在接口MBeanRegistration
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException, UnsupportedOperationException
将此MLet的内容保存到给定的
ObjectOutput
。 并非所有实现都支持此方法。 那些不要抛出的UnsupportedOperationException
。 子类可以覆盖此方法来支持它或更改写入的数据的格式。写入数据的格式没有指定,但如果一个实现支持
writeExternal(java.io.ObjectOutput)
,那么它也必须支持readExternal(java.io.ObjectInput)
,这样一来,前者所写的内容就可以被后者读出。- Specified by:
-
writeExternal
在接口Externalizable
- 参数
-
out
- 要写入的对象输出流。 - 异常
-
IOException
- 写入时是否出现问题。 -
UnsupportedOperationException
- 如果此实现不支持此操作。
-
readExternal
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException, UnsupportedOperationException
从给定的
ObjectInput
恢复这个MLet的内容。 并非所有实现都支持此方法。 那些不要抛出的UnsupportedOperationException
。 子类可以覆盖此方法来支持它或更改读取数据的格式。未指定读取数据的格式,但是如果实现支持
readExternal(java.io.ObjectInput)
,则还必须支持writeExternal(java.io.ObjectOutput)
,以便后者可以读取后者的内容。- Specified by:
-
readExternal
在接口Externalizable
- 参数
-
in
- 要读取的对象输入流。 - 异常
-
IOException
- 阅读时是否出现问题。 -
ClassNotFoundException
- 如果找不到正在恢复的对象的类。 -
UnsupportedOperationException
- 如果此实现不支持此操作。
-
loadClass
public Class<?> loadClass(String name, ClassLoaderRepository clr) throws ClassNotFoundException
加载一个类,使用给定的
ClassLoaderRepository
如果该类没有在这个MLet的URL中找到。 给定的ClassLoaderRepository可以为null,在这种情况下,如果在该MLet的URL中找不到该类,则立即出现ClassNotFoundException
。- 参数
-
name
- 我们要加载的类的名称。 -
clr
- 将用于搜索给定类的ClassLoaderRepository,如果在此ClassLoader中未找到该类。 可能为null。 - 结果
- 生成的Class对象。
- 异常
-
ClassNotFoundException
- 在此ClassLoader或给定的ClassLoaderRepository中找不到指定的类。
-
findClass
protected Class<?> findClass(String name) throws ClassNotFoundException
这是正在重新定义的类加载器的主要方法。- 重写:
-
findClass
在URLClassLoader
- 参数
-
name
- 类的名称。 - 结果
- 生成的Class对象。
- 异常
-
ClassNotFoundException
- 找不到指定的类。
-
findLibrary
protected String findLibrary(String libname)
返回本机库的绝对路径名。 VM调用此方法来查找属于此类加载器加载的类的本机库。 在JAR文件中搜索库,首先使用本机库名称,如果没有找到本机库名称以及特定于体系结构的路径名(OSName/OSArch/OSVersion/lib/nativelibname
),即将在JAR文件中搜索Solaris SPARC 5.7上的库统计信息:
- libstat.so
- 在SunOS / SPARC / 5.7 / lib中/ libstat.so
- stat.dll
- WindowsNT的/ 86 / 4.0 / lib中/ stat.dll
更具体地说,
nativelibname
是System.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
- 图书馆名称。 - 结果
- 本土图书馆的绝对路径。
- 另请参见:
-
System.loadLibrary(String)
,System.mapLibraryName(String)
-
check
protected URL check(String version, URL codebase, String jarfile, MLetContent mlet) throws 异常
当扩展此服务以支持缓存和版本控制时,此方法将被覆盖。 当从MLet文件中提取版本,代码库和jarfile时,它将从
getMBeansFromURL
调用,并且可以用于验证是否正确加载给定的MBean,或者用不同的替换来替换给定的URL。此方法的默认实现返回
codebase
不变。- 参数
-
version
- 本地存储的.jar
文件的版本号。 -
codebase
- 远程.jar
文件的基址。 -
jarfile
- 要加载的.jar
文件的名称。 -
mlet
- 代表MLET
标签的MLetContent
实例。 - 结果
- 用于加载MBean的代码库。 返回值不能为空。
- 异常
-
异常
- 如果由于某种原因MBean不被加载 该异常将被添加到由getMBeansFromURL
返回的集合中 。
-
-