準拠しているすべての MBeanServer は、リスナーに MBean の登録および登録解除イベントを通知します。重要なのは、MBeanServerDelegate に通知リスナーを登録することです。
たとえば、javax.management.NotificationListener実装:
public class MBeanEventListener implements NotificationListener {
public void handleNotification(Notification notification, Object handback) {
MBeanServerNotification mbs = (MBeanServerNotification) notification;
if(MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(mbs.getType())) {
log("MBean Registered [" + mbs.getMBeanName() + "]");
} else if(MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(mbs.getType())) {
log("MBean Unregistered [" + mbs.getMBeanName() + "]");
}
}
}
リスナーを登録するには、 MBeanServerDelegateに対して通知リスナーを追加します。実際に通知される MBean をフィルタリングする場合は、 MBeanServerNotificationFilterを使用できます。この例では、フィルターはすべての ObjectNames に対して有効になっています。
// Get a reference to the target MBeanServer
MBeanServerConnection server = ManagementFactory.getPlatformMBeanServer();
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
filter.enableAllObjectNames();
server.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, new MBeanEventListener(), filter, null);
リスナーの実装は、MBean が登録または登録解除されるたびにコールバックを取得します。