They are used for quite different purposes. JMX is a standardized way to manage your components and instrument them. Reflection is a way to dynamically discover things about a class at runtime.
Yes JMX was originally intended for dynamic management of applications.
It is used within JBoss to provide de-coupling of
You can think of it as reflection based on identity,
rather than reference. The implementing object can
change but your ObjectName is still valid.
Also, the invocation is detyped, it is not based
on interfaces. Although Standard MBeans and MBean
proxies provide an easy mechanism to reintroduce
interfaces without losing the decoupling.