jmx4r: How to Use Dotted MBean Attribute Names
An user reported an issue with jmx4r because he was not able to access a MBean attribute.
See for example attribute names under the amx:j2eeType=X-MonitoringDottedNames,name=na mbean of a GlassFish instance.
Trying to get the value of an attribute like
server.http_service.file_cache.maxentries_lastsampletime
doesn't work.
He is right that jmx4r does not work with dotted attributes. For example, this code will fail:
server = JMX::MBean.find_by_name "amx:j2eeType=X-MonitoringDottedNames,name=na"
puts server.http_service.file_cache.maxentries_lastsampletime
JMX supports dotted attributes but they can not be used directly with jmx4r because of Ruby syntax.
Ruby will read
`server.http_service.file_cache.maxentries_lastsampletime`
and will rightfully call http_service
on the server
object first. But there is no such method or attribute and the call will fail.
To circumvent this issue and be able to use jmx4r with dotted MBean attributes, you can use Ruby Object#send.
Instead of
server.http_service.file_cache.maxentries_lastsampletime
you will have to use
server.send("http_service.file_cache.maxentries_lastsampletime")
This looks ugly but it works.
The user proposed to have jmx4r objects implement []
and work like a Hash to support dotted names. I am not convinced that such edge cases are worth supporting []
but if you think otherwise, do not hesitate to vote for this feature and I will add it to jmx4r.