- PR -

カスタムMXBean

1
投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-01-22 14:52
Java SE 6よりMXBeanのカスタム開発が可能になりましたが、どなたかこれが意味するところを、もう少し詳しく解説していただけないでしょうか?

つまり、Java SE 5.0からMBeanがサポートされていましたが、「(普通の)MBeanではできなくて、MXBeanならできること」がいまいちよく分からないのです。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-01-22 16:42
調べて書いているのでないので、正しくないかも知れませんが、
MXBeanはMBeanをほかのプロセスやマシンから呼び出すためのインタフェースだと思っています。
端的にはjconsole操作で呼び出せるかどうかということでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-01-22 21:45
・アノテーションによってPOJOをMXBeanとすることができる
・複合型を簡単に扱うことが出来る
というところでしょうか。

特に複合型を扱うときにはMBeanでは苦労しますが、
MXBeanでは特に意識する必要がないみたいですね。
JDK5.0ではjavax.management.openmbean.CompositeTypeを使う必要があります。

ちなみに複合型とは
コード:
class Hoge{
}

class PiyoMBean{
    Hoge getHoge();
}


のような型です。

他にも色々特徴・新機能があると思うのですが、
私の理解はこの辺までなので、識者の方よろしくお願いします。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-01-23 10:31
もう少し自分の疑問を整理してみました。

MXBean=プラットフォームMBeanは、JVMを監視・管理するためのMBeanです。つまりMXBeanは、MBeanのサブクラスなわけですね(概念的に)。
で、JVM以外(自分のアプリケーション等)を監視・管理するためには、「普通のMBean」を作ればよいわけです。

ここである用途のために「カスタムMXBean」を作るとき、
- その用途は「JVMを監視・管理する」必要があるのか? (そんなわきゃねー!)
- それを「普通のMBean」として作成できない場合はあるのか?

引用:

だっちょさんの書き込み (2007-01-22 16:42) より:
端的にはjconsole操作で呼び出せるかどうかということでしょうか。



普通のMBeanもプラットフォームMBeanサーバに登録すれば、jconsoleで参照・操作できるようです。

引用:

かつのりさんの書き込み (2007-01-22 21:45) より:
・アノテーションによってPOJOをMXBeanとすることができる
・複合型を簡単に扱うことが出来る
というところでしょうか。



なるほど・・・作り方において違いがあるというわけですね。

機能的・意味的な違いの有無も気になります。
私はこれからJMXをベースとしたサーバソフトウェアを作るのですが、インタフェースはMXBeanにするのがいいのか、ただのMBeanでいいのか・・・。

どうぞよろしくお願いします。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-01-23 11:09
単純なMBeanと概念を間違えてたので、この件についてこれ以上コメントはありません。
ただ、Documentを見るとMBeanをパラメタにしたインタフェースにしたい場合はMXBeanの方が楽だろうなという気がします。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-01-23 11:19
これ読んでちょっと理解できました。
http://java.sun.com/developer/technicalArticles/J2SE/mxbeans/
http://java.sun.com/javase/6/docs/api/javax/management/MXBean.html#MXBean-spec

どうやらかつのりさんご指摘の、
引用:

かつのりさんの書き込み (2007-01-22 21:45) より:
・複合型を簡単に扱うことが出来る


が本質に近いようです。

以下、私の理解の概要です。ツッコミがあればお願いします。

MBean(の特にGetterメソッド)がアプリケーション固有のクラスのオブジェクトを返す場合、JMXマネージャ(jconsoleのような)はそのクラスを知らないかもしれない。つまり、そのマネージャのCLASSPATHにそのクラス定義がなければ、ClassNotFoundExceptionが発生し、オブジェクト内部の様子を知ることはできない。

MXBeanではそのようなクラスは全てCompositeDataSupport(implements CompositeData)というクラスに変換され、マネージャはそこから各要素を個別に取り出すことができる。

なので、MXBeanはjconsoleのような対象を限定しない汎用的なマネージャによる監視・管理の用途に向く。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-01-23 11:32
おまけですが、
引用:

カーニーさんの書き込み (2007-01-23 10:31) より:
MXBean=プラットフォームMBeanは、JVMを監視・管理するためのMBeanです。


という定義は http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/management/overview.html#mxbeans からなんですが、Java SE 6からは当てはまらなくなった、と考えるのがよさそうですね。
1

スキルアップ/キャリアアップ(JOB@IT)