You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Aaron Mulder <am...@alumni.princeton.edu> on 2005/08/14 23:36:03 UTC

GBeanNames

	Jeremy, David J, Dain, and I talked a bit about GBeanNames (vs 
ObjectNames) at OSCon.  We didn't fully resolve the issue, but I think we 
made some progress.  Here are some of the key issues:

1) Do we wish to eliminate JMX/ObjectNames from the core kernel?

 - Dain seemed less convinced of this than the rest of us, though I think 
in priniciple we all think this is fine, and differ mainly on the urgency 
and the work we're willing to incur to achieve this.

2) If we eliminate ObjectNames, should it always be possible to generate 
an ObjectName from a GBeanName for JMX interoperability?  Note that 
ObjectNames have a quoted form and limitations on the characters that can 
go into the "value" part of the 'key=value,key=value,...' part of the 
ObjectName.  We don't necessarily want to re-implement all that for the 
GBeanName, though we could simply copy the code from MX4J.

 - We struggled with the extensively before agreeing that GBeanNames 
should be *more* limited than ObjectNames.  That is, a GBeanName should 
have the same structure as an ObjectName, but should not support quoted 
form and should not support characters in the 'value' part that would 
otherwise require a quoted form (including comma, for example).

3) If a GBeanName works mainly like an ObjectName, it should have a String 
representation (foo:bar=baz,...).  You might construct one with a String 
-- new GBeanName("foo:bar=baz,...").  There is also a "canonical" String, 
where the name=value pairs are sorted alphabetically by name in the list.  
The question is, should the GBeanName save the String originally provided 
to the constructor (as one of the ObjectName methods says you should be 
able to access this) or should it save the canonical String (as that seems 
to be what a caller is most likely to want as a String form), or both?

 - This was the main point of disagreement.  There seems to be a clear 
advantage to storing the canonical String, to avoid reconstructing it on 
every call (the Geronimo code almost universally uses getCanonicalName() 
when trying to produce a String for an ObjectName).  However, if the 
original String isn't stored, then if you convert an ObjectName to a 
GBeanName to an ObjectName, the behavior of getKeyPropertyListString() may 
be different between first and third ObjectName instances (though they 
would still be equals() to each other since that only compares canonical 
forms).  We could also store both to achieve both, but that just takes 
twice the space.

4) Should GBeanName be allowed to represent a query (like an ObjectName 
"foo:bar=baz,*")?

 - We agreed that it should not.  We agreed to add a GBeanQuery object 
that could hold criteria for querying for a list of GBeans.  Further, we 
like the idea of querying by interface rather than by name where possible.  
This should eliminate many of the places ObjectNames are otherwise used, 
and encourage queries by functionality rather than by a name which may in 
many cases be somewhat arbitrary.  Side note: this has been implemented 
already, (GBeanQuery and Kernel.listGBeans(GBeanQuery), though it 
currently still supports querying by name as the idea is to be able to 
port everything over to GBeanQuery independently of making the rest of 
these changes).


	I think we'd like to resolve our direction on this for M5, so that 
we don't end up fussing or reverting code at the last minute.  I'm not 
sure we have any concensus on how much we should aim to implement in M5 
even if we come to full agreement.  But it would definitely be great to 
get more feedback from the rest of the group.  As not everyone's going to 
be available in the near future I think we'll need to keep this issue open 
for a while, but it may take time to resolve it anyway.

Thanks,
	Aaron