cons.setProfileLevel(ProfileLevel.MAX);
ObjectName name = new ObjectName(WatchdogServiceMXBean.MXBEAN_NAME);
// Ensure the object was registered at startup
WatchdogServiceMXBean bean = (WatchdogServiceMXBean)
profileCollector.getRegisteredMBean(
WatchdogServiceMXBean.MXBEAN_NAME);
assertNotNull(bean);
// Get individual fields
long addNodeListener =
(Long) mbsc.getAttribute(name, "AddNodeListenerCalls");
long addRecoveryListener =
(Long) mbsc.getAttribute(name, "AddRecoveryListenerCalls");
long getBackup =
(Long) mbsc.getAttribute(name, "GetBackupCalls");
long getNode = (Long) mbsc.getAttribute(name, "GetNodeCalls");
long getNodes = (Long) mbsc.getAttribute(name, "GetNodesCalls");
long isLocalNodeAlive =
(Long) mbsc.getAttribute(name, "IsLocalNodeAliveCalls");
long isLocalNodeAliveNonTransactional =
(Long) mbsc.getAttribute(name,
"IsLocalNodeAliveNonTransactionalCalls");
// Note that if we want to get the NodeInfo, which is a composite type,
// from an attribute, its type is CompositeData. This is why using
// proxies are the real way to go.
CompositeData getStatusInfo =
(CompositeData) mbsc.getAttribute(name, "StatusInfo");
// Create the proxy for the object
WatchdogServiceMXBean proxy =
JMX.newMXBeanProxy(mbsc, name, WatchdogServiceMXBean.class);
// We might have had some service calls in between getting the
// proxy and objects.
assertTrue(addNodeListener <= proxy.getAddNodeListenerCalls());
assertTrue(addRecoveryListener <= proxy.getAddRecoveryListenerCalls());
assertTrue(getBackup <= proxy.getGetBackupCalls());
assertTrue(getNode <= proxy.getGetNodeCalls());
assertTrue(getNodes <= proxy.getGetNodesCalls());
assertTrue(isLocalNodeAlive <= proxy.getIsLocalNodeAliveCalls());
assertTrue(isLocalNodeAliveNonTransactional <=
proxy.getIsLocalNodeAliveNonTransactionalCalls());
assertTrue(addNodeListener <= bean.getAddNodeListenerCalls());
assertTrue(addRecoveryListener <= bean.getAddRecoveryListenerCalls());
assertTrue(getBackup <= bean.getGetBackupCalls());
assertTrue(getNode <= bean.getGetNodeCalls());
assertTrue(getNodes <= bean.getGetNodesCalls());
assertTrue(isLocalNodeAlive <= bean.getIsLocalNodeAliveCalls());
assertTrue(isLocalNodeAliveNonTransactional <=
bean.getIsLocalNodeAliveNonTransactionalCalls());
// And to get the data from the CompositeData, we use more
// reflection... another argument for clients using proxies.
assertTrue((Boolean) getStatusInfo.get("live"));
assertTrue(proxy.getStatusInfo().isLive());
assertTrue(bean.getStatusInfo().isLive());
// Test one of the APIs
txnScheduler.runTask(new TestAbstractKernelRunnable() {
public void run() {
long nodeId =
serverNode.getDataService().getLocalNodeId();
serverNode.getWatchdogService().getNode(nodeId);
}}, taskOwner);
// Should certainly be greater number, not greater or equal
long newValue = proxy.getGetNodeCalls();
assertTrue(getNode < newValue);
assertTrue(getNode < bean.getGetNodeCalls());
}