Пакет javax.management
Предоставляет основные классы для Java Management Extensions.
См.: Описание
| Интерфейс | Описание |
|---|---|
| Descriptor | Дополнительные метаданные для элемента JMX. |
| DescriptorAccess | Этот интерфейс используется для доступа к дескрипторам класса Descriptor, которые связаны с компонентом JMX, т.е. |
| DescriptorRead | Интерфейс для чтения Descriptor элемента интерфейса управления, такого как MBeanInfo. |
| DynamicMBean | Определяет методы, которые должны быть реализованы динамическим MBean (MBean, который раскрывает динамический интерфейс управления). |
| MBeanRegistration | Может быть реализован MBean для выполнения операций до и после регистрации или отмены регистрации в сервере MBean. |
| MBeanServer | Это интерфейс для управления MBean на стороне агента. |
| MBeanServerConnection | Этот интерфейс представляет способ взаимодействия с сервером MBean, локальным или удаленным. |
| MBeanServerDelegateMBean | Определяет интерфейс управления объектом класса MBeanServerDelegate. |
| NotificationBroadcaster | Интерфейс, реализуемый MBean, который отправляет уведомления. |
| NotificationEmitter | Интерфейс, реализуемый MBean, который отправляет уведомления. |
| NotificationFilter | Должен быть реализован любым классом, выполняющим роль фильтра уведомлений. |
| NotificationListener | Должен быть реализован объектом, который хочет получать уведомления. |
| PersistentMBean | Этот класс является интерфейсом, который должен быть реализован MBean, которые должны быть постоянными. |
| QueryExp | Представляет реляционные ограничения, аналогичные условиям "где" в запросах к базе данных. |
| ValueExp | Представляет значения, которые могут быть переданы в качестве аргументов к реляционным выражениям. |
| Класс | Описание |
|---|---|
| Attribute | Представляет атрибут MBean, связывая его имя со значением. |
| AttributeChangeNotification | Предоставляет определения уведомлений об изменениях атрибутов, отправляемых MBean. |
| AttributeChangeNotificationFilter | Этот класс реализует интерфейс |
| AttributeList | Представляет список значений для атрибутов MBean. |
| AttributeValueExp | Представляет атрибуты, используемые в качестве аргументов к реляционным ограничениям. |
| DefaultLoaderRepository | Устарел Используйте |
| 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 | Представляет исключения, возникающие при запросе несуществующей службы. |
| Тип аннотации | Описание |
|---|---|
| DescriptorKey | Мета-аннотация, описывающая, как элемент аннотации связан с полем в |
| MXBean | Аннотация для явного обозначения интерфейса как интерфейса MXBean или как не являющегося MXBean интерфейсом. |
Описание пакета javax.management
Предоставляет основные классы для Java Management Extensions.
API Java Management Extensions (JMXTM) — это стандартный 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-интерфейса с использованием определенных шаблонов именования, аналогичных тем, которые используются JavaBeansTM. Например, рассмотрим такой интерфейс:
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.
Сервер MBeans
Для использования MBean необходимо зарегистрировать его в сервере MBeans. Сервер MBeans — это хранилище MBeans. Обычно единственный доступ к MBeans осуществляется через сервер MBeans. Другими словами, код больше не обращается к объекту Java, реализующему MBean напрямую, а вместо этого обращается к MBean по имени через сервер MBeans. Каждый MBean имеет уникальное имя в сервере MBeans, определенное классом ObjectName.
Сервер MBeans — это объект, реализующий интерфейс MBeanServer. Наиболее удобным сервером MBeans для использования является платформенный сервер MBeans. Это один сервер MBeans, который может быть общим для различных управляемых компонентов, работающих в одной и той же виртуальной машине Java. К платформному серверу MBeans доступ осуществляется с помощью метода ManagementFactory.getPlatformMBeanServer().
Код приложения также может создать новый сервер MBeans или получить доступ к уже созданным серверам MBeans, используя класс MBeanServerFactory.
Создание MBeans на сервере MBeans
Существует два способа создания MBean. Один — создать объект Java, который будет MBean, а затем использовать метод registerMBean для его регистрации в сервере MBeans. Другой — создать и зарегистрировать MBean в одной операции, используя один из методов createMBean.
Метод registerMBean проще для локального использования, но не может использоваться удаленно. Метод createMBean может использоваться удаленно, но иногда требует внимания к проблемам загрузки классов.
MBean может выполнять действия при регистрации или выходе из сервера MBeans, если он реализует интерфейс MBeanRegistration.
Доступ к MBeans на сервере MBeans
Учитывая 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 операции, что и первый.
Сервер MBeans может быть запрошен для MBeans, имена которых соответствуют определенным шаблонам и/или атрибуты которых удовлетворяют определенным ограничениям. Шаблоны имен строятся с использованием класса ObjectName, а ограничения — с использованием класса Query. Методы queryNames и queryMBeans затем выполняют запрос.
Жизненный цикл MBean
MBean может реализовать интерфейс MBeanRegistration, чтобы получать уведомления о регистрации и выходе из сервера MBeans. Кроме того, метод preRegister позволяет MBean получить ссылку на объект MBeanServer и получить его ObjectName в сервере MBeans.
Уведомления
Уведомление — это экземпляр класса 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 в том же сервере MBeans. В этом случае он реализует NotificationListener, и используется метод MBeanServer.addNotificationListener(ObjectName,
ObjectName, NotificationFilter, Object) для прослушивания.
Удаленный доступ к MBeans
Сервер MBeans может быть доступен удаленно через коннектор. Коннектор позволяет удаленному приложению Java получить доступ к серверу MBeans в той же мере, что и локальный. Пакет
javax.management.remote определяет коннекторы.
Спецификация JMX также определяет понятие адаптера. Адаптер переводит запросы в таком протоколе, как SNMP или HTML, и обеспечивает доступ к серверу MBeans. Например, операция SNMP GET может привести к getAttribute на сервере MBeans.
Взаимодействие между версиями спецификации 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 Server версии 1.2
-
Вы не можете использовать подстановочные знаки в ключевом свойстве
ObjectName, напримерdomain:type=Foo,name=*. Подстановочные знаки, соответствующие целым свойствам, всё ещё разрешены, например*:*или*:type=Foo,*. -
Вы не можете использовать
Query.isInstanceOfв запросе. -
Вы не можете использовать синтаксис с точкой, такой как
HeapMemoryUsage.usedв атрибуте наблюдаемого объекта монитора, как описано в документации для пакетаjavax.management.monitor.
- С:
- 1.5
- См. также:
- Документация платформы Java по технологии JMX, в частности, Спецификацию JMX, версия 1.4 (pdf).
© 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.