JBossのMBeanインスタンス

8988 ワード

JDKが持参したJMX実装で書かれたMBean、JMXの実装はSUN一家だけでなく、JBossにも独自のJMX実装がある.JBossを使用してWEBサーバを作成する場合は、JBossの実装に基づいてMBeanを書くのが良い選択です.うちの会社はJBossを使っているので、すべてのMBeanはJBossに基づいて書かれています.JBossベースのMBeanとSUNベースのMBeanは何か違いがありますか?いくつかの違いがありますが、ほとんどは同じです.
一、HelloWorldの例
1、準備作業JBOSSはJMX仕様を実現し、この例はJBossに基づいて実現される.まずJBossをダウンロードしてください.私はJBoss-3.2.6です.この例ではJBossの2つのJARパッケージのサポートが必要です.jboss-system-3.2.6.jar、jboss-jmx-3.2.6.JAr、私と同じようにEclipseで開発(推奨)する場合は、この2つのパッケージをプロジェクトのライブラリリファレンスに追加します(ライブラリリファレンスに追加する方法は前の2章を参照).
2、プログラムコードはmessageという属性が常に構成を変更する必要があると仮定し、MBeanと書きます.
1)、HelloWorldServiceMBeanインタフェースMBeanを書く前に、まずMBeanインタフェースを書く必要があります.インタフェースの方法はすべて属性のset/get方法です.このインタフェースは、インタフェースServiceMBeanを継承する必要があります.JAvaコード

    
    
    
    
  1.  import org.jboss.system.ServiceMBean;     
  2.  public interface HelloWorldServiceMBean extends ServiceMBean {     
  3.      String getMessage();     
  4.      void setMessage(String message);     
  5.  }    

2)、HelloWorldServiceインプリメンテーションクラスは、HelloWorldServiceMBeanインタフェースのインプリメンテーションクラスHelloWorldServiceと書きます.このインプリメンテーションクラスは、ServiceMBeanSupportクラスを継承する必要があります.このクラスは簡単で、属性と対応するset/getメソッドで、EJBでは実体クラス、HibernateではPOJOと呼ばれています.JAvaコード
  import org.jboss.system.ServiceMBeanSupport;     
  public class HelloWorldService extends ServiceMBeanSupport  
implements HelloWorldServiceMBean {     
      private String message;     
      public String getMessage() {     
          System.out.println("getMessage()=" + message);     
          return message;     
      }     
      
     
         public void setMessage(String message) {     
         System.out.println("setMessage(" + message + ")");     
         this.message = message;     
    }     
 }     
3)、プロファイルjboss-service.xml
  xml version="1.0" encoding="UTF-8"?>    
     
     
name="www.chengang.com.cn:service=HelloWorld">    
         Hello Worldattribute>    
     mbean>    
 server>    
説明:◆code項MBeanを指す実装クラスHelloWorldService◆name項は名前で、フォーマットは一般的に:[説明文字]:service=[クラス名]◆attributeは属性に初期値を設定し、JBOSSがHelloWorldServiceクラスをロードするとmessage属性に初期値Hello Worldがある.注意Messageの最初のアルファベットは大文字でなければなりません.
二、インスタンスをJBOSSに配置する
jboss-3.2.6serverdefaultdeployディレクトリの下にhelloを作成します.sarディレクトリを作成し、hello.sar |----example |            |----mbean |                    |----HelloWorldService.class(注意:はい*.class、いいえ*.java)|----HelloWorldServiceMBean.class |----META-INF |----jboss-service.xml
その他の説明:◆hello.sarディレクトリはzip形式で同名のhelloに圧縮されます.sarファイル、jboss-3.2.6serverdefaultdeployディレクトリの下に配置します.◆JBOSSはホットな導入をサポートしています.つまり、このディレクトリを配置するときにJBOSSを再起動する必要はありません.
三、MBeanの効果
「サービス=HelloWorld」をクリックして詳細ページを開きます
「Hello World」を「Hello World,ChenGang」に変更し、「Apply Changes」をクリックして変更を適用
四、その他のクラスはどのようにMessag属性を使用するか
自動的に提供されるWEBページでMessageプロパティを設定できるようになりました.次の問題は、「他のクラスでMessageのプロパティ値をどのように得るべきか」です.MBeanはJBossでは1つのMBeanのみを保持するインスタンス(単例モード?)であり、つまり、問題は私たちがこの唯一の例をどのように取得するかに変わります.インスタンスは次のとおりです.
1、Message属性を使用するクラスを作成する
  import org.jboss.mx.util.MBeanProxyExt;     
 import org.jboss.mx.util.ObjectNameFactory;     
 public class Client {     
     public void go() {     
         HelloWorldServiceMBean mbean = (HelloWorldServiceMBean) MBeanProxyExt.create(HelloWorldServiceMBean.class, ObjectNameFactory.create(www.chengang.com.cn:service=HelloWorld));     
         String msg = mbean.getMessage();     
         System.out.println("Client.go()=" + msg);     
     }     
 }     
注意:goメソッドには3つの文があります.最初の文はjboss-serviceに基づいて長いです.xmlファイルに設定されているMBeanの名前で、このMBeanのJBOSSでのインスタンスを取得します.
2、Mbeanに相応の呼び出しClientを追加する.goの方法はHelloWorldServiceMBeanインタフェースに次の文を追加します.

    
    
    
    
  1. void callGo();    
  2. ublic void callGo() {     
  3.       new Client().go();     
  4.  }    

3、更新布署将三種類のclassファイル:Clien.class、HelloWorldServiceMBean.class、HelloWorldService.class,更新到JBOSS的hello.sarexamplembeanディレクトリの下にあります.そしてJBOSSを再起動します.
4、効果を見るJBOSSが提供するMBean設定ページを開くと、callGoが1つ増えた.callGoアイテムのinvokeボタンをクリックし、DOS出力を取得
五、その他の説明◆この例では、Messageプロパティを1つしか示していません.もちろん、HelloWorldServiceに追加のプロパティを追加することができます.HelloWorldServiceMBeanインタフェースにも対応するset/getメソッドを追加することを忘れないでください.◆この例のメッセージ属性はStringタイプであるが、JMXは他のタイプ、さらにはXML情報もサポートする.jboss-serviceの場合.xmlのXML情報は、属性タイプがorgであることが要求する.w3c.dom.Element,JMXはそれをXMLのDOMオブジェクトにカプセル化する.◆振り返ると、JMXもプロファイル情報を1つのファイル(jboss-service.xmlファイル)に書いたのか、プロファイルを*に書くことに対して.propertiesファイルの仕方は、新鮮な場所もないようです.しかし、この章の例では、コードを書いてプロファイルの情報を読む必要がなく、JMXがサポートするプロパティのタイプが多様である(org.w 3 c.dom.Elementなど)JMXのメリットを見ることができます.さらに重要なのは、JMXが属性を相互にアクセスし、相互に呼び出す機能を提供していることであり、このHelloWorldインスタンスは氷山の一角を反映しているだけである.