java.lang.Object java.lang.ClassLoader java.security.SecureClassLoader java.net.URLClassLoader javax.management.loading.MLet
public class MLet
允许实例化和注册来自远程 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
.class
文件必须包含在
ARCHIVE
属性指定的
.jar
文件中。
CODE
或
OBJECT
必须存在。
OBJECT =
serfile
.ser
文件,该文件包含要获取的 MBean 的序列化表示形式。此文件必须包含在
ARCHIVE
属性指定的
.jar
文件中。如果
.jar
文件包含目录层次结构,则需要指定此层次结构中的文件路径。否则将找不到匹配项。
CODE
或
OBJECT
必须存在。
ARCHIVE = "
archiveList
"
.jar
文件,这些文件包含要获取的 MBean 使用的 MBean 或其他资源。
.jar
文件之一必须包含
CODE
或
OBJECT
属性所指定的文件。如果 archivelist 包含多个文件:
.jar
文件必须存储在代码基 URL 指定的目录中。
CODEBASE =
codebaseURL
ARCHIVE
指定的
.jar
文件的目录。仅当
.jar
文件与 m-let 文本文件不在同一目录中时,指定此属性。如果不指定此属性,则使用 m-let 文本文件的基本 URL。
NAME =
mbeanname
MBeanServer.getDefaultDomain()
返回。
VERSION =
version
.jar
文件。此版本号可用于指定从服务器加载
.jar
文件,以便在下次调用 m-let 文本文件时更新存储在本地缓存中的文件。
version 必须是一系列非负的十进制整数,每个整数都通过句点与它前面的整数隔开。
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 服务扩展了 java.net.URLClassLoader
,可以用它加载代理的 VM 中的远程类和 jar 文件。
注意 - MLet
类加载器使用 MBeanServerFactory.getClassLoaderRepository(javax.management.MBeanServer)
来加载在已加载 jar 文件中找不到的类。
构造方法摘要 | |
---|---|
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.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
从接口 javax.management.loading.MLetMBean 继承的方法 |
---|
getResource, getResourceAsStream, getResources |
构造方法详细信息 |
---|
public MLet()
public MLet(URL[] urls)
urls
- 从其位置加载类和资源的 URL。
public MLet(URL[] urls, ClassLoader parent)
urls
- 从其指示的位置加载类和资源的 URL。
parent
- 代理的父类加载器。
public MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
urls
- 从其指示的位置加载类和资源的 URL。
parent
- 代理的父类加载器。
factory
- 创建 URL 时要使用的 URLStreamHandlerFactory。
public MLet(URL[] urls, boolean delegateToCLR)
urls
- 从其指示的位置加载类和资源的 URL。
delegateToCLR
- 如果该参数为 true,则当在父类加载器或 URL 中均未找到某个类时,MLet 应该委托给该类的包含 MBeanServer 的
ClassLoaderRepository
。
public MLet(URL[] urls, ClassLoader parent, boolean delegateToCLR)
urls
- 从其指示的位置加载类和资源的 URL。
parent
- 代理的父类加载器。
delegateToCLR
- 如果该参数为 true,则当在父类加载器或 URL 中均未找到某个类时,MLet 应该委托给该类的包含 MBeanServer 的
ClassLoaderRepository
。
public MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory, boolean delegateToCLR)
urls
- 从其指示的位置加载类和资源的 URL。
parent
- 代理的父类加载器。
factory
- 创建 URL 时要使用的 URLStreamHandlerFactory。
delegateToCLR
- 如果该参数为 true,则当在父类加载器或 URL 中均未找到某个类时,MLet 应该委托给该类的包含 MBeanServer 的
ClassLoaderRepository
。
方法详细信息 |
---|
public void addURL(URL url)
MLetMBean
中的
addURL
URLClassLoader
中的
addURL
url
- 将添加到 URL 搜索路径中的 URL
public void addURL(String url) throws ServiceNotFoundException
url
- 要添加的 URL。
ServiceNotFoundException
- 如果指定的 URL 错误。
public URL[] getURLs()
MLetMBean
中的
getURLs
URLClassLoader
中的
getURLs
public Set<Object> getMBeansFromURL(URL url) throws ServiceNotFoundException
MLetMBean
中的
getMBeansFromURL
url
- 以 URL 对象形式加载的文本文件的 URL。
ServiceNotFoundException
- 如果发生以下错误之一:m-let 文本文件不包含 MLET 标记;未找到 m-let 文本文件;未指定 MLET 标记的必需的属性;url 的值为 null。
IllegalStateException
- 如果没有在 MBeanServer 中注册 MLet MBean。
public Set<Object> getMBeansFromURL(String url) throws ServiceNotFoundException
MLetMBean
中的
getMBeansFromURL
url
- 以 String 对象形式加载的文本文件的 URL。
ServiceNotFoundException
- 如果发生以下错误之一:m-let 文本文件不包含 MLET 标记;未找到 m-let 文本文件;未指定 MLET 标记的必需的属性,url 错误。
IllegalStateException
- 如果没有在 MBeanServer 中注册 MLet MBean。
public String getLibraryDirectory()
MLetMBean
中的
getLibraryDirectory
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。
setLibraryDirectory(java.lang.String)
public void setLibraryDirectory(String libdir)
MLetMBean
中的
setLibraryDirectory
libdir
- 库加载器使用的目录。
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。
getLibraryDirectory()
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
MBeanRegistration
中的
preRegister
server
- 将在其中注册 m-let 的 MBean 服务器。
name
- m-let 的对象名称。
Exception
- 此异常应由 MBean 服务器捕获,并以 MBeanRegistrationException 的形式重新抛出。
public void postRegister(Boolean registrationDone)
MBeanRegistration
中的
postRegister
registrationDone
- 指示 m-let 是否已经成功注册到 MBean 服务器。值 false 意味着注册失败。
public void preDeregister() throws Exception
MBeanRegistration
中的
preDeregister
java.langException
- 此异常应由 MBean 服务器捕获,并以 MBeanRegistrationException 的形式重新抛出它。
Exception
- MBean 服务器会捕捉此异常并以
MBeanRegistrationException
的形式重新抛出。
public void postDeregister()
MBeanRegistration
中的
postDeregister
public void writeExternal(ObjectOutput out) throws IOException, UnsupportedOperationException
将此 MLet 的内容保存到给定的 ObjectOutput
。不是所有的实现都支持此方法。不支持此方法的实现将抛出 UnsupportedOperationException
。子类可以重写此方法以支持它或更改写入数据的格式。
写入数据的格式是未指定的,但如果某个实现支持 writeExternal(java.io.ObjectOutput)
,则它必须也支持 readExternal(java.io.ObjectInput)
,以便后者可以读取前者所写入的内容。
Externalizable
中的
writeExternal
out
- 要写入的对象输出流。
IOException
- 如果在写入时发生问题。
UnsupportedOperationException
- 如果此实现不支持此操作。
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
- 如果此实现不支持此操作。
public Class<?> loadClass(String name, ClassLoaderRepository clr) throws ClassNotFoundException
如果在此 MLet 的 URL 中找不到某个类,则使用给定的 ClassLoaderRepository
加载该类。给定的 ClassLoaderRepository 可以为 null,在这种情况下, 如果在此 MLet 的 URL 中找不到该类,则立即发生 ClassNotFoundException
。
name
- 想要加载的类名称。
clr
- 在此类加载器中未找到给定类时用于搜索给定类的 ClassLoaderRepository。可以为 null。
ClassNotFoundException
- 如果在此类加载器和给定的 ClassLoaderRepository 中均找不到指定的类。
protected Class<?> findClass(String name) throws ClassNotFoundException
URLClassLoader
中的
findClass
name
- 类的名称。
ClassNotFoundException
- 如果找不到指定的类。
protected String findLibrary(String libname)
OSName/OSArch/OSVersion/lib/nativelibname
)来搜索,即
Solaris SPARC 5.7 上的库 stat 将按照以下方式在 JAR 文件中进行搜索:
更明确地说,可以设 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
属性的路径搜索库。
ClassLoader
中的
findLibrary
libname
- 库名称。
System.loadLibrary(String)
,
System.mapLibraryName(String)
protected URL check(String version, URL codebase,