Sun GlassFish Message Queue 4.4 Developer's Guide for JMX Clients

Accessing MBean Attributes

The MBean server connection's getAttribute method accepts the object name of an MBean along with a string representing the name of one of its attributes, and returns the value of the designated attribute. Example 2–4 shows an example, obtaining and printing the value of a destination's MaxNumProducers attribute from its configuration MBean (described in Destination Configuration).


Example 2–4 Getting an Attribute Value

import javax.management.*;
import javax.management.remote.*;
import com.sun.messaging.AdminConnectionFactory;
import com.sun.messaging.jms.management.server.*;


public class  GetAttrValue
  { 
    public static void  main (String[]  args)
      { 
        try
          { //  Create admin connection factory
                AdminConnectionFactory  acf = new AdminConnectionFactory();
            
            //  Get JMX connector, supplying user name and password
                JMXConnector  jmxc = acf.createConnection("AliBaba", "sesame");
            //  Get MBean server connection
                MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();
            //  Create object name
                ObjectName  destConfigName
                    = MQObjectName.createDestinationConfig(DestinationType.QUEUE, "MyQueue");
            //  Get and print attribute value
                Integer  attrValue
                    = (Integer)mbsc.getAttribute(destConfigName,
                                                 DestinationAttributes.MAX_NUM_PRODUCERS);
                System.out.println( "Maximum number of producers: " + attrValue );
            //  Close JMX connector
                jmxc.close();
          }
        catch (Exception  e)
          { System.out.println( "Exception occurred: " + e.toString() );
            e.printStackTrace();
          }
      }
  }


There is also an MBeanServerConnection method named getAttributes, which accepts an MBean object name and an array of attribute name strings, and returns a result of class AttributeList. This is an array of Attribute objects, each of which provides methods (getName and getValue) for retrieving the name and value of one of the requested attributes. Example 2–5 shows a modified version of Example 2–4 that uses getAttributes to retrieve the values of a destination's MaxNumProducers and maxNumActiveConsumers attributes from its configuration MBean (see Destination Configuration).


Example 2–5 Getting Multiple Attribute Values

import javax.management.*;
import javax.management.remote.*;
import com.sun.messaging.AdminConnectionFactory;
import com.sun.messaging.jms.management.server.*;

public class  GetAttrValues
  { 
    public static void  main (String[]  args)
      { 
        try
          { //  Create admin connection factory
                AdminConnectionFactory  acf = new AdminConnectionFactory();
            //  Get JMX connector, supplying user name and password
                JMXConnector  jmxc = acf.createConnection("AliBaba", "sesame");
            //  Get MBean server connection
                MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();
            //  Create object name
                ObjectName  destConfigName
                    = MQObjectName.createDestinationConfig(DestinationType.QUEUE, "MyQueue");
            //  Create array of attribute names
                String  attrNames[] = 
                            { DestinationAttributes.MAX_NUM_PRODUCERS,
                              DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS
                            };
            //  Get attributes
                AttributeList  attrList = mbsc.getAttributes(destConfigName, attrNames);
            //  Extract and print attribute values
                
                Object  attrValue;
                
                attrValue = attrList.get(0).getValue();
                System.out.println( "Maximum number of producers: " + attrValue.toString() );
                
                attrValue = attrList.get(1).getValue();
                System.out.println( "Maximum number of active consumers: " + attrValue.toString() );
            //  Close JMX connector
                jmxc.close();
          }
        catch (Exception  e)
          { System.out.println( "Exception occurred: " + e.toString() );
            e.printStackTrace();
          }
      }
  }


To set the value of an attribute, use the MBeanServerConnection method setAttribute. This takes an MBean object name and an Attribute object specifying the name and value of the attribute to be set. Example 2–6 uses this method to set a destination's MaxNumProducers attribute to 25.


Example 2–6 Setting an Attribute Value

import javax.management.*;
import javax.management.remote.*;
import com.sun.messaging.AdminConnectionFactory;
import com.sun.messaging.jms.management.server.*;


public class  SetAttrValue
  { 
    public static void  main (String[]  args)
      { 
        try
          { //  Create admin connection factory
                AdminConnectionFactory  acf = new AdminConnectionFactory();
            
            //  Get JMX connector, supplying user name and password
                JMXConnector  jmxc = acf.createConnection("AliBaba", "sesame");
            //  Get MBean server connection
                MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();
            //  Create object name
                ObjectName  destConfigName
                    = MQObjectName.createDestinationConfig(DestinationType.QUEUE, "MyQueue");
            //  Create attribute object
                Attribute  attr = new Attribute(DestinationAttributes.MAX_NUM_PRODUCERS, 25);
            //  Set attribute value
                mbsc.setAttribute(destConfigName, attr);
            //  Close JMX connector
                jmxc.close();
          }
        catch (Exception  e)
          { System.out.println( "Exception occurred: " + e.toString() );
            e.printStackTrace();
          }
      }
  }


Just as for getting attribute values, there is an MBeanServerConnection method named setAttributes for setting the values of multiple attributes at once. You supply an MBean object name and an attribute list giving the names and values of the attributes to be set. Example 2–7 illustrates the use of this method to set a destination's MaxNumProducers and MaxNumActiveConsumers attributes to 25 and 50, respectively.


Example 2–7 Setting Multiple Attribute Values

import javax.management.*;
import javax.management.remote.*;
import com.sun.messaging.AdminConnectionFactory;
import com.sun.messaging.jms.management.server.*;


public class  SetAttrValues
  { 
    public static void  main (String[]  args)
      { 
        try
          { //  Create admin connection factory
                AdminConnectionFactory  acf = new AdminConnectionFactory();
            
            //  Get JMX connector, supplying user name and password
                JMXConnector  jmxc = acf.createConnection("AliBaba", "sesame");
            //  Get MBean server connection
                MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();
            //  Create object name
                ObjectName  destConfigName
                    = MQObjectName.createDestinationConfig(DestinationType.QUEUE, "MyQueue");
            //  Create and populate attribute list
                
                AttributeList  attrList = new AttributeList();
                Attribute      attr;
                
                attr = new Attribute(DestinationAttributes.MAX_NUM_PRODUCERS, 25);
                attrList.add(attr);
                
                attr = new Attribute(DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS, 50);
                attrList.add(attr);
            //  Set attribute values
                mbsc.setAttributes(destConfigName, attrList);
            //  Close JMX connector
                jmxc.close();
          }
        catch (Exception  e)
          { System.out.println( "Exception occurred: " + e.toString() );
            e.printStackTrace();
          }
      }
  }