下面列出了怎么用javax.management.relation.MBeanServerNotificationFilter的API类实例代码及写法,或者点击链接到github查看源代码。
private void registerMBeanNotificationListener(final MBeanServer server) {
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
filter.enableAllObjectNames();
filter.enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION);
listener = new NotificationListener() {
@Override
public void handleNotification(Notification notification, Object handback) {
if (notification instanceof MBeanServerNotification) {
ObjectName mBeanName = ((MBeanServerNotification) notification).getMBeanName();
for (JmxMetric jmxMetric : jmxConfiguration.getCaptureJmxMetrics().get()) {
if (jmxMetric.getObjectName().apply(mBeanName)) {
logger.debug("MBean added at runtime: {}", jmxMetric.getObjectName());
register(Collections.singletonList(jmxMetric), server);
}
}
}
}
};
try {
server.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, listener, filter, null);
} catch (InstanceNotFoundException e) {
logger.error(e.getMessage(), e);
}
}
public JmxDumper(String jmxService, String domain, String beanClassName, String namePattern,
int samplePeriod, List<String> fields, List<String> operations, String outputfile,
int sampleCount) throws Exception {
_jmxUrl = jmxService;
_domain = domain;
_beanClassName = beanClassName;
_samplePeriod = samplePeriod;
_outputFields.addAll(fields);
_operations.addAll(operations);
_outputFileName = outputfile;
_namePattern = namePattern;
_targetSamples = sampleCount;
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + _jmxUrl + "/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
_mbeanServer = jmxc.getMBeanServerConnection();
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
filter.enableAllObjectNames();
_mbeanServer.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, this, filter, null);
init();
_timer = new Timer(true);
_timer.scheduleAtFixedRate(new SampleTask(), _samplePeriod, _samplePeriod);
}
public ClusterMBeanObserver(String domain) throws IOException, InstanceNotFoundException {
// Get a reference to the target MBeanServer
_domain = domain;
_server = ManagementFactory.getPlatformMBeanServer();
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
filter.enableAllObjectNames();
_server.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, this, filter, null);
}
public void disconnect() {
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
try {
_server.removeNotificationListener(MBeanServerDelegate.DELEGATE_NAME, this);
} catch (Exception e) {
_logger.error("", e);
}
}