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; } }
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); } }); }