java.lang.Object javax.management.NotificationBroadcasterSupport
public class NotificationBroadcasterSupport
提供 NotificationEmitter
接口的实现。该类可以用作发送通知的 MBean 的超类。
默认情况下,通知调度模型是同步的。也就是说,当某一线程调用 sendNotification 时,将在该线程中调用每个侦听器的 NotificationListener.handleNotification
方法。可以通过重写子类中的 handleNotification
或者通过将 Executor 传递给构造方法来重写此默认值。
如果过滤器或侦听器的方法调用抛出 Exception
,则该异常不会阻止调用其他侦听器。不过,如果过滤器、Executor.execute
或 handleNotification
的方法调用(未指定任何 Excecutor
时)抛出 Error
,则将该 Error
传播到 sendNotification
的调用者。
通常不会同步调用使用 JMX Remote API 添加的远程侦听器(请参阅 JMXConnector)。也就是说,当 sendNotification 返回时,不保证任何远程侦听器都已经收到通知。
构造方法摘要 | |
---|---|
NotificationBroadcasterSupport() 构造一个 NotificationBroadcasterSupport,其中的每个侦听器都由发送通知的线程调用。 |
|
NotificationBroadcasterSupport(Executor executor) 构造一个 NotificationBroadcasterSupport,其中的每个侦听器都是使用给定 Executor 调用的。 |
|
NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info) 使用关于可能发送的通知的信息构造一个 NotificationBroadcasterSupport,其中的每个侦听器都是使用给定 Executor 调用的。 |
|
NotificationBroadcasterSupport(MBeanNotificationInfo... info) 使用关于可能发送的通知的信息构造一个 NotificationBroadcasterSupport。 |
方法摘要 | |
---|---|
void |
addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个侦听器。 |
MBeanNotificationInfo[] |
getNotificationInfo() 返回一个数组,指示此 MBean 可能发送的每个通知的 Java 类名和通知类型。 |
protected void |
handleNotification(NotificationListener listener, Notification notif, Object handback) 为了向侦听器发送通知,由该侦听器的 sendNotification 调用此方法。 |
void |
removeNotificationListener(NotificationListener listener) 从此 MBean 移除一个侦听器。 |
void |
removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 从此 MBean 移除一个侦听器。 |
void |
sendNotification(Notification notification) 发送一个通知。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public NotificationBroadcasterSupport()
NotificationBroadcasterSupport(null, null)
。
public NotificationBroadcasterSupport(Executor executor)
Executor
调用的。在调用
sendNotification
时,如果使用 null
NotificationFilter
添加了某个侦听器,或者如果
isNotificationEnabled
为正在发送的通知返回 true,则选择该侦听器。对
NotificationFilter.isNotificationEnabled
的调用发生在调用了
sendNotification
的线程中。然后使用调用
handleNotification
方法的命令为每个选定的侦听器调用
executor.execute
。此构造方法等效于
NotificationBroadcasterSupport(executor, null)
。
executor
- 由方法
sendNotification
用来发送每个通知的执行程序。如果该参数为 null,则调用
sendNotification
的线程将调用
handleNotification
方法本身。
public NotificationBroadcasterSupport(MBeanNotificationInfo... info)
使用关于可能发送的通知的信息构造一个 NotificationBroadcasterSupport。每个侦听器都由发送通知的线程调用。此构造方法等效于 NotificationBroadcasterSupport(null, info)
。
如果 info
数组不为空,则由该构造方法复制它,这类似于使用 info.clone()
,并且对 getNotificationInfo()
的每次调用都返回一个新副本。
info
- 一个数组,指示此 MBean 可能发送的每个通知、这些通知的 Java 类的名称和通知类型。该数组可以为 null,它等效于一个空数组。
public NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info)
使用关于可能发送的通知的信息构造一个 NotificationBroadcasterSupport,其中的每个侦听器都是使用给定 Executor
调用的。
在调用 sendNotification
时,如果使用 null NotificationFilter
添加了某个侦听器,或者如果 isNotificationEnabled
为正在发送的通知返回 true,则选择该侦听器。对 NotificationFilter.isNotificationEnabled
的调用发生在调用了 sendNotification
的线程中。然后使用调用 handleNotification
方法的命令为每个选定的侦听器调用 executor.execute
。
如果 info
数组不为空,则由该构造方法复制它,这类似于使用 info.clone()
,并且对 getNotificationInfo()
的每次调用都返回一个新副本。
executor
- 由方法
sendNotification
用来发送每个通知的执行程序。如果该参数为 null,则调用
sendNotification
的线程将调用
handleNotification
方法本身。
info
- 一个数组,指示此 MBean 可能发送的每个通知、这些通知的 Java 类的名称和通知类型。该数组可以为 null,它等效于一个空数组。
方法详细信息 |
---|
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
NotificationBroadcaster
中的
addNotificationListener
listener
- 要接收通知的侦听器。
filter
- 过滤器对象。如果 filter 为 null,则处理通知前不执行过滤。
handback
- 发出通知时要发送到侦听器的不透明对象。Notification 广播者对象不能使用此对象。应该不作更改地将通知重新发送到侦听器。
IllegalArgumentException
- 如果 listener 为 null。
removeNotificationListener(javax.management.NotificationListener)
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
NotificationBroadcaster
复制的描述
listener
- 以前添加到此 MBean 中的侦听器。
ListenerNotFoundException
- 如果没有在 MBean 中注册该侦听器。
NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
,
NotificationEmitter.removeNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException
NotificationEmitter
复制的描述
从此 MBean 移除一个侦听器。该 MBean 必须有一个与给定 listener
、filter
和 handback
参数完全匹配的侦听器。如果有多个此类侦听器,则只移除一个侦听器。
当且仅当在要移除的侦听器中 filter
和 handback
参数为 null 时,这两个参数才可以为 null。
NotificationEmitter
中的
removeNotificationListener
listener
- 以前添加到此 MBean 中的侦听器。
filter
- 添加侦听器时指定的过滤器。
handback
- 添加侦听器时指定的回送。
ListenerNotFoundException
- 如果没有在该 MBean 中注册侦听器,或者没有用给定的过滤器和回送注册它。
public MBeanNotificationInfo[] getNotificationInfo()
NotificationBroadcaster
复制的描述
返回一个数组,指示此 MBean 可能发送的每个通知的 Java 类名和通知类型。
MBean 发送此数组中未描述的通知是合法的。但是,某些 MBean 服务器的客户端要想正常运行,可能要依赖完整的数组。
NotificationBroadcaster
中的
getNotificationInfo
public void sendNotification(Notification notification)
Executor
,则为每个选定的侦听器提供一项任务,以便将通知发送给该侦听器。
notification
- 要发送的通知。
protected void handleNotification(NotificationListener listener, Notification notif, Object handback)
为了向侦听器发送通知,由该侦听器的 sendNotification
调用此方法。在子类中可重写此方法,以更改通知传递的行为,例如在一个单独的线程中传递该通知。
此方法的默认实现等效于
listener.handleNotification(notif, handback);
listener
- 要接收通知的侦听器。
notif
- 传递给侦听器的通知。
handback
- 添加侦听器时提供的回调对象。