Пакет javax.management
Предоставляет основные классы для Java Management Extensions.
API Java Management Extensions (JMX) — это стандартный API для управления и мониторинга. Типичные варианты использования включают:
- просмотр и изменение конфигурации приложения
- сбор статистики о поведении приложения и предоставление к ней доступа
- уведомление об изменениях состояния и ошибочных ситуациях.
API JMX также можно использовать как часть решения для управления системами, сетями и так далее.
API включает удалённый доступ, поэтому программа удалённого управления может взаимодействовать с работающим приложением для этих целей.
MBeans
Основное понятие API JMX — это MBean. MBean — это именованный управляемый объект, представляющий ресурс. Он имеет интерфейс управления, который должен быть общедоступным и состоять из:
- именованных атрибутов с заданными типами, которые можно читать и/или записывать
- именованных операций с заданными типами, которые можно вызывать
- уведомлений с заданными типами, которые может отправлять MBean.
Например, MBean, представляющий конфигурацию приложения, может иметь атрибуты, соответствующие различным элементам конфигурации. Чтение атрибута CacheSize вернёт его текущее значение. Запись в него обновит элемент, что потенциально может изменить поведение работающего приложения. Такая операция, как save, может сохранять текущую конфигурацию. Уведомление, например ConfigurationChangedNotification, может отправляться каждый раз при изменении конфигурации.
При стандартном использовании API JMX MBeans реализуются как объекты Java. Однако, как объясняется ниже, прямые ссылки на эти объекты обычно не используются.
Стандартные MBeans
Чтобы упростить реализацию MBean, API JMX включает понятие стандартных MBeans. Стандартный MBean — это MBean, атрибуты и операции которого определяются по интерфейсу Java с использованием определённых соглашений об именовании, похожих на используемые в JavaBeans. Например, рассмотрим такой интерфейс:
public interface ConfigurationMBean {
public int getCacheSize();
public void setCacheSize(int size);
public long getLastChangedTime();
public void save();
}
Методы getCacheSize и setCacheSize определяют атрибут типа int с именем CacheSize, доступный для чтения и записи (с заглавной буквы в начале, в отличие от соглашения JavaBeans).
Метод getLastChangedTime определяет атрибут типа long с именем LastChangedTime. Этот атрибут доступен только для чтения, поскольку метода setLastChangedTime нет.
Метод save определяет операцию с именем save. Это не атрибут, поскольку его имя не начинается с get, set или is.
Точные соглашения об именовании для стандартных MBeans подробно описаны в спецификации JMX.
Есть два способа создать объект Java, являющийся MBean с этим интерфейсом управления. Первый — создать объект класса, имя которого в точности совпадает с именем интерфейса Java, но без суффикса MBean. В приведённом примере объект принадлежал бы классу Configuration в том же пакете Java, что и ConfigurationMBean. Второй способ — использовать класс StandardMBean.
MXBeans
MXBean — это разновидность стандартного MBean, в которой сложные типы преобразуются в стандартный набор типов, определённых в пакете javax.management.openmbean. MXBeans подходят в случаях, когда в противном случае в интерфейсе MBean пришлось бы ссылаться на классы, специфичные для приложения. Они подробно описаны в спецификации для MXBean.
Динамические MBeans
Динамический MBean — это MBean, который определяет свой интерфейс управления во время выполнения. Например, MBean конфигурации может определять имена и типы предоставляемых атрибутов, анализируя XML-файл.
Любой объект Java класса, реализующего интерфейс DynamicMBean, является динамическим MBean.
Открытые MBeans
Открытый MBean — это разновидность динамического MBean, в которой типы атрибутов, параметров операций и возвращаемых значений формируются с использованием небольшого набора предопределённых классов Java. Открытые MBeans упрощают взаимодействие с удалёнными программами управления, которым не обязательно иметь доступ к типам, специфичным для приложения, в том числе программам, не написанным на Java. Открытые MBeans определены в пакете
javax.management.openmbean.
Модельные MBeans
Модельный MBean — это разновидность динамического MBean, служащая связующим звеном между интерфейсом управления и базовым управляемым ресурсом. И интерфейс управления, и управляемый ресурс задаются как объекты Java. Одну и ту же реализацию модельного MBean можно многократно использовать с разными интерфейсами управления и управляемыми ресурсами; она также может предоставлять общие функции, такие как сохранение и кэширование. Модельные MBeans определены в пакете
javax.management.modelmbean.
Сервер MBean
Чтобы MBean был полезен, его необходимо зарегистрировать на сервере MBean. Сервер MBean — это хранилище MBeans. Обычно доступ к MBeans осуществляется только через сервер MBean. Иными словами, код больше не обращается напрямую к объекту Java, реализующему MBean, а получает доступ к MBean по имени через сервер MBean. Каждый MBean имеет уникальное имя в пределах сервера MBean, определяемое классом ObjectName.
Сервер MBean — это объект, реализующий интерфейс MBeanServer. Удобнее всего использовать сервер MBean платформы. Это единый сервер MBean, которым могут совместно пользоваться различные управляемые компоненты, работающие в одной виртуальной машине Java. Доступ к серверу MBean платформы осуществляется с помощью метода ManagementFactory.getPlatformMBeanServer().
Код приложения также может создать новый сервер MBean или получить доступ к уже созданным серверам MBean с помощью класса MBeanServerFactory.
Создание MBeans на сервере MBean
Создать MBean можно двумя способами. Первый — создать объект Java, который будет MBean, а затем зарегистрировать его на сервере MBean с помощью метода registerMBean. Второй — создать и зарегистрировать MBean одной операцией с помощью одного из методов createMBean.
Метод registerMBean проще для локального использования, но его нельзя использовать удалённо. Метод createMBean можно использовать удалённо, однако иногда при этом необходимо учитывать особенности загрузки классов.
MBean может выполнять действия при регистрации на сервере MBean или отмене регистрации, если он реализует интерфейс MBeanRegistration.
Доступ к MBeans на сервере MBean
Имея ObjectName name и MBeanServer mbs, вы можете обращаться к атрибутам и операциям, как показано в этом примере:
int cacheSize = mbs.getAttribute(name, "CacheSize");
Attribute newCacheSize =
new Attribute("CacheSize", new Integer(2000));
mbs.setAttribute(name, newCacheSize);
mbs.invoke(name, "save", new Object[0], new Class[0]);
Вместо этого, если у вас есть интерфейс Java, соответствующий интерфейсу управления MBean, можно использовать прокси MBean, как показано ниже:
ConfigurationMBean conf =
JMX.newMBeanProxy(mbs, name, ConfigurationMBean.class);
int cacheSize = conf.getCacheSize();
conf.setCacheSize(2000);
conf.save();
Использование прокси MBean — это лишь удобный способ обращения. Во втором примере в итоге вызываются те же операции MBeanServer, что и в первом.
На сервере MBean можно выполнять поиск MBeans, имена которых соответствуют определённым шаблонам и/или атрибуты которых удовлетворяют заданным ограничениям. Шаблоны имён создаются с помощью класса ObjectName, а ограничения — с помощью класса Query. Затем поиск выполняют методы queryNames и queryMBeans.
Жизненный цикл MBean
MBean может реализовать интерфейс MBeanRegistration, чтобы получать уведомления о регистрации на сервере MBean и отмене регистрации. Кроме того, метод preRegister позволяет MBean получить ссылку на объект MBeanServer и узнать своё ObjectName на сервере MBean.
Уведомления
Уведомление — это экземпляр класса Notification или его подкласса. Помимо класса Java, у него есть строка типа, позволяющая отличить его от других уведомлений того же класса.
MBean, отправляющий уведомления, должен реализовать интерфейс NotificationBroadcaster или NotificationEmitter. Обычно для этого он наследует класс NotificationBroadcasterSupport или делегирует соответствующие функции его экземпляру. Вот пример:
public class Configuration extends NotificationBroadcasterSupport
implements ConfigurationMBean {
...
private void updated() {
Notification n = new Notification(...);
sendNotification(n);
}
}
Уведомления может получать слушатель — объект, реализующий интерфейс NotificationListener. Слушателя можно добавить к MBean с помощью метода MBeanServer.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object). При необходимости этому методу можно передать фильтр, чтобы выбирать только интересующие уведомления. Фильтр — это объект, реализующий интерфейс NotificationFilter.
MBean может быть слушателем уведомлений, отправляемых другими MBeans на том же сервере MBean. В этом случае он реализует интерфейс NotificationListener, а для получения уведомлений используется метод MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object).
Удалённый доступ к MBeans
К серверу MBean можно получить удалённый доступ через коннектор. Коннектор позволяет удалённому приложению Java получать доступ к серверу MBean практически так же, как локальному. Коннекторы определены в пакете
javax.management.remote.
Спецификация JMX также определяет понятие адаптера. Адаптер преобразует запросы протокола, например SNMP или HTML, в обращения к серверу MBean. Так, например, операция SNMP GET может привести к выполнению getAttribute на сервере MBean.
Совместимость между версиями спецификации JMX
Когда клиент подключается к серверу с использованием удалённого API JMX, версии спецификации JMX у них могут различаться. Описанная здесь версия спецификации JMX — 1.4. Предыдущими версиями были 1.0, 1.1 и 1.2. (Версии 1.3 не было.) Стандартный удалённый API JMX рассчитан на работу начиная с версии 1.2, поэтому при развертывании на основе стандартов вопросы совместимости возникают только для версии 1.2 и более поздних.
Каждая версия спецификации JMX сохраняет функции предыдущих версий. Поэтому, если клиент использует более раннюю версию, чем сервер, проблем совместимости возникать не должно.
Если клиент использует более позднюю версию, чем сервер, некоторые новые функции могут быть недоступны, как описано в следующих разделах. Клиент может определить версию сервера, проверив атрибут SpecificationVersion объекта
MBeanServerDelegate.
Если удалённый сервер MBean имеет версию 1.2
-
Нельзя использовать подстановочные знаки в значении свойства-ключа объекта
ObjectName, напримерdomain:type=Foo,name=*. Подстановочные знаки, соответствующие целым свойствам, по-прежнему разрешены, например*:*или*:type=Foo,*. -
В запросе нельзя использовать
Query.isInstanceOf. -
В наблюдаемом атрибуте монитора нельзя использовать точечный синтаксис, например
HeapMemoryUsage.used, как описано в документации пакетаjavax.management.monitor.
- С момента версии:
- 1.5
- См. также:
| Класс | Описание |
|---|---|
| Attribute | Представляет атрибут MBean, связывая его имя со значением. |
| AttributeChangeNotification | Содержит определения уведомлений об изменении атрибутов, отправляемых MBean. |
| AttributeChangeNotificationFilter | Этот класс реализует интерфейс NotificationFilter для attribute change notification. |
| AttributeList | Представляет список значений атрибутов MBean. |
| AttributeNotFoundException | Указанный атрибут не существует или не может быть получен. |
| AttributeValueExp | Представляет атрибуты, используемые в качестве аргументов реляционных ограничений. |
| BadAttributeValueExpException | Вызывается, если недопустимый атрибут MBean передан методу построения запроса. |
| BadBinaryOpValueExpException | Вызывается, если недопустимое выражение передано методу построения запроса. |
| BadStringOperationException | Вызывается, если недопустимая строковая операция передана методу построения запроса. |
| ConstructorParameters | Аннотация конструктора, указывающая, каким образом параметры этого конструктора соответствуют методам получения значений созданного объекта. |
| DefaultLoaderRepository | Устарел. |
| Descriptor | Дополнительные метаданные элемента JMX. |
| DescriptorAccess | Этот интерфейс используется для доступа к дескрипторам класса Descriptor, связанным с компонентом JMX, то есть |
| DescriptorKey | Метааннотация, описывающая связь элемента аннотации с полем в Descriptor. |
| DescriptorRead | Интерфейс для чтения Descriptor элемента интерфейса управления, например MBeanInfo. |
| DynamicMBean | Определяет методы, которые должен реализовывать Dynamic MBean (MBean, предоставляющий динамический интерфейс управления). |
| ImmutableDescriptor | Неизменяемый дескриптор. |
| InstanceAlreadyExistsException | MBean уже зарегистрирован в репозитории. |
| InstanceNotFoundException | Указанный MBean не существует в репозитории. |
| IntrospectionException | Во время интроспекции MBean произошло исключение. |
| InvalidApplicationException | Вызывается при попытке применить одно из следующего: выражение подзапроса к MBean или квалифицированное выражение атрибута к MBean неподходящего класса. |
| InvalidAttributeValueException | Указанное значение недопустимо для атрибута. |
| JMException | Исключения, выбрасываемые реализациями JMX. |
| JMRuntimeException | Исключения времени выполнения, выбрасываемые реализациями JMX. |
| JMX | Статические методы API JMX. |
| ListenerNotFoundException | Указанный прослушиватель MBean не существует в репозитории. |
| MalformedObjectNameException | Формат строки не соответствует допустимому ObjectName. |
| MBeanAttributeInfo | Описывает атрибут MBean, предоставляемый для управления. |
| MBeanConstructorInfo | Описывает конструктор, предоставляемый MBean. |
| MBeanException | Представляет исключения, определённые пользователем и выбрасываемые методами MBean в агенте. |
| MBeanFeatureInfo | Предоставляет общую информацию об объекте-дескрипторе MBean. |
| MBeanInfo | Описывает интерфейс управления, предоставляемый MBean, то есть набор атрибутов и операций, доступных для выполнения операций управления. |
| MBeanNotificationInfo | Класс MBeanNotificationInfo используется для описания характеристик различных экземпляров уведомлений, отправляемых MBean для заданного класса уведомлений Java. |
| MBeanOperationInfo | Описывает операцию управления, предоставляемую MBean. |
| MBeanParameterInfo | Описывает аргумент операции, предоставляемой MBean. |
| MBeanPermission | Устарел, будет удалён: этот элемент API может быть удалён в будущей версии. Этот класс был полезен только совместно с диспетчером безопасности, поддержка которого прекращена. |
| MBeanRegistration | Может быть реализован MBean для выполнения операций до и после его регистрации или отмены регистрации на сервере MBean. |
| MBeanRegistrationException | Оборачивает исключения, выбрасываемые методами preRegister() и preDeregister() интерфейса MBeanRegistration. |
| MBeanServer | Это интерфейс для работы с MBean со стороны агента. |
| MBeanServerBuilder | Этот класс представляет построитель, создающий реализацию MBeanServer по умолчанию. |
| MBeanServerConnection | Этот интерфейс представляет способ взаимодействия с сервером MBean, локальным или удалённым. |
| MBeanServerDelegate | Представляет сервер MBean с точки зрения управления. |
| MBeanServerDelegateMBean | Определяет интерфейс управления объекта класса MBeanServerDelegate. |
| MBeanServerFactory | Предоставляет ссылки на серверы MBean. |
| MBeanServerInvocationHandler | InvocationHandler, перенаправляющий вызовы методов интерфейса управления MBean через сервер MBean к этому MBean. |
| MBeanServerNotification | Представляет уведомление, отправляемое сервером MBean через MBean MBeanServerDelegate. |
| MBeanServerPermission | Устарел, будет удалён: этот элемент API может быть удалён в будущей версии. Этот класс был полезен только совместно с диспетчером безопасности, поддержка которого прекращена. |
| MBeanTrustPermission | Устарел, будет удалён: этот элемент API может быть удалён в будущей версии. Этот класс был полезен только совместно с диспетчером безопасности, поддержка которого прекращена. |
| MXBean | Аннотация, явно помечающая интерфейс как интерфейс MXBean или указывающая, что он не является интерфейсом MXBean. |
| NotCompliantMBeanException | Исключение, возникающее при попытке зарегистрировать на сервере MBean объект, который не является MBean, совместимым с JMX. |
| Notification | Класс Notification представляет уведомление, отправляемое MBean. |
| NotificationBroadcaster | Интерфейс, реализуемый MBean, отправляющим уведомления. |
| NotificationBroadcasterSupport | Предоставляет реализацию интерфейса NotificationEmitter. |
| NotificationEmitter | Интерфейс, реализуемый MBean, отправляющим уведомления. |
| NotificationFilter | Должен реализовываться любым классом, выполняющим роль фильтра уведомлений. |
| NotificationFilterSupport | Предоставляет реализацию интерфейса NotificationFilter. |
| NotificationListener | Должен реализовываться объектом, который хочет получать уведомления. |
| ObjectInstance | Используется для представления имени объекта MBean и имени его класса. |
| ObjectName | Представляет имя объекта MBean или шаблон, которому могут соответствовать имена нескольких MBean. |
| OperationsException | Представляет исключения, выбрасываемые на сервере MBean при выполнении операций над MBean. |
| PersistentMBean | Этот интерфейс должны реализовывать MBean, предназначенные для сохранения состояния. |
| Query | Создаёт ограничения для объектов запроса. |
| QueryEval | Позволяет выполнять запрос в контексте определённого сервера MBean. |
| QueryExp | Представляет реляционные ограничения, аналогичные условиям «where» в запросах к базам данных. |
| ReflectionException | Представляет исключения, выбрасываемые на сервере MBean при использовании классов java.lang.reflect для вызова методов MBean. |
| RuntimeErrorException | Если в агенте возникает java.lang.Error, его следует перехватить и повторно выбросить как RuntimeErrorException. |
| RuntimeMBeanException | Представляет исключения времени выполнения, выбрасываемые методами MBean в агенте. |
| RuntimeOperationsException | Представляет исключения времени выполнения, выбрасываемые в агенте при выполнении операций над MBean. |
| ServiceNotFoundException | Представляет исключения, возникающие, если запрошенная служба не поддерживается. |
| StandardEmitterMBean | MBean, интерфейс управления которого определяется посредством рефлексии на основе интерфейса Java и который отправляет уведомления. |
| StandardMBean | MBean, интерфейс управления которого определяется посредством рефлексии на основе интерфейса Java. |
| StringValueExp | Представляет строки, используемые в качестве аргументов реляционных ограничений. |
| ValueExp | Представляет значения, которые можно передавать в качестве аргументов реляционных выражений. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.management/javax/management/package-summary.html
MBeanServer.getClassLoaderRepository().