Standard MBeans are well suited for management interfaces that are
relatively static. However, if a management interface must be defined
for an existing resource, is likely to evolve over time, or for some
other reason needs to be exposed at runtime, JMX provides an
interface that allows you to do just that. In this chapter, we will
start by looking at the reasons for instrumenting application code as
dynamic MBeans. Then we will look at the metadata classes that are
used to define the management interface of a dynamic MBean. Next, we
will explore ways to implement the DynamicMBean
interface and show how the MBeanInfo
metadata
class is critical in making dynamic MBeans work. At the end of the
chapter, we will examine the management interface inheritance
patterns that are used with dynamic MBeans.
This chapter assumes that you either are already familiar with standard MBeans or have read Chapter 2.
The main reason to use dynamic MBeans is to more easily instrument
existing code that is written in a manner that conflicts with the
standard MBean design patterns we discussed in Chapter 2. The dynamic MBean
interface is determined not through
introspection, but rather through a method call on the dynamic MBean
itself. This method, called getMBeanInfo(
)
, returns information about the management
interface and is defined on the DynamicMBean
interface; it is the portal through which a management application
views what has been exposed on the management interface of a resource
that has been instrumented as a dynamic MBean.
Another reason to use dynamic MBeans is so that you can provide descriptions of the MBean features that are visible to the management application. An MBean feature is an attribute, constructor, operation, parameter, or notification of an MBean. The feature description is a brief explanation of what a particular feature means when viewed from a management application. The feature’s name usually indicates what it means, but this isn’t always the case. Feature descriptions are not available to standard MBeans.
Because the dynamic MBean interface is exposed at runtime, rather than at compile time (as a standard MBean is), the management interface is exposed through metadata classes. If the management interface is likely to change over time, dynamic MBeans offer a more flexible way to instrument a resource. The management interface is not statically bound to a dynamic MBean, as it is for a standard MBean. Rather, the management interface is exposed dynamically. As such, it is conceivable that a dynamic MBean could—without code changes—expose a different interface from one instance to the next by reading which attributes and operations to expose from a configuration file.