Soften interface for javax.management.ObjectName.getInstance and friends

Mandy Chung mandy.chung at oracle.com
Fri Feb 24 00:31:28 UTC 2017


You should send this topic to serviceability-dev which is the mailing list for JMX and other serviceability related issues.

Mandy

> On Feb 23, 2017, at 4:17 PM, Dave Brosius <dbrosius at mebigfatguy.com> wrote:
> 
> Greetings. the method
> 
> public static ObjectName getInstance(String domain,
> Hashtable<String,String> table)
>        throws MalformedObjectNameException {
>        return new ObjectName(domain, table);
>    }
> 
> in javax.management.ObjectName allows for a provided Hashtable to specify properties for the objectname.
> 
> The semantics of an ObjectName don't consider the order of these properties, however certain tools like jconsole (when used as a name for a jmx property) does consider the order.
> 
> If you wish to create a folder structure to report metrics in jmx, you need to use this properties map to specify the folder names. JConsole, then, uses order of iteration to determine the order of the folder hierarchy.
> 
> Suppose you want a folder hierarchy similar to a package name, you may specify properties like
> 
> table.put("a0", "com");
> table.put("a1", "acme");
> table.put("name", "MyMetric");
> 
> in hopes of producing a metric in JConsole in the folder structure, com/acme/MyMetric.
> 
> The problem is of course, that the argument is a Hashtable, not a Map, and so the items are not ordered at all, yet JConsole uses iteration order to build the path, so you may get
> 
> acme/ao/MyMetric or MyMetric/acme/ao or .....
> 
> This means if you really want to have ordered packages, you have to derive from Hashtable, and override the entrySet() method, including that set's iterator() to return the values in the order you wish to have them shown.
> 
> That is really janky.
> 
> I'm proposing that the interface for getInstance be softened to
> 
> public static ObjectName getInstance(String domain,
>                                         Map<String,String> table)
> 
> as well as
> 
> public ObjectName(String domain, Map<String, String> table)
> 
> thoughts?
> 
> 



More information about the core-libs-dev mailing list