Пакет 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 — это такой, чьи атрибуты и операции вычисляются из 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. Это единственный Сервер MBean, который может быть общим для различных управляемых компонентов, работающих в одной и той же виртуальной машине Java. Доступ к Платформенному Серверу MBean осуществляется с помощью метода ManagementFactory.getPlatformMBeanServer().
Код приложения также может создать новый Сервер MBean или получить доступ к уже созданным Серверам MBean, используя класс MBeanServerFactory.
Создание MBeans в Сервере MBean
Существует два способа создания MBean. Один — создать объект Java, который будет MBean, а затем использовать метод registerMBean для его регистрации в Сервере MBean. Другой — создать и зарегистрировать 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
Когда клиент подключается к серверу с помощью JMX Remote API, возможно, что у них нет одинаковой версии спецификации JMX. Здесь описана версия спецификации JMX 1.4. Предыдущие версии были 1.0, 1.1 и 1.2. (Версии 1.3 не было.) Стандартный JMX Remote API работает с версией 1.2 и выше, поэтому в развертывании, основанном на стандартах, вопросы межсетевого взаимодействия возникают только с версией 1.2 и выше.
Каждая версия спецификации JMX продолжает реализовывать функции предыдущих версий. Таким образом, когда клиент работает в более ранней версии, чем сервер, не должно быть никаких проблем с межсетевым взаимодействием.
Когда клиент работает в более поздней версии, чем сервер, некоторые новые функции могут быть недоступны, как подробно описано в следующих разделах. Клиент может определить версию сервера, просмотрев атрибут SpecificationVersion сервера
MBeanServerDelegate.
Если удаленный сервер MBean имеет версию 1.2
-
Вы не можете использовать подстановочные знаки в ключевом свойстве
ObjectName, например,domain:type=Foo,name=*. Подстановочные знаки, соответствующие всему свойству, все еще разрешены, например,*:*или*:type=Foo,*. -
Вы не можете использовать
Query.isInstanceOfв запросе. -
Вы не можете использовать синтаксис с точкой, такой как
HeapMemoryUsage.usedв атрибуте наблюдаемого объекта монитора, как описано в документации для пакетаjavax.management.monitor.
- Since:
- 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 | Определяет методы, которые должны быть реализованы динамическим 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 | Разрешение, контролирующее доступ к операциям MBeanServer. |
| 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 через MBeanServerDelegate MBean. |
| MBeanServerPermission | Разрешение для выполнения действий, связанных с MBeanServer. |
| MBeanTrustPermission | Это разрешение представляет "доверие" к подписывающему лицу или кодовой базе. |
| MXBean | Аннотация для явного обозначения интерфейса как интерфейса MXBean или как не являющегося интерфейсом MXBean. |
| NotCompliantMBeanException | Исключение, возникающее при попытке зарегистрировать объект в сервере MBean, который не является совместимым с JMX MBean. |
| 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 | Представляет реляционные ограничения, аналогичные условиям запроса "где" в базах данных. |
| 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, 2023, 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/21/docs/api/java.management/javax/management/package-summary.html
MBeanServer.getClassLoaderRepository()вместо этого.