Dustin's Pages

Saturday, March 1, 2008

JMX Specifications: An Overview

The world of Java Management Extensions (JMX) is specified in multiple specifications. The purpose of this blog entry is to provide an organized list of these JMX-related specifications with a few interesting notes about each. Note that a list of the JMX-related Java Specification Requests (JSRs) is available here.

The basic JMX concept is one of the oldest of the Java Specification Requests. The third JSR (JSR-3) is Java Management Extensions (JMX) Specification. In fact, because JSR-2 has been withdrawn, the only older JSR than JMX is the Realtime Java JSR (JSR-1). The final release of JMX 1.0 was on 7 September 2000. The first maintenance release for JMX (JMX 1.1) was released on 15 January 2002 followed by the second JSR-3 maintenance review (JMX 1.2, introducing MBeanServerConnection interface and four-parameter removeNotificationListener methods among other things) on 27 August 2002. JMX 1.3 (third maintenance release of JSR-3, introducing MXBeans) was released on 25 April 2006 and was quickly followed by the release of JMX 1.4 (fourth maintenance release of JSR-3) on 15 August 2006.

As described in my previous blog entry, JMX 1.3 dropped the concept of having the JMX reference implementation separate from the JMX platform server implementation. Java SE 6 provides a JMX Platform Server that is also the JMX 1.4 reference implementation.

While JSR-3 and its maintenance releases describe much of the core of present-day JMX, the standardization of remote JMX access is accomplished with JSR-160 ("Java Management Extensions (JMX) Remote API"). This JSR's initial final release date was 23 October 2003. This JSR provided standard definitions of JMX Connectors. The specification itself calls out several key predictions that turned out to be the actual realization as well. These include definition of two transport protocols (RMI and JMXMP), the decision to not call out any new discovery mechanisms, and the plan to support existing discovery mechanisms of SLP, Jini, and JNDI.

One interesting observation related to the JMX-related JSRs discussed so far (JSR-3 and JSR-160) is that when these were both changed to have 1.4 as their version numbers (JMX API 1.4 and JMX Remote API 1.4), they were also placed in the same overall specification. The JMX 1.4 specification available at http://java.sun.com/javase/6/docs/technotes/guides/jmx/JMX_1_4_specification.pdf contains both the core JMX specification (Parts I [JMX Instrumentation Specification] and II [JMX Agent Specification]) and the JMX Remote specification (Part III - "JMX Remote API Specification").

A more specific JSR related to remote JMX is JSR-262 ("Web Services Connector for Java Management Extensions (JMX) Agents"). This JSR calls for a web services JMX connector that is compliant with JMX connectors as outlined by JSR-160. A significant advantage of this, of course, is the ability to use JMX with web services. It is also useful because it allows JMX remote connector-compliant clients (such as JConsole) to communicate with managed resources via HTTP and thus more easily through firewalls. While JSR-262 is not 100% finalized, an implementation of it is available at https://ws-jmx-connector.dev.java.net/.

In a previous blog entry, I talked about the aged nature of the available JMX books. As evidenced by this brief history of JMX-related specifications, much has happened since even the latest of these books was published and much more is to come with JMX 2.0.