Search This Blog

Thursday, 19 November 2015

JMX Monitoring for WebLogic domain

Server State using JMX Program

Java Management Extension (JMX) programs are going to use three levels.
  1. Probe level
  2. Agent level
  3. Remote Connection level
 In the probe level we have Configuration MBean, Runtime MBean.

Every Managed server, Admin Server have the Agent level - MBean Server which connects with probe level

JMX Architectuer WebLogic Domain MBeans

Remote Connection level is the top level where RMI, HTTP, SOAP, SNMP protocols will help to provide monitoring capabilities.


The following program will illustrates about how to use the JMX for huge WebLogic Environments where number or managed servers in 100s or 1000s.

import java.util.Hashtable;
import javax.naming.Context;

public class PrintServerState {

   private static MBeanServerConnection connection;
   private static JMXConnector connector;
   private static final ObjectName service;

   // Initializing the object name for DomainRuntimeServiceMBean
   // so it can be used throughout the class.
   static {
      try {
         service = new ObjectName(
      }catch (MalformedObjectNameException e) {
         throw new AssertionError(e.getMessage());

   * Initialize connection to the Domain Runtime MBean Server
   public static void initConnection(String hostname, String portString, 
      String username, String password) throws IOException,
      MalformedURLException { 
      String protocol = "t3";
      Integer portInteger = Integer.valueOf(portString);
      int port = portInteger.intValue();
      String jndiroot = "/jndi/";
      String mserver = "";
      JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
         port, jndiroot + mserver);
      Hashtable h = new Hashtable();
      h.put(Context.SECURITY_PRINCIPAL, username);
      h.put(Context.SECURITY_CREDENTIALS, password);
      connector = JMXConnectorFactory.connect(serviceURL, h);
      connection = connector.getMBeanServerConnection();

   * Print an array of ServerRuntimeMBeans.
   * This MBean is the root of the runtime MBean hierarchy, and
   * each server in the domain hosts its own instance.
   public static ObjectName[] getServerRuntimes() throws Exception {
      return (ObjectName[]) connection.getAttribute(service,

   * Iterate through ServerRuntimeMBeans and get the name and state
   public void printNameAndState() throws Exception {
      ObjectName[] serverRT = getServerRuntimes();
      System.out.println("got server runtimes");
      int length = (int) serverRT.length;
      for (int i = 0; i < length; i++) {
         String name = (String) connection.getAttribute(serverRT[i],
         String state = (String) connection.getAttribute(serverRT[i],
         System.out.println("Server name: " + name + ".   Server state: "
            + state);

   public static void main(String[] args) throws Exception {
      String hostname = args[0];
      String portString = args[1];
      String username = args[2];
      String password = args[3];

      PrintServerState s = new PrintServerState();
      initConnection(hostname, portString, username, password);

Compile the JMX program:


Execution of the JMX program is as follows:
java PrintServerState 7001 weblogic welcome1

JMX WebLogic Program execution output

WebLogic Books

  • Oracle WebLogic Server 12c: Administration Handbook
  • WebLogic Diagnostic Framework
  • Advanced WebLogic Server Automation
  • Oracle SOA Suite 11g Administrator's Handbook

Popular Posts