public JMXManageableXMBean(final JMXManageable manageable, URL url)
        throws NotCompliantMBeanException, MBeanException {
      super(manageable, url);

      types_ = manageable.getJMXNotificationTypes();

      manageable.setJMXCallback(
          new JMXManageable.JMXCallback() {

            public void sendJMXNotification(String type, String message) {
              broadCaster_.sendNotification(
                  new Notification(
                      type, // type
                      manageable, // source
                      ++notificationSequence_, // seq. number
                      message // message
                      ));
            }

            public void sendJMXAttributeChanged(String name, Object oldValue, Object newValue) {
              broadCaster_.sendNotification(
                  new AttributeChangeNotification(
                      manageable,
                      ++notificationSequence_,
                      System.currentTimeMillis(),
                      "Attribute value changed",
                      name,
                      oldValue == null ? null : oldValue.getClass().getName(),
                      oldValue,
                      newValue));
            }

            public void sendJMXNotification(String type, String message, Object payload) {
              sendJMXNotification(type, message);
            }
          });
    }