Infinispan CLI
When using Infinispan, both embedded as a library in an application or as a standalone server, I always longed for a simple standalone tool for interacting with the caches and the data within them. As all itches go, I had to scratch it, and so I present you with Infinispan’s own CLI !
The CLI allows you to inspect and modify the data within an Infinispan cache and also provides access to some of the more advanced features (such as transactions).
The CLI is built out of two elements: a server-side module and the client command tool. The server-side module is optional, and provides the actual interpreter for the commands. Currently the server (and the client) use the JMX protocol to communicate, but in a future release we plan to support other communication protocols (in particular our own HotRod).
To get started, you need at least Infinispan 5.2.0.ALPHA1. Unzip the distribution and start a server:
The startServer.sh script automatically enables remote JMX connections and you can discover the port by running the jps command (part of the JDK/JRE) as follows:
jps -v
which should display something like
26532 Jps -Dapplication.home=/usr/lib/jvm/jdk1.7.0_04 -Xms8m 20508 Main -Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote.port=50434 -Dsun.nio.ch.bugLevel="" -Dlog4j.configuration=file:////home/tst/Downloads/infinispan-5.2.0-SNAPSHOT/etc/log4j.xml
Now we can connect to the Infinispan instance using the CLI as follows:
You will be presented with a prompt:
[jmx://localhost:50434]MyCacheManager>
The above prompt shows which host we’re currently connected to and which CacheManager is being used (in this case: MyCacheManager).
Let’s try putting some data in the cache
put a a
Now let’s check that the cache actually contains the entry we’ve just put
get a
Which will display a glorious
a
The CLI understands several commands. Just type
help
to get a list of them and then
help [commandname]
to get help on a specific command’s syntax.
The CLI uses the wonderful JReadline, so it supports all sorts of fancy buffer editing, history navigation and tab-completion as if you were in your comfortable OS shell (sorry Windows, cmd is not exactly a modern shell).
An important aspect of an Infinispan cache is that you can store whatever data you want in it. The CLI tries to interpret the data from the input you give it. It understands most of the Java native types (int, long, float, double, boolean, String), some additional fancy types (such as UUIDs) and a JSON syntax for mapping any type of Java class, so that you can write:
put user1 \{ "package.MyClass": \{"i": 5, "x": null, "b": true } };
Conversely, when performing a get, the interpreter will output a JSON representation of your classes.
The CLI is still work in progress and will evolve and mature during Infinispan’s 5.2 development cycle. You are all welcome to try it out and provide feedback on the forums, on IRC on channel #infinispan and using our issue tracker to report bugs and ask for enhancements.
I will soon be blogging again, hopefully with a video which will illustrate some of the more fanciful features of the CLI. Enjoy.
Get it, Use it, Ask us!
We’re hard at work on new features, improvements and fixes, so watch this space for more announcements!Please, download and test the latest release.
The source code is hosted on GitHub. If you need to report a bug or request a new feature, look for a similar one on our GitHub issues tracker. If you don’t find any, create a new issue.
If you have questions, are experiencing a bug or want advice on using Infinispan, you can use GitHub discussions. We will do our best to answer you as soon as we can.
The Infinispan community uses Zulip for real-time communications. Join us using either a web-browser or a dedicated application on the Infinispan chat.