public class MLet extends URLClassLoader implements MLetMBean, MBeanRegistration, Externalizable
MLET
标记具有以下语法:
< MLET
CODE =
类 | OBJECT =
serfile
ARCHIVE = "
archiveList "
[CODEBASE =
codebaseURL ]
[NAME =
mbeanname ]
[VERSION =
版本 ]
>
[
arglist ]
< /MLET
>
哪里:
CODE =
类
.class
文件的MBean必须包含在一个.jar
由指定的文件ARCHIVE
属性。
必须存在CODE
或OBJECT
。
OBJECT =
serfile
.ser
文件。
此文件必须包含在一个.jar
由指定的文件ARCHIVE
属性。
如果.jar
文件包含目录层次结构,请指定此层次结构中文件的路径。
否则将找不到匹配项。
必须存在CODE
或OBJECT
。
ARCHIVE = "
archiveList "
.jar
MBean所使用的MBean或其他资源的.jar
文件。
.jar
文件之一必须包含由CODE
或OBJECT
属性指定的文件。
如果存档列表包含多个文件:
.jar
文件archiveList中必须存储在由代码库URL指定的目录。
CODEBASE =
codebaseURL
.jar
由指定的文件ARCHIVE
属性。
仅当.jar
文件与m-let文本文件不在同一目录中时才指定此属性。
如果未指定此属性,则使用m-let文本文件的基本URL。
NAME =
mbeanname
MBeanServer.getDefaultDomain()
返回。
VERSION =
版本
.jar
文件的版本号。
该版本号可用于指定从服务器加载.jar
文件,以便在下次加载m-let文本文件时更新本地存储在缓存中的文件。
版本必须是一系列非负十进制整数,每个十进制整数与之前的一个周期隔开。
ARG TYPE=
argumentType VALUE=
value >
参数列表中的参数类型应为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文件中找不到的类。
Constructor and Description |
---|
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 | Method and Description |
---|---|
void |
addURL(String url)
将指定的URL附加到URL列表中以搜索类和资源。
|
void |
addURL(URL url)
将指定的URL附加到URL列表中以搜索类和资源。
|
protected URL |
check(String version, URL codebase, String jarfile, MLetContent mlet)
当扩展此服务以支持缓存和版本控制时,该方法将被覆盖。
|
protected 类<?> |
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的搜索路径。
|
类<?> |
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 。
|
close, definePackage, findResource, findResources, getPermissions, getResourceAsStream, newInstance, newInstance
defineClass, defineClass
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
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
- 如果在父类ClassLoader或URL中找不到类的话,则MLet应该委托给其包含的MBeanServer ClassLoaderRepository
。
public MLet(URL[] urls, ClassLoader parent, boolean delegateToCLR)
urls
- 加载类和资源的URL。
parent
- 用于委派的父类加载器。
delegateToCLR
- 如果在父类ClassLoader或URL中找不到类时,则MLet应委托其包含的MBeanServer ClassLoaderRepository
。
public MLet(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory, boolean delegateToCLR)
urls
- 加载类和资源的URL。
parent
- 用于委派的父类加载器。
factory
- 创建URL时要使用的URLStreamHandlerFactory。
delegateToCLR
- 如果在父类ClassLoader或URL中找不到类时,则MLet应委托其包含的MBeanServer ClassLoaderRepository
。
public void addURL(URL url)
addURL
在界面
MLetMBean
addURL
在
URLClassLoader
url
- 要添加到URL搜索路径的URL
public void addURL(String url) throws ServiceNotFoundException
addURL
中的
MLetMBean
url
- 要添加的URL。
ServiceNotFoundException
- 指定的网址格式错误。
public URL[] getURLs()
getURLs
在接口
MLetMBean
getURLs
在类别
URLClassLoader
public Set<Object> getMBeansFromURL(URL url) throws ServiceNotFoundException
getMBeansFromURL
在界面
MLetMBean
url
- 要作为URL对象加载的文本文件的URL。
ServiceNotFoundException
- 发生以下错误之一:m-let文本文件不包含MLET标记,未找到m-let文本文件,未指定MLET标记的强制属性,url的值为null 。
IllegalStateException
- MLet MBean未注册到MBeanServer。
public Set<Object> getMBeansFromURL(String url) throws ServiceNotFoundException
getMBeansFromURL
在界面
MLetMBean
url
- 要作为String对象加载的文本文件的URL。
ServiceNotFoundException
- 发生以下错误之一:m-let文本文件不包含MLET标记,未找到m-let文本文件,未指定MLET标记的强制属性,URL格式错误。
IllegalStateException
- MLet MBean未向MBeanServer注册。
public String getLibraryDirectory()
getLibraryDirectory
在界面
MLetMBean
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。
setLibraryDirectory(java.lang.String)
public void setLibraryDirectory(String libdir)
setLibraryDirectory
在界面
MLetMBean
libdir
- 库加载器使用的目录。
UnsupportedOperationException
- 如果此实现不支持以这种方式存储本机库。
getLibraryDirectory()
public ObjectName preRegister(MBeanServer server, ObjectName name) throws 异常
preRegister
在界面
MBeanRegistration
server
- 将在其中注册m-let的MBean服务器。
name
- m-let的对象名。
异常
- MBean服务器应该捕获此异常,并重新抛出MBeanRegistrationException异常。
public void postRegister(Boolean registrationDone)
postRegister
在接口
MBeanRegistration
registrationDone
- 指示m-let是否已在MBean服务器中成功注册。
值false表示注册阶段失败。
public void preDeregister() throws 异常
preDeregister
在界面
MBeanRegistration
异常
- 这个异常应该被MBean服务器捕获,并重新抛出为MBeanRegistrationException。
public void postDeregister()
postDeregister
在界面
MBeanRegistration
public void writeExternal(ObjectOutput out) throws IOException, UnsupportedOperationException
将此MLet的内容保存到给定的ObjectOutput
。 并不是所有的实现都支持这种方法。 那些不抛出UnsupportedOperationException
。 子类可以覆盖此方法来支持它或更改写入的数据的格式。
写入数据的格式没有指定,但是如果一个实现支持writeExternal(java.io.ObjectOutput)
,那么它也必须支持readExternal(java.io.ObjectInput)
,这样一来,后者可以读取由前者写的内容。
writeExternal
在接口
Externalizable
out
- 要写入的对象输出流。
IOException
- 如果在写作时出现问题。
UnsupportedOperationException
- 如果此实现不支持此操作。
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException, UnsupportedOperationException
从给定的ObjectInput
恢复这个MLet的内容。 并不是所有的实现都支持这种方法。 那些没有抛出UnsupportedOperationException
。 子类可以覆盖此方法来支持它或更改读取数据的格式。
未指定读取数据的格式,但是如果一个实现支持readExternal(java.io.ObjectInput)
,那么它也必须支持writeExternal(java.io.ObjectOutput)
,以便后者可以读取后者的内容。
readExternal
在接口
Externalizable
in
- 要读取的对象输入流。
IOException
- 如果阅读时出现问题。
ClassNotFoundException
- 如果找不到正在恢复的对象的类。
UnsupportedOperationException
- 如果此实现不支持此操作。
public 类<?> loadClass(String name, ClassLoaderRepository clr) throws ClassNotFoundException
加载一个类,使用给定的ClassLoaderRepository
如果该类没有在这个MLet的URL中找到。 给定的ClassLoaderRepository可以为null,在这种情况下,如果在该MLet的URL中找不到该类,则会立即发生一个ClassNotFoundException
。
name
- 我们要加载的类的名称。
clr
- 将用于搜索给定类的ClassLoaderRepository,如果在此ClassLoader中未找到该类。
可能为null。
ClassNotFoundException
- 在此ClassLoader或给定的ClassLoaderRepository中找不到指定的类。
protected 类<?> findClass(String name) throws ClassNotFoundException
findClass
在
URLClassLoader
name
- 类的名称。
ClassNotFoundException
- 找不到指定的类。
protected String findLibrary(String libname)
OSName/OSArch/OSVersion/lib/nativelibname
),即
将在JAR文件中搜索Solaris SPARC 5.7上的库统计信息:
更具体地说,让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)
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不被加载
该异常将被添加到getMBeansFromURL
返回的集合中 。