Jolokia is remote JMX with JSON over HTTP.
It is fast, simple, polyglot and has unique features. It's JMX on Capsaicin.

Jolokia is a JMX-HTTP bridge giving an alternative to JSR-160 connectors. It is an agent based approach with support for many platforms. In addition to basic JMX operations it enhances JMX remoting with unique features like bulk requests and fine grained security policies.

Starting points


Find your agents with 1.2.0


New year, new release. Ok, it's not the BIG 2.0 which I already somewhat promised. Anyways, another big feature jumped on the 1.x train in the last minute. It is now possible to find agents in your network by sending an UDP packet to the multicast group, port 24884. Agents having this discovery mechanism enabled will respond with their meta data including the access URL. This is especially useful for clients who want to provide access to agents without much configuration. I.e. the excellent will probably use it one way or the other. In fact, it was which put me on track for this nice little feature ;-)

Discovery is enabled by default for the JVM agent, but not for the WAR agent. It can be easily enabled for the WAR agent by using servlet init parameters, system properties or environment variables. All the nifty details can be found in the reference manual.

The protocol for the discovery mechanism is also specified in the reference manual. One of the first clients supporting this discovery mode is Jmx4Perl in its newest version. The Jolokia Java client will follow in one of the next minor releases.

But you don't need client support for multicast requests if you know already the URL for one agent. Each agent registers a MBean jolokia:type=Discovery which perform the multicast discovery request for you if you trigger the operation lookupAgents. The returned value contains the agent information and is described here.

This feature has been tested in various environments, but since low level networking can be, well, "painful", I would ask you to open an issue in case of any problems.

Although it has been quiet some time with respect to the shiny new Jolokia 2.0, I'm quite close to a first milestone. All planned features has been implemented in an initial version, what's missing is to finish the heavy refactoring and modularisation of the Jolokia core. More on this later, please stay tuned ...

Tiny 1.1.5


This is by far the smallest release ever: A single char has been added on top of 1.1.4 fixing a silly bug when using Glassfish with the AMX system. So, no need to update if you are not using Glassfish.

Next week is Devoxx time and as last year (and the years before) you have the change to meet me in Antwerp. Ping me or look for the guy with the Jolokia hoodie ;-)

Step by step ... 1.1.4


Some bug fixes and two new features has been included for the autumn release:

A new configuration parameter "authenticatorClass" can be used for the JVM agent to specify an alternate authentication handler in addition to the default one (which simply checks for user and password).

With the configuration parameter "logHandlerClass" an alternative log handler can be specified. This can be used for the WAR and JVM agent in order to tweak Jolokia's logging behaviour. For the OSGi agent you already could use a LogService for customizing logging.

That's it and I hope you enjoy this release. I know, I'm late with 2.0, but as things happens, I have too much to do in 'real life' (i.e. feeding my family ;-). But I still hope to get it out this year, and yes, the 2.0 branch is growing (slowly).

BTW, the slides to my talk for the small but very fine JayDay 2013 are online, too. These are "implemented" in JavaScript including live demos, where the JavaScript can be directly inserted in the browser (tested with Chrome & Firefox). For the sample code, simply push the blue buttons at the bottom of a demo slide.

Small fixes with 1.1.3


No big news in Jolokia land, but some bug fixes come with 1.1.3. Especially some issues with the JavaScript client's basic authentication and cross origin requests has been fixed. Otherwise I'm busy with 2.0 (and tons of other stuff ...). You can have a sneak preview of Jolokia 2.0 on this branch including basic notification support and quite some refactoring with respect to the service architecture.

So please stay tuned ....

Stopover on the road to 2.0: Jolokia 1.1.2 released


In order to ease waiting for 2.0, Jolokia version 1.1.2 has been released. It contains some minor bug fixes as explained in the changelog. Depending on the bug reports and pull request dropping in there might be even a 1.1.3 release before 2.0 will be finished.

In the meantime, you can also see Jolokia live at JayDay where I will give a talk about Jolokia's JavaScript support. The forthcoming JMX notification support will presented, too. It is also a good chance to have a cold bavarian beer with me ;-)

Some small goodies served by 1.1.1


This last feature release before work on 2.0.0 starts brings some small goodies.

  • BigDecimal and BigInteger can now be used for operation arguments and return values.
  • A new processing parameter ifModifiedSince has been introduced. This parameter can be used with a timestamp for fetching the list of available MBeans only when there has been some changes in the MBean registration on any observed MBeanServer since that time. If there has been no changes an answer with status code "302" (Not modified) is returned. This feature is also supported for "search" requests. In a future version of Jolokia, there will be also custom support for own "read" and "exec" request so that expensive operations can be called conditionally.
  • For the JVM agent, if a port of 0 is given, then an arbitrary free port will be selected and printed out on standard output as part of the Jolokia agent URL. If no host is given, the JVM agent will now bind to localhost and if host of "" or "*" is provided, the agent will bind on all interfaces.
  • For the Java client an extra property errorValue has been added which holds the JSON serialized exception if the processiong parameter serializeException is active.
  • The JavaScript client's jolokia.register() can now take an optional config element for specifying processing parameters for a certain scheduler job. Also, the new option onlyIfModified can be used so that the callback for list and search request is only called, if the set of registered MBean has changed. This is especially useful for web based client which want to refresh the MBean tree only if there are changes.
  • The Expires: header of a Jolokia response has now a valid date as value (instead of '-1') which points to one hour in the past. This change should help clients which do not ignore according to RFC-2616 invalid date syntax and treat them as 'already expired'.

Links to the corresponding GitHub issues and the bugs fixed in this release can be found in the change report.

This is the last feature release in the 1.x series. Work has already started on exciting new features for Jolokia 2.0. E.g. JMX notification support is coming, an initial pull model has been already implemented (on branch notification). There are even more ideas and some refactorings will happening along with some modest changes in the module structure. So, please stay tuned ...

1.1.0 with Spring support and @JsonMBean


It took some time, but it was worth it. Along with the usual bug fix parade, several new features has been added to Jolokia.

A new module jolokia-spring has been added which makes integration of Jolokia in Spring applications even easier. Simply add the following line (along with the corresponding namespace) to you application context and agent will be fired up during startup:


More details can be found here in the reference manual.

The new jolokia-jmx module provides an own MBeanServer which never gets exposed via JSR-160 remoting. By registering your MBeans at the Jolokia MBeanServer you can make them exclusively available for Jolokia without worrying about JSR-160 access e.g. via jconsole. However, if you annotate your MBeans with @JsonMBean and register it at the Jolokia MBeanServer your get automatic translation of complex data types to JSON even for JSR-160 connections:

The details can be found here.

Several new processing options enter the scene. These can be given either as global configuration parameters or as query parameters:

  • canonicalNaming influences the order of key properties in object names
  • serializeExceptions adds a JSON representation of exceptions in an error case
  • includeStackTrace can switch on/off the sending of an lengthy stack trace in an error case

That's it for now, all changes are summarized as always in the change report.

Some other, more organizational stuff for now:

  • Bugtracking and feature requests switch over completely to Github. Since I'm currently collecting features for 2.0, it's a good time for feature requests ;-). All ideas entered at has been transformed into Github issues.
  • If you are close to Germany it might be of interest to you, that I'm giving a training on Jolokia and Jmx4Perl, with focus on Java Monitoring with Nagios. This will happen at 16./17.04.2013 in Munich, details can be found on our web site (in german).

And finally a very hot recommendation: Please have a look at a super cool HTML5 console which uses Jolokia for backend communication exclusively. Most of the new ideas included in this Jolokia release were inspired by discussions with James Strachan, one of the driving forces behind hawt. Thanks for that ;-)

1.0.6 cosmetics


Although it has been quite calm in Jolokia land for some months, there is quite some momentum around Jolokia. This minor release brings some cosmetic changes, mostly for tuning the ordering within MBeans names and some JavaScript fixes. More on this in the changelog.

Some other tidbits:

  • The new Talks and Screencast section collects some fancy multimedia introducing Jolokia
  • I'm going to talk about Jolokia at jayday 2012, a brand new, low cost conference in Munich on 3th December 2012. Hopefully there will be some brand new stuff to show, too.
  • Some completely irrelevant stuff: Jolokia T-Shirts can be found in the Jolokia Shop The shop was too easy to setup for not doing it ;-) And they look freaking hot ....

Cubism support in 1.0.5


Jolokia 1.0.5 has been released. Beside minor improvements and bug fixes, one great new feature has been introduced: As already mentioned Jolokia has now support for Cubism, a fine time series charting library based on d3.js. Cubism provides support for an innovative charting type, the horizon charts:

A very cool live demo where a Jolokia JavaScript client fetches live data from our servers and plot it with Cubism can be found on this demo page. The documentation can be found in the reference manual.

Jolokia uses also a Travis build in addition to our own CI Server. (Did I mentioned already, that we have a quite I high Sonar score ?). Travis is a quite nice supplement to Github, and brings CI testing to a higher level.

That's it for now. The next months of my open-source work will be spent now on Ají, Jolokia's new fancy sister. Sorry for pushing thinks like notifications down the Jonlokia back-log, but it's not forgotten.

1.0.4 introduces a Javascript request scheduler


Beside some bug fixes two new features are included in this new release:

Jolokia's Javascript library has now a scheduler for periodically querying the agent. Requests can be registered at the agent and all registered requests are sent at once in a single bulk request periodically. This is especially useful when building up dashboard like web pages with multiple charts.

The folowing example registers two requests which are called every second. The reference documentation has all the details.

var jolokia = new Jolokia("http://localhost:8080/jolokia");

          // Register request along with callback printing out
// the heap memory usage
jolokia.register(function(resp) {
   console.log("Memory: " + resp.value);

// Start the scheduler for calling the request every second

The scheduler is used by the new Jolokia-Cubism integration for plotting real time JMX data. Please have a look at the demo page for more information about using Jolokia together with Cubism.

On the agent side detectors now support custom options. The first option available is for the Glassfish detector to prevent booting of the AMX subsystem, which registers the most interesting MBeans. AMX is booted now by default on the first request when running in Glassfish. For more information, please refer to the WAR configuration options in the reference documentation.

Ají moves on, too, although slower than expected. The main focus of the next months will to be bring that Javascript JMX application on and out. Stay tuned ...