public abstract class JMXConnectorServer extends NotificationBroadcasterSupport implements JMXConnectorServerMBean, MBeanRegistration, JMXAddressable
每个连接器服务器的超类。 连接器服务器连接到MBean服务器。 它监听客户端连接请求,并为每个连接请求创建一个连接。
连接器服务器通过在MBean服务器中注册或通过将MBean服务器传递给其构造函数与MBean服务器相关联。
连接器服务器在创建时不起作用。 当调用start
方法时,它才开始侦听客户端连接。 当调用stop
方法或连接器服务器从其MBean服务器未注册时,连接器服务器停止侦听客户端连接。
停止连接器服务器不会从其MBean服务器取消注册。 停止连接器服务器无法重新启动。
每次建立或断开客户端连接时,都会发出JMXConnectionNotification
类的通知 。
Modifier and Type | Field and Description |
---|---|
static String |
AUTHENTICATOR
指定连接器服务器的认证器的属性的名称。
|
Constructor and Description |
---|
JMXConnectorServer()
构造一个连接器服务器,该连接器服务器将在其所连接的MBean服务器中注册为MBean。
|
JMXConnectorServer(MBeanServer mbeanServer)
构造一个连接到给定MBean服务器的连接器服务器。
|
Modifier and Type | Method and Description |
---|---|
protected void |
connectionClosed(String connectionId, String message, Object userData)
当客户端连接正常关闭时,由子类调用。
|
protected void |
connectionFailed(String connectionId, String message, Object userData)
当客户端连接失败时由子类调用。
|
protected void |
connectionOpened(String connectionId, String message, Object userData)
当新的客户端连接打开时由子类调用。
|
String[] |
getConnectionIds()
此连接器服务器当前打开的连接的ID列表。
|
MBeanServer |
getMBeanServer()
返回此连接器服务器连接到的MBean服务器。
|
MBeanNotificationInfo[] |
getNotificationInfo()
返回一个数组,指示此MBean发送的通知。
|
void |
postDeregister()
允许MBean在MBean服务器中取消注册后执行所需的任何操作。
|
void |
postRegister(Boolean registrationDone)
允许MBean在MBean服务器中注册或注册失败后执行所需的操作。
|
void |
preDeregister()
当该连接器服务器从该MBean服务器取消注册时,由MBean服务器调用。
|
ObjectName |
preRegister(MBeanServer mbs, ObjectName name)
当该连接器服务器在该MBean服务器中注册时,由MBean服务器调用。
|
void |
setMBeanServerForwarder(MBeanServerForwarder mbsf)
插入一个对象,拦截通过此连接器服务器到达的MBean服务器的请求。
|
JMXConnector |
toJMXConnector(Map<String,?> env)
返回此连接器服务器的客户端存根。
|
addNotificationListener, handleNotification, removeNotificationListener, removeNotificationListener, sendNotification
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAddress, getAttributes, isActive, start, stop
getAddress
public static final String AUTHENTICATOR
指定连接器服务器的认证器的属性的名称。 与此属性关联的值,如果有的话,必须是实现该接口的对象JMXAuthenticator
。
public JMXConnectorServer()
构造一个连接器服务器,该连接器服务器将在其所连接的MBean服务器中注册为MBean。 在MBean服务器中创建使远程可用的连接器服务器时,此构造函数通常由createMBean
之一调用。
public JMXConnectorServer(MBeanServer mbeanServer)
构造一个连接到给定MBean服务器的连接器服务器。 以这种方式创建的连接器服务器可以在不同的MBean服务器中注册,也可以不在任何MBean服务器中注册。
mbeanServer
- 此连接器服务器连接到的MBean服务器。
如果此连接器服务器将通过注册到MBean服务器,则为空。
public MBeanServer getMBeanServer()
返回此连接器服务器连接到的MBean服务器。
public void setMBeanServerForwarder(MBeanServerForwarder mbsf)
JMXConnectorServerMBean
插入一个对象,拦截通过此连接器服务器到达的MBean服务器的请求。 该对象将作为MBeanServer
提供,用于由此连接器服务器创建的任何新连接。 现有连接不受影响。
该方法可以使用不同的MBeanServerForwarder
对象多次调用 。 结果是一连串的代理商。 最后一名货车是连锁店的第一名。 更详细地说:
如果此连接器服务器已与MBeanServer
对象关联,则该对象将发送给mbsf.setMBeanServer
。 如果这样做会产生异常,则此方法会引发相同的异常,而不会产生任何其他影响。
如果此连接器尚未与MBeanServer
对象关联,或者如果刚刚提到的mbsf.setMBeanServer
呼叫成功,则mbsf
将成为此连接器服务器的MBeanServer
。
setMBeanServerForwarder
在接口
JMXConnectorServerMBean
mbsf
- 全新
MBeanServerForwarder
。
public String[] getConnectionIds()
JMXConnectorServerMBean
此连接器服务器当前打开的连接的ID列表。
getConnectionIds
在接口
JMXConnectorServerMBean
public JMXConnector toJMXConnector(Map<String,?> env) throws IOException
返回此连接器服务器的客户端存根。 客户端存根是一个可串行化的对象,其connect
方法可用于与此连接器服务器建立一个新连接。
给定的连接器不需要支持生成客户端存根。 但是,由JMX Remote API指定的连接器(JMXMP Connector和RMI Connector)。
该方法的默认实现使用JMXConnectorServerMBean.getAddress()
和JMXConnectorFactory
生成存根,其代码等同于以下内容:
JMXServiceURL addr = getAddress()
;
return JMXConnectorFactory.newJMXConnector(addr, env)
;
这个不合适的连接器服务器必须覆盖此方法,以便它实现相应的逻辑或者抛出UnsupportedOperationException
。
toJMXConnector
在界面
JMXConnectorServerMBean
env
- 可以提供给JMXConnector.connect(Map)
的相同排序的客户端连接参数 。
可以为空,这相当于一个空的地图。
UnsupportedOperationException
- 如果此连接器服务器不支持生成客户端存根。
IllegalStateException
- 如果JMXConnectorServer未启动(请参阅
JMXConnectorServerMBean.isActive()
)。
IOException
- 如果通信问题意味着无法创建存根。
public MBeanNotificationInfo[] getNotificationInfo()
返回一个数组,指示此MBean发送的通知。 JMXConnectorServer中的JMXConnectorServer
返回一个包含一个元素的数组,表明它可以发出类别中定义的类别JMXConnectionNotification
的通知 。 可以发出其他通知的子类应该返回一个包含该元素的数组以及其他通知的描述。
getNotificationInfo
在界面
NotificationBroadcaster
getNotificationInfo
在
NotificationBroadcasterSupport
protected void connectionOpened(String connectionId, String message, Object userData)
当新的客户端连接打开时由子类调用。 将connectionId
添加到由getConnectionIds()
返回的列表中,然后发出JMXConnectionNotification
类型为JMXConnectionNotification.OPENED
。
connectionId
- 新连接的ID。
这必须与以前由此连接器服务器打开的任何连接的ID不同。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
- userData
发出的JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。
NullPointerException
- 如果
connectionId
为空。
protected void connectionClosed(String connectionId, String message, Object userData)
当客户端连接正常关闭时,由子类调用。 删除connectionId
从返回的列表getConnectionIds()
,然后发出JMXConnectionNotification
型JMXConnectionNotification.CLOSED
。
connectionId
- 已关闭连接的ID。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
- userData
发出的JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。
NullPointerException
- 如果
connectionId
为空。
protected void connectionFailed(String connectionId, String message, Object userData)
当客户端连接失败时由子类调用。 删除connectionId
从返回的列表getConnectionIds()
,然后发出JMXConnectionNotification
型JMXConnectionNotification.FAILED
。
connectionId
- 连接失败的ID。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
- userData
发出的JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。
NullPointerException
- 如果
connectionId
为空。
public ObjectName preRegister(MBeanServer mbs, ObjectName name)
当该连接器服务器在该MBean服务器中注册时,由MBean服务器调用。 该连接器服务器连接到MBean服务器,其getMBeanServer()
方法将返回mbs
。
如果此连接器服务器已连接到MBean服务器,则此方法不起作用。 它附加的MBean服务器不一定是它正在注册的。
preRegister
在界面
MBeanRegistration
mbs
- 正在注册此连接服务器的MBean服务器。
name
- MBean的对象名称。
NullPointerException
- 如果
mbs
或
name
为空。
public void postRegister(Boolean registrationDone)
MBeanRegistration
如果这种方法的实现引发了一个RuntimeException
或Error
,那么MBean服务器将会分别在RuntimeMBeanException
或RuntimeErrorException
中重新抛出。 但是,在postRegister中postRegister
将不会更改MBean的状态:如果MBean已经注册( registrationDone
是true
),则MBean将保持注册。
这可能会导致调用createMBean()
或registerMBean()
的代码createMBean()
registerMBean()
,因为这样的代码可能会假设在引发异常时MBean注册失败。 因此,如果可以避免,建议postRegister
实现不会抛出运行时异常或错误。
postRegister
在接口
MBeanRegistration
registrationDone
- 指示MBean是否已在MBean服务器中成功注册。
值false表示注册阶段失败。
public void preDeregister() throws 异常
当该连接器服务器从该MBean服务器取消注册时,由MBean服务器调用。 如果此连接器服务器通过在其中注册到该MBean服务器,并且如果连接器服务器仍处于活动状态,则取消注册将调用stop
方法。 如果stop
方法抛出异常,则注销尝试将失败。 建议在取消注册MBean之前调用stop
方法。
preDeregister
在接口
MBeanRegistration
IOException
- 如果抛出
stop
方法。
异常
- 此异常将被MBean服务器捕获,并重新抛出为MBeanRegistrationException
。
public void postDeregister()
MBeanRegistration
如果这种方法的实现会引发一个RuntimeException
或一个Error
,那么MBean服务器将会分别在RuntimeMBeanException
或RuntimeErrorException
内重新抛出。 但是,在postDeregister中postDeregister
将不会更改MBean的状态:MBean已经成功取消注册,并将保持不变。
这可能会导致调用unregisterMBean()
的代码unregisterMBean()
,因为它可能会假设MBean注销失败。 因此,建议的实现postDeregister
不抛出运行时异常或错误,如果能够避免它。
postDeregister
在界面
MBeanRegistration