Java management extensions

Напевно найважливіше в розумінні JMX - зрозуміти мету її створення. Технологія JMX була розроблена для спрощення розробки систем моніторингу та управління. Причому управляти можна фактично чим завгодно - аби це було написано на Java. Це може бути мікро-пристрій типу зчитувача відбитка або система, що включає тисячі машин, кожна з яких надає певні послуги.

Типові варіанти використання технології JMX:

- збір і публікація статистичних даних про рабти додатки

- Повідомлення про будь-яких невірних зміни стану

Що дуже важливо відзначити - JMX по суті наказує розробнику розглядати ресурси програми як об'єкти і працювати з ними як з керованими ресурсами в розподіленої середовищі об'єктів.

Які вигоди пропонує JMX. Ось як ці вигоди описує Sun:

  • Простота реалізації. Архітектура JMX заснована на понятті «сервера керованих об'єктів» який виступає як керуючий агент і може бути запущений на багатьох пристроях / комп'ютерах, які підтримують JAVA.
  • Масштабованість. Служби агентів JXM є незалежними і можуть бути вбудовані зразок plug-in'ов в агента JMX. Компонентно-основанаая система дозволяє створювати масштабовані рішення від крихітних пристроїв до дуже великих систем.
  • Можливість розширювати концепцію в майбутньому. JMX дозволяє створювати гнучкі рішення. Наприклад, JMX дозволяє створювати зручні рішення, які можуть знаходити різні сервіси.
  • Концентрація на управлінні. JMX надає Серв, розроблені для роботи в розподілених середовищах і його API спроектовано для рішень, які керують додатками, мережами, сервісами і т.д.

JMX дозволяє створювати багаторівневу архітектуру, де керовані ресурси і управляє додаток можуть бути вбудовані в одне рішення, як показано на малюнку. Ресурси являють собою Java-обхекти - ManagedBeans (MBeans), які реєструються на основному сервері -MBean-server. Цей сервер діє як агент і може бути запущений практично скрізь, де є JVM.

Java management extensions

Давайте докладніше розберемо те, що зображено на малюнку.

Цей шар містить MBean'и і ресурси, якими вони керують. Ресурси можуть бути керовані, якщо вони або розроблені на Java, або мають якусь Java-обгортку. По суті ресурс стає об'єктом типу MBean (стандартним або динамічним - про це трохи пізніше). СтандартниеMBeans це Java-об'єкти, які підпорядковуються певним зразкам проектування (наприклад вони повинні мати конструктор і сеттери і геттери). Динамічні MBeans розробляються згідно з визначеним інтерфейсу, який надає велику гнучкість при виконанні. Рівень інструментарію дозволяє MBean'ам бути керованими на рівні агента (Agent Level), однак на даному рівні розробнику не треба знати про те, як влаштований агент з яким їм доведеться взаємодіяти.

Основними компонентами Instrumenation Level є:

  1. MBeans - це Java-об'єкти, які реалізують певний інтерфейс. Інтерфейс включає: 1) якісь величини, які можуть бути доступні; 2) операції, які можуть бути викликані; 3) повідомлення, які можуть бути послані; 4) конструктори.

Існує 4 типи MBeans:

1. Standard MBeans. Найпростіші біни. Їх керуючий інтерфейс визначається набором методів

2. Dynamic MBeans. Вони реалізують спеціалізований інтерфейс, який роблять доступним під час виконання.

3. Open MBeans. Це Dynamic MBeans, які використовують тільки основні типи даних для універсального управління.

4. Model MBeans. Це Dynamic MBeans, які повністю конфігурується і можуть показати свій опис під час виконання (щось вродеReflection)

  1. Notification Model - JMX визначає базову модель нотіфікатор, яка заснована на Java події (event). Використовуючи нотифікацію MBeansі JMX агенти можуть пересилати необхідну інформацію між собою
  2. MBean Metadata Classes - Ці класи містять структури для опису всіх компонентів MBeans інтерфейсів: атрибути, нотіфікатор, операції, конструктори. Для кожного з них метадані включають ім'я, опис і певні характеристики (наприклад атрибут тільки для читання або для читання / запису і т.д).
  1. MBean Server - це реєстр об'єктів, які використовуються для управління. Будь-який об'єкт зареєстрований на сервері стає доступним для додатків. Треба відзначити, що сервер публікує тільки інтерфейси і не дає прямих посилань на об'єкти. Будь-які ресурси, якими ви хочете керувати повинні бути зареєстровані на сервері як MBean. Сервер надає стандратний інтерфейс для доступу до MBean. Цікаво, що реєструвати MBean може будь-який інший MBean, сам агент або віддалений додаток через рапределеніе сервіси. Коли ви реєструєте MBean ви повинні дати йому унікальне ім'я, яке буде використано для звернення до даного об'єкту.
  2. Служби агента - об'єкти які можуть взаємодіяти з ресурсами в MBean (використовуються MBean для звернення до ресурсів). Для управління розроблений JMX API, який включає в себе наступні сервіси:

1. Dynamic Class Loader - за допомогою management applet'а (m-let) дозволяє завантажувати класи і виконавчі бібліотеки з різних місць

2. Монітори - вони спостерігають за змінами величин (Чілова або строкових) MBean і можуть сповіщати про ці зміни інші об'єкти.

3. Таймери - забезпечують нотифікацію за розкладом.

4. Інші сервіси - визначають відносини між MBean на визначених типах

Цей шар містить компоненти, які дозволяють додаткам взаємодіяти з агентом. Він забезпечує інтерфейс для реалізації JMXменеджеров.

Починаючи з Java SE 5 зроблена підтримка JMX 1.2 і JMX remote API 1.0 які є на сьогодні офіційною реалізацією. Java SE включає в себе наступні підсистеми:

  1. Інструментарій JVM - розроблений для моніторингу та управління. Є вбудованої можливістю для локального і віддаленого доступу.
  2. API моніторингу та управління - пакет java.kang.management включає інтерфейс для моніторингу та управління JVM. За допомогою нього можна отримувати різну інформацію - кількість завантажених класів, кількість потоків, параметри пам'яті, статистику збирача сміття і інше.
  3. Management tools - різні утиліти. Зокрема JConsole за допомогою якої можна підключитися до працюючої JVM і отримати її параметри.

Ви можете самі подивитися параметри запущеної JVM за допомогою утиліти JConsole. Можна зробити це локально - просто запустіть який-небудь додаток (краще нехай це буде форма на екрані - щоб не закривалася) і потім запустіть jconsole - прямо з командного рядка. Якщо у вас не прописаний шлях до какталога з цією програмою (вона знаходиться в кактлоге з javac), то пошукати його в цьому каталозі.

Віддалено трохи складніше - щоб не мучаться з настройками файлу паролів додаток можна запустити такий рядком

Як бачите тут все дуже просто - інтерфейс описує всього три методи. Сетер і геттер для рядка і одну дію - «скажи Hello» - sayHello.

Клас теж не представляє особливих складнощів. Він має два конструктора - один з ініціалізацією рядки за умовчанням і другий вже з вказаною рядком. Також реалізуються всі три методи. Але тим не менше це вже може бути справжнісіньким MBean'ом. Так що пишаєтеся.

Якщо поставитися більш серйозно, то насправді це сильний крок до об'єктного розуміння JMX. Адже у нас є з'являється легко робити відразу кілька речей:

      1. Встановлювати або зчитувати параметри. (Я кажу про методи set / get). Зараз там просто рядок, але ж може бути реально цінне значення. Наприклад вільне місце на диску. Правда він швидше за все буде ReadOnly. Але може бути і керовані параметри - наприклад кількість підключаються користувачів. Або системний час. Або новий URL до бази даних для статистики.
      2. Просити виконати MBean будь-яку дію (я про sayHello зараз) - наприклад перезапустити програму. Або відправити пошту. Та хіба мало всяких корисних речей можна попросити.

Само собою просто так наші MBean працювати не буде. Йому потрібен сервер, на якому він буде працювати. Давайте перейдемо до нього.

У цьому розділі ми створимо сервер і зробимо його локальним, тобто він буде доступний тільки на нашій машині і з нашої машини. По суті безпосередньо.

Бачимо на екрані повідомлення:

SimpleAgent is running ...

Press to continue ...

Наш сервер з нашим біном запущений і тепер ми можемо до нього звернутися. Чи не закривайте це віконце - воно нам ще стане в нагоді. Запускаємо вже відому утиліту jconsole

Java management extensions

Бачимо наш додаток. Виділяємо і тиснемо «Connect».

Я виділив найцікавіше - ятати, де можна подивитися MBean, до яких можна звернутися. Я вже змінив наше значення «Hello there» на «Hi, world». Зробити це не просто, а дуже просто - виправляйте прямо в рядку

Java management extensions

А тепер в дереві зліва виділимо пункт 'Operations "-" sayHello ".

Java management extensions

Якщо ми натиснемо кнопку з написом "sayHello", то побачимо повідомлення

І подивимося на вікно, де працює наш сервер. Ви напевно побачите там напис «Hi, world» (Якщо у вас така ж напис як і у мене).

Віддалений виклик черезRMI

Для віддаленого виклику нам буде потрібно як мінімум Java 5.0. В принципі можна і 1.4, але тоді треба буде встановлювати додаткові пакети. Так що для швидкості будемо працювати на Java 5.0 або вище.

Ідея віддаленого доступу заснована на адаптерах (коннекторах), через які додатки на Manager Level (див. Вище) можуть взаємодіяти з агентом (MBeanServer). Іншими словами сам MBeanServer може підключати різні коннектори, через які він стає доступний. Ми розглянемо два варинат підключення - через RMI і через HTTP.

Код нашого сервера дещо зміниться.

Якщо нічого не наплутали, то знову наш егант запуститься як зазвичай. І тепер ви можете його використовувати набравши URL в браузері.

На сторінці можна буде побачити наш чудовий MBean

Java management extensions

Натисніть на верхню із зазначених посилань і ви потрапите на сторінку, яка дозволить вам працювати з вашим біном.

Java management extensions

Думаю, що розібратися буде нескладно.

У цій статті я не розглядав можливості напіснаія клієнтських додатків. Хоча звичайно ж і можна і потрібно буде писати, якщо ви захочете. Але про це ми поговоримо іншим разом.