- 所有已实现的接口:
-
NotificationBroadcaster,NotificationEmitter
- 直接已知的子类:
-
JMXConnectorServer,Monitor,RelationService,Timer
提供了NotificationEmitter接口的实现。这可以用作发送通知的 MBean 的超类。
默认情况下,通知分发模型是同步的。也就是说,当一个线程调用sendNotification时,每个监听器的NotificationListener.handleNotification方法都在该线程内调用。您可以通过在子类中重写handleNotification,或通过将Executor传递给构造函数来覆盖此默认行为。
如果过滤器或监听器的方法调用抛出一个Exception,那么该异常不会阻止调用其他监听器。但是,如果过滤器的方法调用或Executor.execute的方法调用或handleNotification的方法调用(当没有指定Executor时)抛出一个Error,那么该Error会传播给调用者sendNotification的方法。
使用JMX远程API(参见JMXConnector)添加的远程监听器通常不会同步调用。也就是说,当sendNotification返回时,并不能保证任何远程监听器已经收到通知。
- 自 JDK 版本:
- 1.5
-
Constructor Summary
ConstructorsConstructorDescription构造一个NotificationBroadcasterSupport,其中每个监听器都由发送通知的线程调用。NotificationBroadcasterSupport(Executor executor) 构造一个NotificationBroadcasterSupport,其中每个监听器都使用给定的Executor调用。NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info) 构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息,并且每个监听器都使用给定的Executor调用。构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息。 -
Method Summary
Modifier and TypeMethodDescriptionvoidaddNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个监听器。返回一个数组,指示此 MBean 可能发送的每个通知的通知的 Java 类名和通知类型。protected voidhandleNotification(NotificationListener listener, Notification notif, Object handback) 此方法由sendNotification为每个监听器调用,以便将通知发送给该监听器。void从此 MBean 中删除一个监听器。voidremoveNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 从此 MBean 中删除一个监听器。voidsendNotification(Notification notification) 发送一个通知。
-
Constructor Details
-
NotificationBroadcasterSupport
public NotificationBroadcasterSupport()构造一个NotificationBroadcasterSupport,其中每个监听器都由发送通知的线程调用。此构造函数等效于NotificationBroadcasterSupport(null, null)。 -
NotificationBroadcasterSupport
构造一个NotificationBroadcasterSupport,其中每个监听器都使用给定的Executor调用。当调用sendNotification时,如果使用空NotificationFilter添加了监听器,或者如果isNotificationEnabled为要发送的通知返回true,则选择一个监听器。调用NotificationFilter.isNotificationEnabled发生在调用sendNotification的线程中。然后,对于每个选定的监听器,调用executor.execute,并使用调用handleNotification方法的命令。此构造函数等效于NotificationBroadcasterSupport(executor, null)。- 参数:
-
executor- 一个由方法sendNotification使用的执行程序来发送每个通知。如果为null,则调用sendNotification的线程将自行调用handleNotification方法。 - 自 JDK 版本:
- 1.6
-
NotificationBroadcasterSupport
构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息。每个监听器都由发送通知的线程调用。此构造函数等效于
NotificationBroadcasterSupport(null, info)。如果
info数组不为空,则构造函数会将其克隆,就像通过info.clone()一样,并且每次调用getNotificationInfo()都会返回一个新的克隆。- 参数:
-
info- 一个数组,指示此 MBean 可能发送的每个通知的通知的 Java 类名和通知类型。可以为null,相当于一个空数组。 - 自 JDK 版本:
- 1.6
-
NotificationBroadcasterSupport
构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息,并且每个监听器都使用给定的
Executor调用。当调用
sendNotification时,如果使用空NotificationFilter添加了监听器,或者如果isNotificationEnabled为要发送的通知返回true,则选择一个监听器。调用NotificationFilter.isNotificationEnabled发生在调用sendNotification的线程中。然后,对于每个选定的监听器,调用executor.execute,并使用调用handleNotification方法的命令。如果
info数组不为空,则构造函数会将其克隆,就像通过info.clone()一样,并且每次调用getNotificationInfo()都会返回一个新的克隆。- 参数:
-
executor- 一个由方法sendNotification使用的执行程序来发送每个通知。如果为null,则调用sendNotification的线程将自行调用handleNotification方法。 -
info- 一个数组,指示此 MBean 可能发送的每个通知的通知的 Java 类名和通知类型。可以为null,相当于一个空数组。 - 自 JDK 版本:
- 1.6
-
-
Method Details
-
addNotificationListener
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个监听器。- 指定者:
-
addNotificationListener在接口NotificationBroadcaster中 - 参数:
-
listener- 接收通知的监听器。 -
filter- 过滤器对象。如果过滤器为null,则在处理通知之前不会执行任何过滤。 -
handback- 一个不透明对象,在发出通知时发送回监听器。此对象不能被通知广播器对象使用。应该将其不变地与通知一起重新发送给监听器。 - 抛出:
-
IllegalArgumentException- 如果监听器为null,则抛出。 - 参见:
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException 从接口复制的描述:NotificationBroadcaster从此 MBean 中删除一个监听器。如果监听器已经注册了不同的handback对象或通知过滤器,则将删除与监听器对应的所有条目。- 指定者:
-
removeNotificationListener在接口NotificationBroadcaster中 - 参数:
-
listener- 先前添加到此MBean的监听器。 - 抛出:
-
ListenerNotFoundException- 该监听器未在MBean中注册。 - 参见:
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException 从接口中复制的描述:NotificationEmitter从此MBean中移除一个监听器。MBean必须具有与给定的
listener、filter和handback参数完全匹配的监听器。如果存在多个这样的监听器,则只会移除一个。如果
filter和handback参数为null,则只有在要移除的监听器中它们为null时才为null。- 指定者:
-
removeNotificationListener在接口NotificationEmitter中 - 参数:
-
listener- 先前添加到此MBean的监听器。 -
filter- 添加监听器时指定的过滤器。 -
handback- 添加监听器时指定的handback。 - 抛出:
-
ListenerNotFoundException- 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。
-
getNotificationInfo
从接口中复制的描述:NotificationBroadcaster返回一个数组,指示此MBean可能发送的每个通知的Java类的名称和通知类型。
MBean发送未在此数组中描述的通知并不违法。但是,MBean服务器的一些客户端可能依赖于该数组完整以确保其正确运行。
- 指定者:
-
getNotificationInfo在接口NotificationBroadcaster中 - 返回:
- 可能通知的数组。
-
sendNotification
发送通知。如果在构造函数中指定了一个Executor,则将为每个选定的监听器提供一个任务以将通知传递给该监听器。- 参数:
-
notification- 要发送的通知。
-
handleNotification
protected void handleNotification(NotificationListener listener, Notification notif, Object handback) 此方法由
sendNotification为了将通知发送给该监听器而为每个监听器调用。可以在子类中重写此方法以更改通知传递的行为,例如在单独的线程中传递通知。此方法的默认实现等效于
listener.handleNotification(notif, handback);
- 参数:
-
listener- 正在传递通知的监听器。 -
notif- 要传递给监听器的通知。 -
handback- 在添加监听器时提供的handback对象。
-