Once you can access the object names for MBeans in the agent, you can know their management interface from their MBeanInfo object. The code in Example 10–5 is actually called in between the MBean creation and unregistration shown in Example 10–4.
ObjectName mbeanObjectName = mbeanObjectInstance.getObjectName(); echo("\n>>> Getting the management information of the MBean"); MBeanInfo info = null; try { info = connectorClient.getMBeanInfo( mbeanObjectName ); } catch (Exception e) { echo("\t!!! Could not get MBeanInfo object for "+ mbeanObjectName ); e.printStackTrace(); return; } // display content of MBeanInfo object // echo("\nCLASSNAME: \t"+ info.getClassName()); echo("\nDESCRIPTION: \t"+ info.getDescription()); echo("\nATTRIBUTES"); MBeanAttributeInfo[] attrInfo = info.getAttributes(); if ( attrInfo.length>0 ) { for( int i=0; i<attrInfo.length; i++ ) { echo(" ** NAME: \t"+ attrInfo[i].getName()); echo(" DESCR: \t"+ attrInfo[i].getDescription()); echo(" TYPE: \t"+ attrInfo[i].getType() + "\tREAD: "+ attrInfo[i].isReadable() + "\tWRITE: "+ attrInfo[i].isWritable()); } } else echo(" ** No attributes **"); [...] |
It is then straightforward to perform management operations on MBeans through the connector client. As in an agent, we call the generic getters, setters, and call methods with the object name of the MBean, the name of the attribute or operation, and any parameters. As in the methods of the MBean server, we need to use the Attribute and AttributeList classes to pass attributes as name-value pairs.
try { // Getting attribute values String State = (String) connectorClient.getAttribute( mbeanObjectName, "State" ); Integer NbChanges = (Integer) connectorClient.getAttribute( mbeanObjectName, "NbChanges" ); echo("\tState = \"" + State + "\""); echo("\tNbChanges = " + NbChanges); // Setting the "State" attribute Attribute stateAttr = new Attribute("State", "new state from client"); connectorClient.setAttribute(mbeanObjectName, stateAttr); // Invoking the "reset" operation Object[] params = new Object[0]; String[] signature = new String[0]; connectorClient.invoke(mbeanObjectName, "reset", params, signature); } catch (Exception e) { e.printStackTrace(); return; } |
All other MBean access methods are available in the same manner, such as bulk getters and setters, and the query methods.