private void removeAttributeChangeNotificationListener(NotificationListener listener,
      String attributeName, Object handback)
      throws MBeanException, RuntimeOperationsException, ListenerNotFoundException {
    if (listener == null) {
      throw new RuntimeOperationsException(new IllegalArgumentException(
          "Listener cannot be null."));
    }
    AttributeChangeNotificationFilter filter = new AttributeChangeNotificationFilter();
    if (attributeName != null) {
      filter.enableAttribute(attributeName);
    } else {
      MBeanAttributeInfo[] ai = m_modelMBeanInfo.getAttributes();
      for (final MBeanAttributeInfo mBeanAttributeInfo : ai) {
        Descriptor d = mBeanAttributeInfo.getDescriptor();
        filter.enableAttribute((String) d.getFieldValue("name"));
      }
    }

    getAttributeChangeBroadcaster().removeNotificationListener(listener, filter, handback);

    Logger logger = getLogger();
    if (logger.isEnabledFor(Logger.DEBUG)) {
      logger.debug("Listener " + listener + " for attribute " + attributeName
          + " removed successfully, handback is " + handback);
    }
  }
@author <a href="mailto:biorn_steedom@users.sourceforge.net">Simone Bordet</a>
@version $Revision: 1.14 $
geode-core/src/main/java/org/apache/geode/admin/jmx/internal/MX4JModelMBean.java