Java Management Extensions

Java Management Extensions (JMX) — технология Java для управления и мониторинга приложений, системных объектов, устройств, например, принтеров и сервисно-ориентированных сетей. Эти ресурсы представлены объектами, называемыми MBeans. В программном интерфейсе (API) поддерживается динамическая загрузка и создание экземпляров классов.

Описание

Проектирование и разработка средств управления и мониторинга приложений на Java возможны с помощью комплекта средств динамического управления Java (Java Dynamic Management Kit)[1].

JSR 003[2] (Java Community Process) определял спецификации JMX 1.0, 1.1 и 1.2. Разработка JMX 2.0 велась по JSR 255, но данный JSR был впоследствии отозван[3]. JMX Remote API 1.0 для удалённого управления и мониторинга определён JSR 160[4]. Расширение JMX Remote API для веб-сервисов разрабатывалось в рамках JSR 262[5].

Технология раннее была принята сообществом J2EE, а с версии 5.0 входит в состав J2SE. «JMX» является товарным знаком Oracle Corporation.

Архитектура

undefined

JMX использует трёхуровневую архитектуру:

  1. Пробный уровень — также называемый уровень инструментирования; включает пробные компоненты (MBean) для инструментирования ресурсов.
  2. Агентный уровень или MBeanServer — ядро JMX; служит посредником между MBean и приложениями.
  3. Уровень удалённого управления позволяет удалённым приложениям обращаться к MBeanServer через соединители и адаптеры. Соединитель обеспечивает полный удалённый доступ к API MBeanServer с использованием различных технологий связи (RMI, IIOP, JMS, WS-* и другие), тогда как адаптер приспосабливает API под другие протоколы или под веб-интерфейсы.

Приложения могут быть универсальными консолями, например, JConsole[6] или MC4J[7], либо специализированными отраслевыми системами мониторинга. Внешние приложения могут взаимодействовать с MBean с помощью соединителей и адаптеров протоколов JMX. Соединители связывают агент с удалённым приложением управления с поддержкой JMX; такая связь требует наличия соединителя на стороне агента JMX и клиентского соединителя в управляющем приложении.

Java SE поставляется с одним стандартным соединителем — RMI-соединителем, использующим протокол Java Remote Method Protocol в рамках API RMI, который широко применяется в управляющих приложениях.

Адаптеры протоколов дают представление о JMX-агенте через определённый протокол. Приложения, подключающиеся к адаптеру, как правило, заточены под этот протокол.

Управляемые компоненты

Управляемый компонент — также называемый MBean — частный случай JavaBean, создаваемый с использованием внедрения зависимостей. Управляемые компоненты широко применяются в технологии Java Management Extensions, однако в Java EE 6 этому понятию придано более широкое и детализированное определение.

MBean представляет ресурс, запускаемый в виртуальной машине Java, будь то приложение или техническая служба Java EE . Они могут использоваться для сбора статистики по производительности, использованию ресурсов или возникновению проблем (pull); для получения и установки настроек приложения; для уведомления о событиях, сбоях или изменениях состояния.

В Java EE 6 управляемым компонентом считается bean, реализованный на основе класса Java. Класс верхнего уровня рассматривается как управляемый компонент, если он объявлен таковым в других спецификациях технологий Java EE, например, JavaServer Faces, или если он удовлетворяет следующим условиям:

  1. Это не нестатический внутренний класс.
  2. Это конкретный класс или класс, аннотированный @Decorator.
  3. Класс не содержит аннотаций EJB-компонентов, определяющих компоненты, и не объявлен как bean EJB в ejb-jar.xml.

Для объявления bean как управляемого компонента не требуется специальной аннотации.

MBean может сообщать серверу MBeanServer об изменениях своих атрибутов, реализуя интерфейс javax.management.NotificationEmitter. Приложение, заинтересованное в изменениях, регистрирует слушателя (javax.management.NotificationListener) в MBeanServer. Следует учитывать, что JMX не гарантирует доставку всех уведомлений слушателям[8].

Типы

Выделяют два базовых типа MBean:

  • Стандартные MBean реализуют бизнес-интерфейс c методами чтения/записи атрибутов и операций (методов).
  • Динамические MBean реализуют интерфейс javax.management.DynamicMBean, позволяя перечислять атрибуты и операции, а также получать и устанавливать значения атрибутов.

Дополнительные типы: Open MBean, Model MBean и Monitor MBean. Open MBean — это динамический компонент, использующий базовые типы данных, является более самостоятельным и удобным для пользователя. Model MBean — динамический компонент, который может конфигурироваться во время выполнения; в спецификации предусмотрена универсальная реализация для динамического управления ресурсами во время работы.

MXBean (Platform MBean) — особый тип MBean, реализующий поддержку подсистем виртуальной машины Java вроде сборщика мусора, JIT-компиляции, пулов памяти, многопоточности и др.

MLet (management applet) — служебный компонент для загрузки, создания экземпляров и регистрации MBean в MBeanServer на основе XML-описания. Формат XML-дескриптора:[9]

 <MLET CODE = ''class'' | OBJECT = ''serfile''
   ARCHIVE = ''archiveList''
   [CODEBASE = ''codebaseURL'']
   [NAME = ''objectName'']
   [VERSION = ''version'']
 >
   [arglist]
 </MLET>

Поддержка

JMX поддерживается на разных уровнях рядом поставщиков и открытых проектов:

  • JMX внедрён в серверы Java-приложений, такие как OpenCloud Rhino Application Server, JBoss, JOnAS, WebSphere Application Server, WebLogic, SAP NetWeaver Application Server, Oracle Application Server 10g, Sun Java System Application Server.
  • JMX поддерживается серверами UnboundID Directory Server, Directory Proxy Server и Synchronization Server[10].
  • Средства управления, поддерживающие данный протокол: Empirix OneSight, GroundWork Monitor, Hyperic, HP OpenView, IBM Director, ITRS Geneos, Nimsoft NMS, OpenNMS[11], Zabbix, Zenoss Core, Zyrion, SolarWinds, Uptime Infrastructure Monitor, LogicMonitor[12].
  • JMX поддерживается контейнерами сервлетов, такими как Apache Tomcat[13] и Jetty.
  • MX4J — открытая реализация JMX для корпоративных вычислений.
  • jManage — свободная JMX-консоль корпоративного уровня с веб- и консольным интерфейсом.
  • MC4J — открытая визуальная консоль для подключения к серверам, поддерживающим JMX.
  • snmpAdaptor4j — открытый проект для упрощённого доступа к MBean через протокол SNMP.
  • jvmtop — лёгкий открытый инструмент мониторинга на JMX через командную строку.
  • Prometheus может принимать JMX-данные через JMX Exporter[14], который формирует метрики в формате Prometheus.
  • Инфраструктурный агент New Relic собирает данные JMX[15], которые отображаются на различных графиках платформы наблюдаемости[16][17].
  • Jolokia — Java-агент, предоставляющий доступ к JMX по HTTP для интеграции с не-Java системами.

Примечания

Литература

  • Benjamin G. Sullins, Mark B. Whipple: JMX in Action: You will also get your first JMX application up and running, Manning Publications Co. 2002, ISBN 1-930110-56-1
  • J. Steven Perry: Java Management Extensions, O'Reilly, ISBN 0-596-00245-9
  • Jeff Hanson: Connecting JMX Clients and Servers: Understanding the Java Management Extensions, APress L. P., ISBN 1-59059-101-1
  • Marc Fleury, Juha Lindfors: JMX: Managing J2EE with Java Management Extensions, Sams Publishing, ISBN 0-672-32288-9

Ссылки