Class JMXJsonServlet

java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.apache.hadoop.jmx.JMXJsonServlet
All Implemented Interfaces:
Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
Direct Known Subclasses:
JMXJsonServletNaNFiltered

public class JMXJsonServlet extends javax.servlet.http.HttpServlet
Provides Read only web access to JMX.

This servlet generally will be placed under the /jmx URL for each HttpServer. It provides read only access to JMX metrics. The optional qry parameter may be used to query only a subset of the JMX Beans. This query functionality is provided through the MBeanServer.queryNames(ObjectName, javax.management.QueryExp) method.

For example http://.../jmx?qry=Hadoop:* will return all hadoop metrics exposed through JMX.

The optional get parameter is used to query an specific attribute of a JMX bean. The format of the URL is http://.../jmx?get=MXBeanName::AttributeName

For example http://../jmx?get=Hadoop:service=NameNode,name=NameNodeInfo::ClusterId will return the cluster id of the namenode mxbean.

If the qry or the get parameter is not formatted correctly then a 400 BAD REQUEST http response code will be returned.

If a resouce such as a mbean or attribute can not be found, a 404 SC_NOT_FOUND http response code will be returned.

The return format is JSON and in the form

  {
    "beans" : [
      {
        "name":"bean-name"
        ...
      }
    ]
  }
  
The servlet attempts to convert the the JMXBeans into JSON. Each bean's attributes will be converted to a JSON object member. If the attribute is a boolean, a number, a string, or an array it will be converted to the JSON equivalent. If the value is a CompositeData then it will be converted to a JSON object with the keys as the name of the JSON member and the value is converted following these same rules. If the value is a TabularData then it will be converted to an array of the CompositeData elements that it contains. All other objects will be converted to a string and output as such. The bean's name and modelerType will be returned for all beans.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected com.fasterxml.jackson.core.JsonFactory
    Json Factory to create Json generators for write objects in json format
    protected MBeanServer
    MBean server.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
    Process a GET request for the specified resource.
    protected void
    doTrace(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
    Disable TRACE method to avoid TRACE vulnerability.
    protected boolean
    In case you need to modify the logic, how java objects transforms to json, you can overwrite this method to return true in case special handling
    protected void
    extraWrite(Object value, String attName, com.fasterxml.jackson.core.JsonGenerator jg)
     
    void
    Initialize this servlet.
    protected boolean
    isInstrumentationAccessAllowed(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
     

    Methods inherited from class javax.servlet.http.HttpServlet

    doDelete, doHead, doOptions, doPost, doPut, getLastModified, service, service

    Methods inherited from class javax.servlet.GenericServlet

    destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • mBeanServer

      protected transient MBeanServer mBeanServer
      MBean server.
    • jsonFactory

      protected transient com.fasterxml.jackson.core.JsonFactory jsonFactory
      Json Factory to create Json generators for write objects in json format
  • Constructor Details

    • JMXJsonServlet

      public JMXJsonServlet()
  • Method Details

    • init

      public void init() throws javax.servlet.ServletException
      Initialize this servlet.
      Overrides:
      init in class javax.servlet.GenericServlet
      Throws:
      javax.servlet.ServletException
    • isInstrumentationAccessAllowed

      protected boolean isInstrumentationAccessAllowed(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws IOException
      Throws:
      IOException
    • doTrace

      protected void doTrace(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, IOException
      Disable TRACE method to avoid TRACE vulnerability.
      Overrides:
      doTrace in class javax.servlet.http.HttpServlet
      Throws:
      javax.servlet.ServletException
      IOException
    • doGet

      public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      Process a GET request for the specified resource.
      Overrides:
      doGet in class javax.servlet.http.HttpServlet
      Parameters:
      request - The servlet request we are processing
      response - The servlet response we are creating
    • extraCheck

      protected boolean extraCheck(Object value)
      In case you need to modify the logic, how java objects transforms to json, you can overwrite this method to return true in case special handling
      Parameters:
      value - the object what should be judged
      Returns:
      true, if it needs special transformation
    • extraWrite

      protected void extraWrite(Object value, String attName, com.fasterxml.jackson.core.JsonGenerator jg) throws IOException
      Throws:
      IOException