JMX REST API
Currently, just a place holder.
The following text is copied directly from the mailing list.
I have finished a REST api for generic jmx MBeans. It allows for listing
mbeans, getting mbeaninfo, reading and setting attributes and invoking
operations with parameters that can be represented as Strings ( i.e.
String,
Long etc. serialized classes don't count).
Before I send to code to Richard I would like some feedback to see if I am
missing something or should do something different.
Here is the api and sample returns. Bad requests or errors will return
BadResponse.
GET /jmx/mbeans - returns a list of mbean names
GET /jmx/mbean/[mbean name](mbean-name.html)
/info - returns MBeanInfo for specified mbean
GET /jmx/mbean/[mbean name](mbean-name.html)
/attributes - returns attribute name and string
values
POST /jmx/mbean/[mbean name](mbean-name.html)
/invoke/[operation name]
pone
123
POST /jmx/mbean/[mbean name/set - sets a single attribute
POST /jmx/mbean/[mbean name](mbean-name.html)
/set - sets multiple attributes
== SAMPLES ==
GET /jmx/mbeans
GET /jmx/mbean/org.apache.esme.stats:type=Stats/attributes
GET /jmx/mbean/org.apache.esme.stats:type=Stats/info
=================
There is no security on the api. This obviously should not stay like this
and should only be accessable with an administrator account.
I tested it with the Stats MBean and the java.util.Logging MBean and it is
working. I can access stats, reset them and change logging levels.
It would be nice to be able to change runtime properties though JMX however
most of the Lift and ESME code uses vals and immutable data structures that
are set when the app is originally loaded. The lift Props object used by
esme is totally immutable after it is constructed. It is worth thinking
about switching to a property api like Configgy which uses mutable data
structures for properties.
We could change in real time things like resent & links period, refresh
intervals, analyzer settings like long query time, db connection pool sizes
etc.
I didn't enable sending serialized objects through the REST api because it
seems like more trouble than it's worth. Besides that sort of JMX
functionality is only useful between servers and this api is really just
for
the cloud environment like stax which doesn't allow you to bind to ports.