- 所有已实现的接口:
-
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
ConstructorDescription构造一个NotificationBroadcasterSupport,其中每个监听器都由发送通知的线程调用。NotificationBroadcasterSupport
(Executor executor) 构造一个NotificationBroadcasterSupport,其中每个监听器都使用给定的Executor
调用。NotificationBroadcasterSupport
(Executor executor, MBeanNotificationInfo... info) 构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息,并且每个监听器都使用给定的Executor
调用。构造一个NotificationBroadcasterSupport,其中包含可以发送的通知的信息。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
addNotificationListener
(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个监听器。返回一个数组,指示此 MBean 可能发送的每个通知的通知的 Java 类名和通知类型。protected void
handleNotification
(NotificationListener listener, Notification notif, Object handback) 此方法由sendNotification
为每个监听器调用,以便将通知发送给该监听器。void
从此 MBean 中删除一个监听器。void
removeNotificationListener
(NotificationListener listener, NotificationFilter filter, Object handback) 从此 MBean 中删除一个监听器。void
sendNotification
(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对象。
-