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

  • Overview of features which make Jolokia unique for JMX remoting.

  • The documentation includes a tutorial and a reference manual.

  • Agents exist for many platforms (Jakarta EE, OSGi, JVM).

  • Support is available through GitHub.

  • Contributions are highly appreciated, too.

News

Jolokia 2.1.2 released

2024-11-13

Jolokia 2.1.2 is released and it is ready for more generic integration with other runtimes, especially with Apache Artemis.

Long existing ServerDetector abstraction was enhanced to let Jolokia know about actual ClassLoader used within given runtime. For example, Apache Tomcat starts with just few JARs on system CLASSPATH and later the actual ClassLoader is constructed using JARs from ${catalina.home}/lib. Now Jolokia running as JVM agent has proper access to classes from this broader ClassLoader.

Additionally we’ve provided a little diagnostic check to detect (usually incorrect) setup when Jolokia is running twice in single JVM (for example as WAR and JVM agent).

With this release, current version of jolokia.js npm package is 2.1.8.

Refer to changelog for detailed information about the release.

Jolokia 2.1.1 released

2024-09-12

Jolokia 2.1.1 is released with adjustments to TypeScript type definitions and few improvements to new JavaScript ESM client. With this release, current version of jolokia.js npm package is 2.1.7.

Refer to changelog for detailed information about the release.

Jolokia 2.1.0 released

2024-08-12

We’re happy to announce a new minor release of Jolokia! Minor releases introduce new features and may require a few adjustments to client code. But no worries - the client code needs some adjustments only for the new Jolokia JavaScript library!

New JavaScript libraries

After nine (!) years since the introduction of ES6 modules into JavaScript language, we’ve finally moved JavaScript code from manually created UMD-structured JavaScript files (see IIFE, UMD, The Evolution of JavaScript Modularity).

Because nowadays JavaScript "scripts" are consumed using packages, Jolokia provides a new Maven module (org.jolokia:jolokia-client-javascript-esm) that contains modern JS packages:

  • jolokia.js— While this package is already present in https://www.npmjs.com/package/jolokia.js, it now contains different targets—a proper ES module and ready-to-use files produced by Rollup JS bundler.

  • @jolokia.js/simple - this package replaces jolokia-simple.js file which was part of initial NPM package.

What’s more, the new JavaScript library is developed using the TypeScript language without affecting end-user experience. We now have the full definition of the types used by Jolokia, which has already proved to be very useful in finding miscellaneous problems hidden in type-less JavaScript code.

Fetch API

Since Jolokia was created, JQuery Ajax performed HTTP calls from JavaScript code.
Instead of relying on external dependency, we use Fetch API, which is now standard in all modern, secure browsers.
This makes the Jolokia JavaScript library independent of any external dependency. It also makes the code aware of the async/await programming model and Promises API. See the dedicated chapter in the reference documentation.

New JSON parser

Since first available GitHub commit, Jolokia was using com.googlecode.json-simple:json-simple JSON parser/serializer library. This library has quite an interesting history (moving from code.google.com to GitHub, forking, …​). It does its job very well, but we’ve decided to make a bold move and remove this dependency without adding a new external JSON dependency.

Here’s what we did - we used JSON grammar used by json-simple, checked the changes made in forked version and used JFlex to generate Jolokia own lexer.
With a working lexer, we’ve built our flexible parser/serializer to fulfill Jolokia’s needs. And yes, we’ve made it ~2x faster (in non-exhaustive tests involving Artemis broker running with 10,000 queues).

The new Jolokia module is org.jolokia:jolokia-json and it fully replaces com.googlecode.json-simple:json-simple library. Class names are the same, the only change is in the package name (switch from org.json.simple to org.jolokia.json).

New Jolokia protocol version

Going with the flow, after moving from JavaScript to TypeScript and getting our own JSON parser, we’ve introduced a new Jolokia protocol version, 8.0. There’s more information in the relevant documentation section, but here’s a summary of the changes:

  • With the new listKeys processing/request parameter, list() operation returns an additional "keys" field for MBean’s MBeanInfo - it contains a map of the keys obtained from ObjectName

  • With the new includeRequest processing/request parameter, we can tell Jolokia not to return incoming requests under the "request" field of the response (defaults to true)

  • The list() operation may be optimized with the new listCache processing/request parameter. It allows caching the common JSON-ified MBeanInfo to avoid duplicating it in the list() response for, say, 50,000 Artemis queue MBeans. Getting 2MB instead of 0.5GB of JSON is always a good thing. More details can be found in the documentation.

New extension points

To make list() operation more flexible (based on experience gained from the Hawtio console), Jolokia now provides extension points for list(). While it is still based on javax.management.MBeanServerConnection.queryMBeans() call, we don’t necessarily blindly serialize each MBean’s javax.management.MBeanInfo.

In detail, Jolokia offers these new extension hooks:

  • With the org.jolokia.service.jmx.api.CacheKeyProvider Jolokia service, we can ask third-party libraries whether a given MBean can be translated into a cache key. If many MBeans can be translated into a single cache key, we can optimize the list() response by caching common MBeanInfo.

  • with the org.jolokia.service.jmx.handler.list.DataUpdater Jolokia service, we can get additional information inside JSON-ified javax.management.MBeanInfo - 3rd party extensions may add RBAC information or any other data into the MBeanInfo

Old issues resolved

It’s worth noting that we’ve also fixed issues dating back up to 2015…​

  • Added support for custom date format for dates (and new java.time classes)

  • Added support for multi-dimensional arrays

  • Added support for java.util.Date operation parameters

  • Added ability to declare (in jolokia-access.xml) that some MBeans simply should not be returned in search and list operations.

Please refer to changelog for detailed information about the release.

Jolokia 2.0.3 released

2024-06-06

Jolokia 2.0.3 is released with 3 minor fixes. Certificate chains are handled better (thanks Shay Elkin!) and we know allow to configure how long values are handled during JSON serialization.

Refer to changelog for detailed information about the release.

Jolokia 2.0.2 released

2024-03-07

Spring time is approaching and we’ve skimmed through some old issues to clean them up. Jolokia 2.0.2 is released with few minor fixes. Most notably, write-only JMX attributes are now handled correctly and heuristic Jolokia shutdown thread is replaced with proper JVM shutdown hook.

We’ve also ensured that all tests pass on IBM versions of JDK.

Refer to changelog for detailed information about the release.

Jolokia 2.0.1 released

2024-01-26

Following the big 2.0.0 release last year, we continue to improve Jolokia by clearing the backlog and adding new features and improvements.

With 2.0.1 release we’re fixing custom log handler configuration. We also integrate better with Spring Boot Actuator by handling management.endpoint.jolokia.enabled property.

As always, please refer to changelog for more details.

Jolokia 2.0 arrives: A new chapter begins!

2023-12-19

jolokia2 presents

We are excited to announce the long-awaited release of Jolokia 2.0, now available in Maven Central.

This release is a result of our dedicated effort in reviewing, restructuring, refactoring, and polishing. Here’s what Jolokia 2.0 brings to the table:

  • Support for JakartaEE 9+ (Servlet API 5+ with jakarta.servlet packages)

  • Enhanced connectivity with JMX notifications

  • Integration with Spring Boot 3 and Spring Framework 6

  • A fresh, pluggable service-based architecture

  • A revamped and user-friendly Reference Manual powered by Antora

  • JDK 11 is the minimal version of JDK required. Spring related Jolokia modules require JDK 17. (No worries, we’re still supporting Jolokia 1.x with minimal version of JDK 1.6 supported).

And that’s not all. We’re already planning more frequent updates, including exciting new features like websockets and IPv6 support.

Jolokia 2 also gears up to seamlessly integrate with the upcoming Hawtio 4.0!

It should be straightforward to upgrade to new Jolokia 2 in JVM agent mode. WAR agent users should use any compatible JakartaEE 9+ container. Check out our Migration to 2.x guide for more information.

Your support and patience over these years have been incredible. We’re grateful for your enduring loyalty. Let’s end this year on a high note and step into 2024 with new energy and possibilities!

Warm regards,
Grzegorz, Tadayoshi, Roland

Jolokia has a new home!

2023-07-13

Yes, finally we moved Jolokia from my (rhuss) personal account to a dedicated GitHub organisation: https://github.com/jolokia. I’m super happy that the story of Jolokia continues and you will see quite some new faces very soon. Thanks Tadayoshi, Grzegorz, Aurélien and all the other fine folks from Red Hat who started to revive Jolokia. Also, Jolokia 2.0 becomes a realistic option again. Stay tuned!