public JMXRegistrationInfo provide(
      PicoContainer picoContainer, ComponentAdapter componentAdapter) {
    final Object _componentInstance = componentAdapter.getComponentInstance(picoContainer);

    try {
      final JMXManageable _manageable = (JMXManageable) _componentInstance;

      Exception _exception = null;

      try {
        // try to load XML XMBean Descriptor.
        String _clazzName = _manageable.getClass().getName().replace('.', '/');

        URL _url = _manageable.getClass().getResource("/" + _clazzName + ".xml");

        if (_url == null) {
          return fallback_.provide(picoContainer, componentAdapter);
        }

        final ObjectName _objectName =
            ObjectName.getInstance(domain_ + ":" + _manageable.getJMXObjectName());
        final JMXManageableXMBean _xmbean = new JMXManageableXMBean(_manageable, _url);

        return new JMXRegistrationInfo(_objectName, _xmbean);
      } catch (MalformedObjectNameException e) {
        _exception = e;
      } catch (NotCompliantMBeanException e) {
        _exception = e;
      } catch (NullPointerException e) {
        _exception = e;
      } catch (MBeanException e) {
        _exception = e;
      }

      throw new JMXRegistrationException(
          "Cannot create MBean for component '" + componentAdapter.getComponentKey() + "'",
          _exception);

    } catch (ClassCastException e) {
      return null;
    }
  }