1、JMXのHello World


一、JMX紹介
JMXって何?「JMX(Java Management Extensions)はアプリケーションに管理機能を植え込むフレームワークです.JMXは標準的なエージェントとサービスですが、実際にはユーザーはどんなJavaアプリケーションでもこれらのエージェントとサービスを使って管理することができます」という言葉は、私は今見ても何が起こっているのか分かりません.
私たちはやはりJMXが私たちにどんなメリットを提供してくれるかから理解しましょう.アプリケーションの例を挙げると、サービスのIPアドレス、ポート番号など、システムにはよくいくつかの構成情報がありますが、これらのコードをどのように書くのでしょうか.
  • プログラムの初兄は一般的にプログラムの中で死んで、変更する時までプログラムを変更して、それからコンパイルして発表します;
  • プログラムの熟練者は一般的にこれらの情報を1つのプロファイルに書きます(JAVAは一般的に*.propertiesファイルです)、変更する時までプロファイルを変更するだけで、しかしやはりシステムを再起動して、プロファイルの中の新しい値を読み取るためです;
  • プログラムの上手な人はセグメントコードを書いて、配置値をキャッシュして、システムは値を読む時、まず配置ファイルが更に動いているかどうかを見ます.変更があれば再読み込み、そうでなければキャッシュから値
  • を読み出す.
  • プログラムの達人は物を取るのが私のために使うことを知っていて、JMXを使います!コンフィギュレーション属性を1つのクラスに集中し、MBeanという東東を書いて、コンフィギュレーションすれば簡単にできます.JMXは、これらの構成情報を変更するためにWEBページを自動的に提供します.
  • 二、準備
    JMXは規範であり、SUNはこの規範に基づいてJDK(1.3、1.4、5.0)にJMXインタフェースを提供した.このインタフェースによる実装には,WeblogicのJMX実装,MX 4 J,JBossのJMX実装など多くの種類がある.SUN自身も1部実現しましたが、JDK 1.4の前に、このJMX実現(いくつかのJARパッケージ)はオプションで、そのサイトにダウンロードしなければなりません.JDK 5.0は内蔵されており、JDK 5.0をインストールすればJMXベースのコードを開発できます.
    しかし、JDK 5.0にはすべてのSUNのJMXに関するコードが含まれているわけではありません.いくつかのツールクラスはJDK 5.0から除外されています.使用するJDKバージョンの状況に応じて、開発環境の準備についてお話しします.
    1、JDK1.3、1.4
    SUNのウェブサイトに行ってSUNのJMXをダウンロードして実現して、共に2つのZIPファイル、ウェブサイトをダウンロードします:
    http://java.sun.com/products/JavaManagement/download.html .
    (1)jmx-1_2_1-ri.zip
    解凍後のlibディレクトリには、jmxri.jar、jmxtools.jarが含まれます.
    (2)jmx_remote-1_0_1_03-ri.zip
    解凍後のlibディレクトリには、jmxremote.jar、jmxremote_が含まれます.optional.jar、rmissl.jar
    DOSでコマンドラインで開発された場合,この5つのJARパケットをclasspathシステム変数に組み込む.Eclipseで開発する場合は、JARパッケージをプロジェクト属性のLibratries(ライブラリ)リファレンスに追加します.
    2、JDK5.0
    JDK 5.0のjrelibrt.jarには、jmxri.jar、jmxremote.jar、rmissl.jarの3つのパッケージのコードが含まれています.jmxtools.jar、jmxremote_を使うとoptional.jarのクラスは、classpathまたはEclipseのプロジェクトライブラリリファレンスに2つのクラスを追加する必要があります.
    3、私が使っている開発環境:JDK 5.0+Eclipse 3.2.
    注意:jmxtools.jarのHtmlAdaptorServerクラスが使用されるため、このパッケージをプロジェクトライブラリリファレンスに追加します.jmxremote_optional.jarはしばらくかかりません.
    三、HelloWorldの例
    1、Helloは管理する必要があるクラス(普通のクラス)
    /**
     * @author ChenGang 2005-12-3
     */
    public class Hello implements HelloMBean {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void printHello() {
            System.out.println("Hello World, " + name);
        }
        public void printHello(String whoName) {
            System.out.println("Hello , " + whoName);
        }
    }
    2、Helloを管理するには、次のように対応するMBeanを作成する必要があります.
    /**
     * @author ChenGang 2005-12-3
     */
    public interface HelloMBean {
        public String getName();
        public void setName(String name);
        public void printHello();
        public void printHello(String whoName);
    } 
    説明:MBeanに含まれるメソッドはすべて管理できます.MBeanの命名には規範があり、元のクラス名にMBeanの文字を付けたものです.
     
    3、Agentクラスを作成する
    import javax.management.MBeanServer;
    import javax.management.MBeanServerFactory;
    import javax.management.ObjectName;
    import com.sun.jdmk.comm.HtmlAdaptorServer;
    public class HelloAgent {
        public static void main(String[] args) throws Exception {
            MBeanServer server = MBeanServerFactory.createMBeanServer();
            ObjectName helloName = new ObjectName("chengang:name=HelloWorld");
            server.registerMBean(new Hello(), helloName);
            ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
            HtmlAdaptorServer adapter = new HtmlAdaptorServer();
            server.registerMBean(adapter, adapterName);
            adapter.start();
            System.out.println("start.....");
    
    
    
    
        }
    } 
    説明:
  • MBeanServerを作成し、MBeanのコンテナ
  • を作成しました.
  • HelloというクラスをMBeanServerに注入します.注入にはObjectNameクラス
  • を作成する必要があります.
  • は、MBeanの管理インタフェースを決定するAdaptorServerを作成します.ここでは、最も一般的なHtml型インタフェースを使用します.AdaptorServerも実はMBeanです.
  • chengang:name=HelloWorldの名前には一定のルールがあり、フォーマットは「ドメイン名:name=MBean名」で、ドメイン名とMBean名は任意に取ることができます.
  • 4、HelloAgentを実行し、Webページを開きます.
    http://localhost:8082/、効果図は以下の通りです.
    「name=HelloWorld」リンクをクリックすると、次のページが表示されます.
    次の赤い線の手順に従って操作した後、コンソール(Eclipseでconsoleビュー)で次の出力を得ます.
    五、まとめ
    実際のシステムではnameを決定数ライブラリリンクプールの変数に変えることができ、システムの実行パラメータの監視と構成(管理)を実現することができます.また、printHelloなどのいくつかの方法をリモートで呼び出すこともできます.
    予告:次編ではJMXについていくつか紹介し、本編のHelloWorldの例を借りていくつかの概念を注入する.