- 
        1. Re: DefaultDomain compliance/compatibilitysquirest Feb 19, 2002 8:50 AM (in response to adrian.brock)Ok, 
 These are all just my opinion - your question isn't realy covered by the spec...
 first off, I think any ObjectNames stored by the MBeanServer should be fully qualified. i.e. registering with a name ":foo=bar" should cause a new ObjectName to be created (and stored the the MBeanEntry) with the default domain filled in.
 second, I believe that the MBeanRegistration.preRegister should only be given the fully qualified ObjectName.
 third, I think all ObjectNames returned by the MBeanServer should be fully qualified. If we only store fq objectnames then this isn't an issue, we just return what we store.
 last, an ObjectInstance from one MBeanServer is not equals() equivalent to an ObjectInstance from another MBeanServer.
 Trev
- 
        2. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 19, 2002 9:46 AM (in response to adrian.brock)I agree. 
 What should I do about the last point?
 I can subclass ObjectInstance for instances generated
 by the server. It would include an MBeanServer reference
 for comparison.
 Does an ObjectInstance need to be sent between
 JMX implementations? It is serializable.
 Obviously, I'll have to externalize it as a
 javax.management.ObjectInstance.
 This isn't covered by the spec at all.
 Look at the javadoc for ObjectInstance.equals(Object) :-)
 Regards,
 Adrian
- 
        3. Re: DefaultDomain compliance/compatibilitysquirest Feb 19, 2002 9:54 AM (in response to adrian.brock)Why don't we put the AgentID of the JMImplementation:type=MBeanServerDelegate into each ObjectInstance. It's a string (portable) and unique to the agent which is unique to the mbeanserver. 
 Trev
- 
        4. Re: DefaultDomain compliance/compatibilityjuha Feb 19, 2002 10:04 AM (in response to adrian.brock)> What should I do about the last point? 
 Add AgentID from MBean server delegate as part of the identity for object instances created by the server.
 > Does an ObjectInstance need to be sent between
 > JMX implementations?
 yes.
 -- Juha
- 
        5. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 20, 2002 7:55 AM (in response to adrian.brock)Ok, 
 I written a class
 org.jboss.mx.server.ServerObjectInstance
 extends javax.management.ObjectInstance
 that gives the required behaviour.
 MBeanServerImpl always returns one of these.
 The equals(Object) method handles comparisons
 between ServerObjectInstance and ObjectInstance
 correctly. Just in case somebody constructs one of the
 latter outside the Server.
 I've still got to test what happens if you serialize it
 and then deserialize in jmxri
 Should I add a special compliance suite
 for serialize/deserialize between JBossMX and jmxri?
 Regards,
 Adrian
- 
        6. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 20, 2002 8:11 AM (in response to adrian.brock)Back to the main default domain processing. 
 I've changed registerMBean and unregisterMBean
 to always calculate the fully qualifed name.
 This is important for validation of register/unregister
 the delegate.
 MBeanServer server = MBeanServerFactory.createMBeanServer("JMImplementation"); // :-)
 Should this really be allowed?
 I've got two solutions for the rest both store the fully
 qualified name in the registry.
 1) The ServerMBeanImpl calculates the fully qualified name
 when registry access is required.
 This is slow, but requires no special processing in the
 registry.
 Dynamic MBeans Default Domain: 1500 ms/100000 invocations
 Standard MBeands Default Domain: 2000ms/100000 invocations
 2) In the registry store a mirror registry for default
 domain mbeans.
 The main registry contains
 DefaultDomain:foo=bar
 and the mirror stores
 :foo=bar
 The registry then checks the mirror when it cannot find
 the requested object name in the main data structure.
 Dynamic MBeans Default Domain: 223 ms/100000 invocations
 Standard MBeands Default Domain: 604 ms/100000 invocations
 Question 1
 Is the speed increase worth the extra memory consumption?
 Question 2
 I'm not very happy with dividing this processing between
 the Server and the registry.
 I could document that registry.add and registry.remove
 always get a fully qualified name but other methods may
 get an unqualified name.
 This all assumes the registry implementation will
 eventually be pluggable.
 Regards,
 Adrian
- 
        7. Re: DefaultDomain compliance/compatibilitysquirest Feb 20, 2002 8:18 AM (in response to adrian.brock)Adrian, 
 I'm confused as to why you've created a subclass.
 What's wrong with putting the AgentID (or whatever id of the server you're using) as a private transient member of ObjectInstance?
 If our ObjectInstance is going to do something beyond what the RI ObjectInstance does then whatever we do, serialisation is going to be a problem if we deserialize using jmxri. Maybe the transient marker will help here but I am a complete void as far as serialisation goes.
 Trev
- 
        8. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 20, 2002 8:42 AM (in response to adrian.brock)javax.management.ObjectInstance is part of the 
 published API.
 To get the AgentID into an object I need a constructor
 with:
 public ObjectInstance(ObjectName name, String className,
 String AgentID)
 I didn't think it was acceptable to add methods to
 the public part of the API?
 Regards,
 Adrian
- 
        9. Re: DefaultDomain compliance/compatibilitysquirest Feb 20, 2002 8:52 AM (in response to adrian.brock)> Back to the main default domain processing. 
 Ok,
 Sorry to do this to you.
 There is a way we can do lookups without creating intermediate objects or needing duplicate contents of the registry.
 Rather than keying on the ObjectName, the registry should key on String domain, String canonicalKPListString.
 It could be a hash of hashes but I actually think a TST similar to what I'm doing to resolve opKEYs might be faster.
 A quick hack (if we were doing hash of hashes) would be to store the defaultdomain's hash under both "" and whatever the real value is for defaultdomain.
 Trev
- 
        10. Re: DefaultDomain compliance/compatibilitysquirest Feb 20, 2002 8:55 AM (in response to adrian.brock)> 
 > I didn't think it was acceptable to add methods to
 > the public part of the API?
 DOH!
 You're right of course.
 Trev
- 
        11. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 20, 2002 9:10 AM (in response to adrian.brock)> Sorry to do this to you. 
 >
 > There is a way we can do lookups without creating
 > intermediate objects or needing duplicate contents of
 > the registry.
 >
 > Rather than keying on the ObjectName, the registry
 > should key on String domain, String
 > canonicalKPListString.
 >
 > It could be a hash of hashes but I actually think a
 > TST similar to what I'm doing to resolve opKEYs might
 > be faster.
 >
 > A quick hack (if we were doing hash of hashes) would
 > be to store the defaultdomain's hash under both ""
 > and whatever the real value is for defaultdomain.
 >
 > Trev
 My turn to say DOH!
 We already have
 domain->ObjectName->Entry
 I dont't need the mirror, just change to (as you suggest)
 domain->canonicalKPListString->Entry
 I'll leave the TST implementation as an exercise to the
 reader, since you seem to be the world's leading expert :-)
 Regards,
 Adrian
- 
        12. Re: DefaultDomain compliance/compatibilityadrian.brock Feb 22, 2002 1:53 PM (in response to adrian.brock)Ok, 
 I've committed the code. Maybe someone can find the 50ms.
 From the profiling it looks like I'm breaking the
 caching in String.hashCode() or String.equals()
 I'm not sure how?
 DefDom.txt is for default domain
 Dom.txt is for specified domain
 The output is System.err
 -Xprof
 and snips from
 -Xrunhprof:cpu=times
 Regards,
 Adrian
 
    