Пакет javax.management
Предоставляет основные классы для Java Management Extensions.
API Java Management Extensions (JMX™) — это стандартный API для управления и мониторинга. Типичные применения включают:
- консультацию и изменение конфигурации приложения
- собирание статистики о поведении приложения и её предоставление
- уведомление об изменениях состояния и ошибочных ситуациях.
API JMX также может использоваться как часть решения для управления системами, сетями и т. д.
API включает удалённый доступ, поэтому программа удалённого управления может взаимодействовать с работающим приложением в этих целях.
MBean
Фундаментальное понятие API JMX — это MBean. MBean — это именованный управляемый объект, представляющий ресурс. У него есть интерфейс управления, который должен быть публичным и состоять из:
- именованных и типизированных атрибутов, которые могут считываться и/или записываться
- именованных и типизированных операций, которые могут вызываться
- типизированных уведомлений, которые могут испускаться MBean.
Например, MBean, представляющий конфигурацию приложения, может иметь атрибуты, представляющие различные элементы конфигурации. Чтение атрибута CacheSize вернёт текущее значение этого элемента. Запись в него обновит элемент, потенциально изменив поведение работающего приложения. Такая операция, как save, может сохранить текущую конфигурацию постоянно. Уведомление, такое как ConfigurationChangedNotification, может отправляться каждый раз при изменении конфигурации.
В стандартном использовании API JMX MBean реализуются как объекты Java. Однако, как описано ниже, к этим объектам обычно нет прямого доступа.
Стандартные MBean
Для упрощения реализации MBean API JMX включает понятие стандартных MBean. Стандартный 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.
Точные схемы именования для стандартных MBean подробно описаны в Спецификации JMX.
Существует два способа создания объекта Java, являющегося MBean с этим интерфейсом управления. Один — создать объект класса, имеющего точно такое же имя, как Java-интерфейс, но без суффикса MBean. Таким образом, в примере объектом будет класс Configuration, в том же пакете Java, что и ConfigurationMBean. Второй способ — использовать класс StandardMBean.
MXBean
MXBean — это вариант стандартного MBean, где сложные типы отображаются на стандартный набор типов, определённых в пакете javax.management.openmbean. MXBean подходит, если вам нужно сослаться на классы, специфичные для приложения, в вашем интерфейсе MBean. Они подробно описаны в спецификации MXBean.
Динамические MBean
Динамический MBean — это MBean, который определяет свой интерфейс управления во время выполнения. Например, MBean конфигурации может определить имена и типы атрибутов, которые он предоставляет, анализируя XML-файл.
Любой объект Java класса, реализующего интерфейс DynamicMBean, является динамическим MBean.
Открытые MBean
Открытый MBean — это вид динамического MBean, где типы атрибутов и параметров и значений возвращаемых операций строятся с использованием небольшого набора предопределённых Java-классов. Открытые MBean облегчают работу с программами удалённого управления, которые, возможно, не имеют доступа к классам, специфичным для приложения, включая программы, не написанные на Java. Открытые MBean определяются пакетом
javax.management.openmbean.
Модельные MBean
Модельный MBean — это вид динамического MBean, который служит мостом между интерфейсом управления и базовым управляемым ресурсом. Как интерфейс управления, так и управляемый ресурс задаются как объекты Java. Одну и ту же реализацию Модельного MBean можно многократно использовать с различными интерфейсами управления и управляемыми ресурсами, и она может предоставлять общую функциональность, такую как сохранение и кэширование. Модельные MBean определяются пакетом
javax.management.modelmbean.
Сервер MBean
Для полезности MBean должен быть зарегистрирован в сервере MBean. Сервер MBean — это хранилище MBean. Обычно единственный доступ к MBean осуществляется через сервер MBean. Другими словами, код больше не обращается напрямую к объекту Java, реализующему MBean, а вместо этого обращается к MBean по имени через сервер MBean. Каждый MBean имеет уникальное имя в сервере MBean, определяемое классом ObjectName.
Сервер MBean — это объект, реализующий интерфейс MBeanServer. Наиболее удобным сервером MBean является платформенный сервер MBean. Это единственный сервер MBean, который может использоваться разными управляемыми компонентами, работающими в одной и той же виртуальной машине Java. Доступ к платформаному серверу MBean осуществляется с помощью метода ManagementFactory.getPlatformMBeanServer().
Код приложения также может создать новый сервер MBean или получить доступ к уже созданным серверам MBean с помощью класса MBeanServerFactory.
Создание MBean в сервере MBean
Существует два способа создания MBean. Один — создать объект Java, который будет MBean, а затем использовать метод registerMBean для его регистрации в сервере MBean. Другой — создать и зарегистрировать MBean в одной операции с помощью одного из методов createMBean.
Метод registerMBean проще для локального использования, но не может быть использован удалённо. Метод createMBean может быть использован удалённо, но иногда требует внимания к проблемам загрузки классов.
MBean может выполнять действия при регистрации или аннулировании регистрации в сервере MBean, если он реализует интерфейс MBeanRegistration.
Доступ к MBean в сервере 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 может быть запрошен на MBean, чьи имена соответствуют определённым шаблонам и/или чьи атрибуты удовлетворяют определённым ограничениям. Шаблоны имён строятся с помощью класса 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 может быть слушателем уведомлений, испускаемых другими MBean в одном сервере MBean. В этом случае он реализует NotificationListener, и используется метод MBeanServer.addNotificationListener(ObjectName,
ObjectName, NotificationFilter, Object) для прослушивания.
Удалённый доступ к MBean
Сервер 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
- См. также:
- Спецификация JMX, версия 1.4
| Интерфейс | Описание |
|---|---|
| Descriptor | Дополнительные метаданные для элемента JMX. |
| DescriptorAccess | Этот интерфейс используется для получения доступа к дескрипторам класса Descriptor, которые связаны с компонентом JMX, т.е. |
| DescriptorRead | Интерфейс для чтения дескриптора элемента интерфейса управления, такого как MBeanInfo. |
| DynamicMBean | Определяет методы, которые должны быть реализованы динамическим MBean (MBean, который раскрывает динамический интерфейс управления). |
| MBeanRegistration | Может быть реализован MBean для выполнения операций до и после регистрации или отмены регистрации в сервере MBean. |
| MBeanServer | Это интерфейс для управления MBean на стороне агента. |
| MBeanServerConnection | Этот интерфейс представляет способ взаимодействия с сервером MBean, локальным или удалённым. |
| MBeanServerDelegateMBean | Определяет интерфейс управления объектом класса MBeanServerDelegate. |
| NotificationBroadcaster | Интерфейс, реализуемый MBean, который отправляет уведомления. |
| NotificationEmitter | Интерфейс, реализуемый MBean, который отправляет уведомления. |
| NotificationFilter | Должен быть реализован любым классом, выполняющим роль фильтра уведомлений. |
| NotificationListener | Должен быть реализован объектом, который хочет получать уведомления. |
| PersistentMBean | Этот класс является интерфейсом, который должен быть реализован MBean, предназначенным для сохранения. |
| QueryExp | Представляет реляционные ограничения, аналогичные "условиям where" в запросах к базе данных. |
| ValueExp | Представляет значения, которые могут быть переданы в качестве аргументов реляционным выражениям. |
| Класс | Описание |
|---|---|
| Attribute | Представляет атрибут MBean, связывая его имя со значением. |
| AttributeChangeNotification | Предоставляет определения уведомлений об изменении атрибутов, отправляемых MBean. |
| AttributeChangeNotificationFilter | Этот класс реализует интерфейс |
| AttributeList | Представляет список значений атрибутов MBean. |
| AttributeValueExp | Представляет атрибуты, используемые в качестве аргументов реляционных ограничений. |
| DefaultLoaderRepository | Устарело. Используйте MBeanServer.getClassLoaderRepository() вместо этого. |
| ImmutableDescriptor | Неизменяемый дескриптор. |
| JMX | Статические методы из API JMX. |
| MBeanAttributeInfo | Описывает атрибут MBean, доступный для управления. |
| MBeanConstructorInfo | Описывает конструктор, доступный MBean. |
| MBeanFeatureInfo | Предоставляет общую информацию об объекте дескриптора MBean. |
| MBeanInfo | Описывает интерфейс управления, предоставляемый MBean; то есть набор атрибутов и операций, доступных для операций управления. |
| MBeanNotificationInfo | Класс |
| MBeanOperationInfo | Описывает операцию управления, доступную MBean. |
| MBeanParameterInfo | Описывает аргумент операции, доступной MBean. |
| MBeanPermission | Разрешение, контролирующее доступ к операциям MBeanServer. |
| MBeanServerBuilder | Этот класс представляет собой билдер, который создаёт реализацию по умолчанию |
| MBeanServerDelegate | Представляет сервер MBean с точки зрения управления. |
| MBeanServerFactory | Предоставляет ссылки на серверы MBean. |
| MBeanServerInvocationHandler |
|
| MBeanServerNotification | Представляет уведомление, отправленное сервером MBean через MBeanServerDelegate MBean. |
| MBeanServerPermission | Разрешение для выполнения действий, связанных с серверами MBean. |
| MBeanTrustPermission | Это разрешение представляет собой "доверие" к подписывающему лицу или кодовой базе. |
| Notification | Класс Notification представляет уведомление, испускаемое MBean. |
| NotificationBroadcasterSupport | Предоставляет реализацию интерфейса |
| NotificationFilterSupport | Предоставляет реализацию интерфейса |
| ObjectInstance | Используется для представления имени объекта MBean и его имени класса. |
| ObjectName | Представляет имя объекта MBean или шаблон, который может соответствовать именам нескольких MBean. |
| Query | Строит ограничения объектов запроса. |
| QueryEval | Разрешает выполнение запроса в контексте конкретного сервера MBean. |
| StandardEmitterMBean | MBean, интерфейс управления которого определяется рефлексией над Java-интерфейсом, и который отправляет уведомления. |
| StandardMBean | MBean, интерфейс управления которого определяется рефлексией над Java-интерфейсом. |
| StringValueExp | Представляет строки, которые являются аргументами реляционных ограничений. |
| Исключение | Описание |
|---|---|
| AttributeNotFoundException | Указанный атрибут не существует или не может быть получен. |
| BadAttributeValueExpException | Выбрасывается, когда в метод построения запроса передается недопустимый атрибут MBean. |
| BadBinaryOpValueExpException | Выбрасывается, когда в метод построения запроса передается недопустимое выражение. |
| BadStringOperationException | Выбрасывается, когда в метод построения запроса передается недопустимая строковая операция. |
| InstanceAlreadyExistsException | MBean уже зарегистрирован в репозитории. |
| InstanceNotFoundException | Указанный MBean не существует в репозитории. |
| IntrospectionException | Во время интроспекции MBean произошла ошибка. |
| InvalidApplicationException | Выбрасывается, когда выполняется попытка применить следующее: выражение подзапроса к MBean или выражение квалифицированного атрибута к MBean неверного класса. |
| InvalidAttributeValueException | Указанное значение не является допустимым для атрибута. |
| JMException | Исключения, выбрасываемые реализациями JMX. |
| JMRuntimeException | Исключения времени выполнения, генерируемые реализациями JMX. |
| ListenerNotFoundException | Указанный слушатель MBean не существует в репозитории. |
| MalformedObjectNameException | Формат строки не соответствует допустимому ObjectName. |
| MBeanException | Представляет "пользовательские" исключения, выбрасываемые методами MBean в агенте. |
| MBeanRegistrationException | Оборачивает исключения, выбрасываемые методами preRegister(), preDeregister() интерфейса |
| NotCompliantMBeanException | Исключение, возникающее при попытке зарегистрировать объект в сервере MBean, который не является совместимым с JMX MBean. |
| OperationsException | Представляет исключения, выбрасываемые в сервере MBean при выполнении операций с MBean. |
| ReflectionException | Представляет исключения, выбрасываемые в сервере MBean при использовании классов java.lang.reflect для вызова методов MBean. |
| RuntimeErrorException | Когда в агенте происходит |
| RuntimeMBeanException | Представляет исключения времени выполнения, выбрасываемые методами MBean в агенте. |
| RuntimeOperationsException | Представляет исключения времени выполнения, выбрасываемые в агенте при выполнении операций с MBean. |
| ServiceNotFoundException | Представляет исключения, возникающие при запросе недоступной службы. |
| Тип аннотации | Описание |
|---|---|
| ConstructorParameters | Аннотация конструктора, показывающая соответствие параметров конструктора методам-геттерам созданного объекта. |
| DescriptorKey | Мета-аннотация, описывающая, как элемент аннотации связан с полем в |
| MXBean | Аннотация для явного обозначения интерфейса как интерфейса MXBean или как интерфейса, не являющегося MXBean. |
© 1993, 2020, 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/11/docs/api/java.management/javax/management/package-summary.html