java.lang.Object javax.management.MBeanServerFactory
public class MBeanServerFactory
提供 MBean 服务器引用。没有此类的实例。
从 JMX 1.2 开始,此类使替换默认的 MBeanServer 实现成为可能。使用 MBeanServerBuilder
类实现此替换。可通过 javax.management.builder.initial 系统属性指定要实例化的初始 MBeanServerBuilder 的类。指定的类必须是 MBeanServerBuilder
的公共子类,并且必须具有公共的空构造方法。
默认情况下,如果未指定该属性的值,则创建一个 javax.management.MBeanServerBuilder
的实例。否则,MBeanServerFactory 会试图使用 Thread.currentThread().getContextClassLoader()
加载指定的类,如果该属性值为 null,则使用 Class.forName()
加载指定的类。然后它使用 Class.newInstance()
创建该 Class 的初始实例。如果在此过程中(例如 ClassNotFoundException
、InstantiationException
)引发已检查异常,则该 MBeanServerFactory 将从 RuntimeException 内传播此异常。
每次需要创建新的 MBeanServer 时都会查询 javax.management.builder.initial 系统属性,并加载该属性所指向的类。如果该类与当前的 MBeanServerBuilder 的类不同,则创建一个新的 MBeanServerBuilder。否则,MBeanServerFactory 可能创建一个新的 MBeanServerBuilder 或重用当前的 MBeanServerBuilder。
如果无法加载该属性所指向的类,或者该属性所指向的类不对应于有效的 MBeanServerBuilder 子类,则抛出一个异常,并且在将 javax.management.builder.initial 系统属性重置为有效值之前,不能创建任何 MBeanServer。
出于某种目的,例如添加一个额外的安全层,MBeanServerBuilder 使得包装默认 MBeanServerBuilder 实现所返回的 MBeanServer 成为可能。
方法摘要 | |
---|---|
static MBeanServer |
createMBeanServer() 返回一个新对象,该对象使用标准的默认域名来实现 MBeanServer 接口。 |
static MBeanServer |
createMBeanServer(String domain) 返回一个新对象,该对象使用指定的默认域名来实现 MBeanServer 接口。 |
static ArrayList<MBeanServer> |
findMBeanServer(String agentId) 返回已注册 MBeanServer 对象的列表。 |
static ClassLoaderRepository |
getClassLoaderRepository(MBeanServer server) 返回给定 MBeanServer 使用的 ClassLoaderRepository。 |
static MBeanServer |
newMBeanServer() 返回一个新对象,该对象使用标准的默认域名来实现 MBeanServer 接口,不保持对此新对象的内部引用。 |
static MBeanServer |
newMBeanServer(String domain) 返回一个新对象,该对象使用指定的默认域名来实现 MBeanServer 接口,不保持对此新对象的内部引用。 |
static void |
releaseMBeanServer(MBeanServer mbeanServer) 移除对已创建 MBeanServer 的内部 MBeanServerFactory 引用。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
方法详细信息 |
---|
public static void releaseMBeanServer(MBeanServer mbeanServer)
mbeanServer
- 要移除的 MBeanServer 对象。
IllegalArgumentException
- 如果未通过某个
createMBeanServer
方法生成
mbeanServer
,或者如果已在该 mbeanServer 上调用
releaseMBeanServer
。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("releaseMBeanServer")
。
public static MBeanServer createMBeanServer()
返回一个新对象,该对象使用标准的默认域名来实现 MBeanServer 接口。如果用户指定的域为 null,则将默认域名用作 MBean 的 ObjectName 的域部分。
标准的默认域名是 DefaultDomain
。
内部保存该 MBeanServer 引用。这就允许 findMBeanServer
返回对此 MBeanServer 对象的引用。
此方法等效于 createMBeanServer(null)
。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("createMBeanServer")
。
JMRuntimeException
- 如果属性
javax.management.builder.initial
存在,但是无法通过公共的无参数构造方法实例化它所指定的类;如果已实例化的生成器从其
newMBeanServerDelegate
或
newMBeanServer
方法中返回 null。
ClassCastException
- 如果属性
javax.management.builder.initial
存在并且可以被实例化,但是它的分配与
MBeanServerBuilder
不兼容。
public static MBeanServer createMBeanServer(String domain)
返回一个新对象,该对象使用指定的默认域名来实现 MBeanServer
接口。如果用户指定的域为 null,则将给定的域名用作 MBean 的 ObjectName 的域部分。
内部保存该 MBeanServer 引用。这就允许 findMBeanServer
返回对此 MBeanServer 对象的引用。
domain
- 所创建的 MBeanServer 的默认域名。这是
MBeanServer.getDefaultDomain()
所返回的值。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("createMBeanServer")
。
JMRuntimeException
- 如果属性
javax.management.builder.initial
存在,但是无法通过公共的无参数构造方法实例化它所指定的类;如果已实例化的生成器从其
newMBeanServerDelegate
或
newMBeanServer
方法中返回 null。
ClassCastException
- 如果属性
javax.management.builder.initial
存在并且可以被实例化,但是它的分配与
MBeanServerBuilder
不兼容。
public static MBeanServer newMBeanServer()
返回一个新对象,该对象使用标准的默认域名来实现 MBeanServer 接口,不保持对此新对象的内部引用。如果用户指定的域为 null,则将默认域名用作 MBean 的 ObjectName 的域部分。
标准的默认域名是 DefaultDomain
。
不保存引用。findMBeanServer
无法返回对此 MBeanServer 对象的引用,但是没有对该 MBeanServer 的引用时,垃圾回收器能够移除该 MBeanServer 对象。
此方法等效于 newMBeanServer(null)
。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("newMBeanServer")
。
JMRuntimeException
- 如果属性
javax.management.builder.initial
存在,但是无法通过公共的无参数构造方法实例化它所指定的类;如果已实例化的生成器从其
newMBeanServerDelegate
或
newMBeanServer
方法中返回 null。
ClassCastException
- 如果属性
javax.management.builder.initial
存在并且可以被实例化,但是它的分配与
MBeanServerBuilder
不兼容。
public static MBeanServer newMBeanServer(String domain)
返回一个新对象,该对象使用指定的默认域名来实现 MBeanServer 接口,不保持对此新对象的内部引用。如果用户指定的域为 null,则将给定的域名用作 MBean 的 ObjectName 的域部分。
不保存引用。findMBeanServer
无法返回对此 MBeanServer 对象的引用,但是没有对该 MBeanServer 的引用时,垃圾回收器能够移除该 MBeanServer 对象。
domain
- 所创建的 MBeanServer 的默认域名。这是
MBeanServer.getDefaultDomain()
将要返回的值。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("newMBeanServer")
。
JMRuntimeException
- 如果属性
javax.management.builder.initial
存在,但是无法通过公共的无参数构造方法实例化它所指定的类;如果已实例化的生成器从其
newMBeanServerDelegate
或
newMBeanServer
方法中返回 null。
ClassCastException
- 如果属性
javax.management.builder.initial
存在并且可以被实例化,但是它的分配与
MBeanServerBuilder
不兼容。
public static ArrayList<MBeanServer> findMBeanServer(String agentId)
返回已注册 MBeanServer 对象的列表。已注册的 MBeanServer 对象是通过某个 createMBeanServer
方法创建并且随后未使用 releaseMBeanServer
释放的 MBeanServer。
agentId
- 要检索的 MBeanServer 的代理标识符。如果此参数为 null,则返回此 JVM 中的所有已注册 MBeanServer。否则只返回其 id 等于
agentId
的 MBeanServer。MBeanServer 的 id 是其委托 MBean 的
MBeanServerId
属性。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanServerPermission
("findMBeanServer")
。
public static ClassLoaderRepository getClassLoaderRepository(MBeanServer server)
server.getClassLoaderRepository()
。
server
- 要检查的 MBeanServer。从 JMX 1.2 开始,如果
server
为
null
,则结果是
NullPointerException
。此行为与 JMX 1.1 中相应实现的行为不同 - 已不再使用
null
值。
SecurityException
- 如果有 SecurityManager 且调用者的权限不包括或隐含
MBeanPermission
("getClassLoaderRepository")
。
NullPointerException
- 如果
server
为 null。