Jaroslav Bachorik wrote:
On Thu 06 Jun 2013 05:22:31 PM CEST, shanliang wrote:
Jaroslav,
It is now OK for me about the MBean interface searching in the
Introspector.
Here is my comment on JMX.java:
206 -- 212 you added a call
Introspector.testComplianceMBeanInterface(interfaceClass);
It is better to move this call to:
MBeanServerInvocationHandler.newProxyInstance
because the real job is done in newProxyInstance and it could be
directly called by anyone.
Hm, wouldn't it be better to move the actual logic from
MBeanServerInvocationHandler.newProxyInstance to JMX.newMBeanProxy and
delegate the MBSIH.newProxyInstance back to JMX.newMBeanProxy ? This
way it would be consistent with the way JMX.newMXBeanProxy is written.
I have no opinion here, this is an implementation detail, anyway we have
to keep both JMX.newMBeanProxy and
MBeanServerInvocationHandler.newProxyInstance
Shanliang
All others are OK for me.
Thanks.
-JB-
Shanliang
Jaroslav Bachorik wrote:
On Wed 05 Jun 2013 07:54:10 PM CEST, shanliang wrote:
Daniel Fuchs wrote:
On 6/5/13 3:55 PM, Jaroslav Bachorik wrote:
class A extends B { ...}
class B implements AMBean {...}
Yes, I see it now. However, when you check the JMX specification, page
50 onwards, the current implementation does not seem to be correct.
"3. If MyClass is an instance of the DynamicMBean interface, then
MyClassMBean is
ignored. If MyClassMBean is not a public interface, it is not a JMX
manageable
resource. If the MBean is an instance of neither MyClassMBean nor
DynamicMBean, the inheritance tree of MyClass is examined, looking
for the
nearest superclass that implements its own MBean interface.
a. If there is an ancestor called SuperClass that is an instance of
SuperClassMBean, the design patterns are used to derive the
attributes and
operations from SuperClassMBean. In this case, the MBean MyClass then
has the same management interface as the MBean SuperClass. If
SuperClassMBean is not a public interface, it is not a JMX manageable
resource.
b. When there is no superclass with its own MBean interface, MyClass is
not a
Standard MBean."
According to the specification the correct MBean interface for
class A extends B { ...}
class B implements BMBean, AMBean
would be BMBean
Hi Jaroslav,
Given that A is an instance of AMBean I think that according to the
specification the correct interface should be AMBean.
It's true that the JMX Specification does not explicitly speak of this
case - but neither does it forbid it.
My advice would therefore be to clarify the spec on this point,
if that's needed - rather than risking the introduction of
incompatibilities.
-- daniel
Look at the spec 1.4:
------
2. If the MyClass MBean is an instance of a MyClassMBean interface,
then only the methods listed in, or inherited by, the interface are
considered among all the methods of, or inherited by, the MBean. The
design patterns are then used to identify the attributes and
operations from the method names in the MyClassMBean interface and its
ancestors. In other words, MyClass is a standard MBean
------
Here A is an instance of AMBean, according to 2), A is a standard
MBean and AMBean must be taken,
3) specifies the condition as "If the MBean is an instance of neither
MyClassMBean nor DynamicMBean", our example is out of this condition,
so should not apply 3) to our example.
Ok. I've reverted to the original implementation.
http://cr.openjdk.java.net/~jbachorik/8010285/webrev.03/
The whole MBean interface inferring algorithm is a bit of black magic,
though. I mean, checking all the interfaces implemented by all the
classes in the inheritance hierarchy is counter-intuitive. I mean, why
would you do something like :
MyServiceIfc extends ObscureIfc extends ServiceMBean
Service implements MyServiceIfc
and silently supposing that somewhere in the interface inheritance
hierarchy just happen to be a properly named interface and my Service
would become a managed resource. Not mentioning the fact, that the
current implementation will fail to resolve the ServiceMBean as the
MBean interface - it stops checking by ObscureIfc.
It would be much easier for the user if he just specified the MBean
interface alongside the implementation class (... implements ...,
ServiceMBean) cleanly indicating that an object is a managed resource.
But, what you gonna do ... changing the spec would probably open a
whole another can of worms and since nobody is complaining about the
current implementation we can just leave it as it is.
-JB-
Shanliang
and for
class A extends B { ...}
class B implements AMBean {...}
is not defined; neither B or A are manageable resources.
As I said, the jtreg and jck test does not seem to mind which
implementation is used, they all pass happily. I would prefer bringing
the implementation in sync with the specification.
-JB-