# Class MBeanServerNotification

java.lang.Object
java.util.EventObject
javax.management.Notification
javax.management.MBeanServerNotification

All Implemented Interfaces:
  `Serializable`

public class MBeanServerNotification extends Notification
Represents a notification emitted by the MBean Server through the MBeanServerDelegate MBean. The MBean Server emits the following types of notifications: MBean registration, MBean unregistration.

To receive MBeanServerNotifications, you need to register a listener with the `MBeanServerDelegate` MBean that represents the MBeanServer. The ObjectName of the MBeanServerDelegate is `MBeanServerDelegate.DELEGATE_NAME`, which is `JMImplementation:type=MBeanServerDelegate`.

The following code prints a message every time an MBean is registered or unregistered in the MBean Server `mbeanServer`:

    private static final NotificationListener printListener = new NotificationListener() {
        public void handleNotification(Notification n, Object handback) {
            if (!(n instanceof MBeanServerNotification)) {
                System.out.println("Ignored notification of class " + n.getClass().getName());
                return;
            }
            MBeanServerNotification mbsn = (MBeanServerNotification) n;
            String what;
            if (n.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION))
                what = "MBean registered";
            else if (n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION))
                what = "MBean unregistered";
            else
                what = "Unknown type " + n.getType();
            System.out.println("Received MBean Server notification: " + what + ": " +
                    mbsn.getMBeanName());
        }
    };

    ...
        mbeanServer.addNotificationListener(
                MBeanServerDelegate.DELEGATE_NAME, printListener, null, null);

An MBean which is not an `MBeanServerDelegate` may also emit MBeanServerNotifications. In particular, there is a convention for MBeans to emit an MBeanServerNotification for a group of MBeans.

An MBeanServerNotification emitted to denote the registration or unregistration of a group of MBeans has the following characteristics:

- Its notification type is `"JMX.mbean.registered.group"` or `"JMX.mbean.unregistered.group"`, which can also be written `REGISTRATION_NOTIFICATION``+ ".group"` or `UNREGISTRATION_NOTIFICATION``+ ".group"`.
- Its MBean name is an ObjectName pattern that selects the set (or a superset) of the MBeans being registered or unregistered
- Its user data can optionally be set to an array of ObjectNames containing the names of all MBeans being registered or unregistered.

MBeans which emit these group registration/unregistration notifications will declare them in their `MBeanNotificationInfo`.

Since:
  1.5
See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `REGISTRATION_NOTIFICATION`
  Notification type denoting that an MBean has been registered.
  `static final String`
  `UNREGISTRATION_NOTIFICATION`
  Notification type denoting that an MBean has been unregistered.

  ### Fields declared in class Notification

  `source`
  Modifier and Type
  Field
  Description
  `protected Object`
  `source`
  This field hides the `EventObject.source` field in the parent class to make it non-transient and therefore part of the serialized form.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MBeanServerNotification(String type, Object source, long sequenceNumber, ObjectName objectName)`
  Creates an MBeanServerNotification object specifying object names of the MBeans that caused the notification and the specified notification type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ObjectName`
  `getMBeanName()`
  Returns the object name of the MBean that caused the notification.

  ### Methods declared in class Notification

  `getMessage, getSequenceNumber, getTimeStamp, getType, getUserData, setSequenceNumber, setSource, setTimeStamp, setUserData, toString`
  Modifier and Type
  Method
  Description
  `String`
  `getMessage()`
  Get the notification message.
  `long`
  `getSequenceNumber()`
  Get the notification sequence number.
  `long`
  `getTimeStamp()`
  Get the notification timestamp.
  `String`
  `getType()`
  Get the notification type.
  `Object`
  `getUserData()`
  Get the user data.
  `void`
  `setSequenceNumber(long sequenceNumber)`
  Set the notification sequence number.
  `void`
  `setSource(Object source)`
  Sets the source.
  `void`
  `setTimeStamp(long timeStamp)`
  Set the notification timestamp.
  `void`
  `setUserData(Object userData)`
  Set the user data.
  `String`
  `toString()`
  Returns a String representation of this notification.

  ### Methods declared in class EventObject

  `getSource`
  Modifier and Type
  Method
  Description
  `Object`
  `getSource()`
  The object on which the Event initially occurred.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Field Details

  - ### REGISTRATION_NOTIFICATION

    public static final String REGISTRATION_NOTIFICATION
    Notification type denoting that an MBean has been registered. Value is "JMX.mbean.registered".
    See Also:
      - Constant Field Values

  - ### UNREGISTRATION_NOTIFICATION

    public static final String UNREGISTRATION_NOTIFICATION
    Notification type denoting that an MBean has been unregistered. Value is "JMX.mbean.unregistered".
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### MBeanServerNotification

    public MBeanServerNotification(String type, Object source, long sequenceNumber, ObjectName objectName)
    Creates an MBeanServerNotification object specifying object names of the MBeans that caused the notification and the specified notification type.
    Parameters:
      `type` - A string denoting the type of the notification. Set it to one these values: `REGISTRATION_NOTIFICATION`, `UNREGISTRATION_NOTIFICATION`.
      `source` - The MBeanServerNotification object responsible for forwarding MBean server notification.
      `sequenceNumber` - A sequence number that can be used to order received notifications.
      `objectName` - The object name of the MBean that caused the notification.

- ## Method Details

  - ### getMBeanName

    public ObjectName getMBeanName()
    Returns the object name of the MBean that caused the notification.
    Returns:
      the object name of the MBean that caused the notification.