Establish a JMX MBean Liberty server connection

We can use Jython-based scripts to establish a Java Management Extensions (JMX) MBean Liberty server connection.

We must obtain and install the Jython version of the choice before we can perform this procedure. Without a Jython runtime, the instructions will fail.

  1. Set up the environment.

    The files that we need are located in liberty_home/clients/jython.

    1. Copy the lib/restConnector.py file to jython_home/Lib.

    2. Set the classpath for restConnector.jar in liberty_home/clients.

        set CLASSPATH=%CLASSPATH%;c:\wlp\clients\restConnector.jar

  2. Run the utility. Example 1: Getting a simple connection using connector.connect(host,port,user,password)

      from restConnector import JMXRESTConnector
      JMXRESTConnector.trustStore = "c:/key.jks"
      JMXRESTConnector.trustStorePassword = "Liberty"
      
      connector = JMXRESTConnector()
      connector.connect("foo.bar.com",9443,"theUser","thePassword")
      mconnection = connector.getMBeanServerConnection()
      # mconnection.invoke(...)
      connector.disconnect()

    Example 2: Getting an advanced connection using connector.connect(host,port,map) with user-provided properties

      import java
      import javax
      import jarray
      import com.ibm.websphere.jmx.connector.rest
      import com.ibm.ws.jmx.connector.client.rest
       
      map=java.util.HashMap()
      map.put("jmx.remote.provider.pkgs","com.ibm.ws.jmx.connector.client")
      map.put(javax.management.remote.JMXConnector.CREDENTIALS,jarray.array(["theUser","thePassword"],java.lang.String))
      map.put(com.ibm.ws.jmx.connector.client.rest.ClientProvider.READ_TIMEOUT,2*60*1000)
      map.put(com.ibm.websphere.jmx.connector.rest.ConnectorSets.DISABLE_HOSTNAME_VERIFICATION, True) 
      
      connector = JMXRESTConnector()
      connector.connect("foo.bar.com",9443,map)
      mconnection = connector.getMBeanServerConnection()
      # mconnection.invoke(...)
      connector.disconnect()

    Example 3: Registering a notification listener

      import java
      import javax
      
      from restConnector import JMXRESTConnector
      from restConnector import BaseNotificationListener
      
      class SampleNotificationListener(BaseNotificationListener):
        def __init__(self):
          pass
      
        def handleNotification(self,notification,handback):
          print "Notification received:"
          print "  Source: " + notification.getSource().toString()
          print "  Type: " + notification.getType()
          print "  Message: " + notification.getMessage()
      
      # main starts here
      
      JMXRESTConnector.trustStore = "c:/key.jks"
      JMXRESTConnector.trustStorePassword = "Liberty"
      
      connector=JMXRESTConnector()
      connector.connect("foo.bar.com",9443,"theUser","thePassword")
      mconnection=connector.getMBeanServerConnection()
      
      listener=SampleNotificationListener()
      handback=java.lang.Object()
      
      notifier1=javax.management.ObjectName("web:name=Notifier1")
      mconnection.addNotificationListener(notifier1,listener,None,handback)

      JMXRESTConnector.trustStore

      Sets the path to where the SSL key file is stored

      JMXRESTConnector.trustStorePassword

      Sets the password for the key

      JMXRESTConnector.connect(host,port,user,password)

      Creates a connector to the server

      JMXRESTConnector.connect(host,port,map)

      Creates a connector with user properties

      JMXRESTConnector.getMBeanServerConnection

      Gets a connection to the MBean server

      JMXRESTConnector.disconnect()

      Closes the connection


What to do next

After a connection to the MBean server is established, we can make calls to the MBean server using the invoke(...) method.