JMXについての超カンタンな纏め

Model MBeanまで一通り終わったので,ここで一つ簡単にまとめておこうと思う。

JMXが作られた背景>

人間が集まって組織ができると,そこに「管理職」といったような,各作業担当者を管理する役割を担う仕事が必要となる.ソフトウェアは,各々が自分自身を管理しているわけだけど,実際のシステム環境では,複数の異なるソフトウェアが混在するような状況というのが通常でてくる.そういった場合では,ソフトウェアを管理するソフトウェアというものの必要性が,人間社会と同じように発生してくるわけ.

人間の良いところは柔軟性がある点.人がいてそれぞれ個性があったりするわけだけど,その柔軟性により,うまく調整してコミュニケーションが取れる.(たまにそれが失敗して問題になったりもするわけだが.)一方,ソフトウェアはそういった柔軟性が無いので,それができない.

とはいうものの,できませんねー,というわけにもいかないので,異種のソフトウェアを透過的に管理することができるような仕組みが考案される.J2EEプラットフォームでは,それがJMXというわけ.(J2EEサーバでは複数のソフトウェアがサービスとして一つのカーネル上で動作する,こういう場合に特に必要)

JMXアーキテクチャ概要>
JMXはどのようにして,ソフトウェアがソフトウェアを透過的に管理できるようにしているのか.JMXでは,3つのレベルを用いてそれを可能にしている.

Destributed Service Level ⇔ Agent Level ⇔ Instrumentation Level

一つ目が,管理者としてのソフトウェアが位置するレベル.
二つ目が,管理者と対象者を仲介するソフトウェアが位置するレベル.
三つ目が,対象者としてのソフトウェアが位置するレベル.

この二つ目の仲介者が「JMXサーバ」と呼ばれる特別なソフトウェア.そして管理者⇔仲介者の間のインタフェース,仲介者⇔対象者の間のインタフェースがJMXAPIというわけです.

対象者はどんなソフトウェアでも良く,それにラッパーをかませることで,JMXAPIに合うようにする.そうすると,管理者はJMX APIに合うようにつくりこむだけで,どんな対象者であっても管理できるようになる.

管理者としてのソフトウェアは,JMXサーバのプロバイダによって例えばHTTP経由(ブラウザ)で操作ができるようなもの等が提供されていたりもする.

対象者にかませるラッパーは,Standard MBean,Dynamic MBean,Model MBeanといった3種類が仕様として用意されているので,どれか一つを使えばよい.


<各種MBeanは何が違うのか>
ラップする際の手間,およびその後の使い勝手が違う.Standard MBean → Dynamic MBean → Model MBeanの順でラップする際に手間がかかるようになるが,使い勝手は向上する.

具体的には以下のような感じ.

Standard MBeanの場合

  • 対象者は"${対象者名}MBean"という名前のインタフェースを作成し,実装する必要がある.
  • ${対象者名}MBeanインタフェースには,管理されたい属性のアクセッサや操作を定義.
  • 動的ローディングは出来ない.

Dynamic MBeanの場合

  • 対象者はDynamicMBeanインタフェースを実装する必要がある.
  • 属性,操作,コンストラクタ等についてのメタ情報を返すメソッドを実装する必要がある.
  • 動的ローディングが可能(要するにホットデプロイが可能)

Model MBeanの場合

  • 対象者には何も手をつける必要は無い.(←ここが凄い!)
  • 対象者の代わりにメタ情報を返したり,いろいろしてくれるオブジェクトを構築する必要がある.
  • 動的ローディングが可能

簡単に書くとこんな感じ.ホットデプロイ可能にするためには,Dynamic MBeanかModel MBeanを選択する必要があり,対象者に手を加えないで管理可能にするためには,Model MBeanにする必要がある.要するに最も汎用的で透過的なのがModel MBean.その代わり,面倒くさいけどねっ!

以上,JMXを簡単に説明するとこんな感じ.単に使うだけなら,ここまでで十分かな? 私的にはこの後は,JMXサーバのアーキテクチャを勉強していくつもり.

※管理者,仲介者,対象者というのはここでの説明上,私が勝手に使用した造語.MBean=ラッパーという表現も説明上の都合で使用しています.