Spec-Zone.ru › OpenJDK 24

Пакет javax.management

package 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. Это единый сервер 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
См. также:
  • Спецификация JMX, версия 1.4
Пакет Описание
javax.management.loading
Предоставляет классы, которые реализуют расширенную динамическую загрузку.
javax.management.modelmbean
Предоставляет определение классов ModelMBean.
javax.management.monitor
Предоставляет определение классов монитора.
javax.management.openmbean
Предоставляет типы открытых данных и классы описателей Open MBean.
javax.management.relation
Предоставляет определение службы Relation.
javax.management.remote
Интерфейсы для удаленного доступа к серверам JMX MBean.
javax.management.timer
Предоставляет определение MBean таймера.
Класс Описание
Attribute
Представляет атрибут MBean, связывая его имя со значением.
AttributeChangeNotification
Предоставляет определения уведомлений об изменении атрибутов, отправляемых MBean.
AttributeChangeNotificationFilter
Этот класс реализует интерфейс NotificationFilter для attribute change notification.
AttributeList
Представляет список значений атрибутов MBean.
AttributeNotFoundException
Указанный атрибут не существует или не может быть извлечен.
AttributeValueExp
Представляет атрибуты, используемые в качестве аргументов для реляционных ограничений.
BadAttributeValueExpException
Выбрасывается, когда недействительный атрибут MBean передается методу построения запроса.
BadBinaryOpValueExpException
Выбрасывается, когда недействительное выражение передается методу для построения запроса.
BadStringOperationException
Выбрасывается, когда недействительная строковая операция передается методу для построения запроса.
ConstructorParameters
Аннотация конструктора, показывающая, как параметры конструктора соответствуют методам-геттерам созданного объекта.
DefaultLoaderRepository Устарело.
Используйте MBeanServer.getClassLoaderRepository() вместо этого.
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
Формат строки не соответствует допустимому имени объекта.
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.
END_OF_DOCUMENT_MARKER
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
Представляет реляционные ограничения, похожие на операторы "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://download.java.net/java/early_access/jdk24/docs/api/java.management/javax/management/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API