Java EE 管理 API によるモニタと管理

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic Server での Java EE 管理 API の使用

Java EE 管理 API 群を使用すると、ソフトウェア開発者は、JDBC 接続プールやデプロイされているアプリケーションなどのリソースをそれ 1 つで検出して参照できる Java プログラムを Java EE Web アプリケーション サーバ上に作成できます。この API 群は Java EE の管理仕様の一部です。Java EE の管理仕様では、すべての Java EE Web アプリケーション サーバは標準データ モデルでリソースを記述する必要があります。

以下の節では、WebLogic Server で Java EE 管理 API を使用する方法について説明します。

 


Java EE Management Model と API について

Java EE Management データ モデルでは、Web アプリケーション サーバ リソース タイプの各インスタンスは Java EE 管理対象オブジェクト (JMO) によって表現されます。Java EE 管理仕様では、どのタイプのリソースを JMO で表すべきかを厳密に定めています。JMO 自体には、データ モデルにオブジェクトの場所を記述する際に使用される、一連の限られた属性のみが含まれます。

Java EE 管理仕様は、http://jcp.org/aboutJava/communityprocess/final/jsr077/index.html でダウンロードしてください。

JMO の階層

データ モデルでは、JMO はツリー構造で階層状に構成されます。ルートの JMO J2EEDomain は、論理的に関連付けられた Web アプリケーション サーバ インスタンスの集合を表します。J2EEDomain には、J2EEServer JMO のすべてのインスタンスのオブジェクト名が含まれ、各 J2EEServer JMO は、その集合内にある 1 つのサーバ インスタンスを表しています。

Java アプリケーションでは JMO の階層を参照して、オブジェクト名のクエリやそのクエリ結果で指定される JMO のルックアップを再帰的に行えます。

JMO のオブジェクト名

各 JMO インスタンスは、javax.management.ObjectName のユニークなオブジェクト名によって識別されます。オブジェクト名は、以下のパターンを使用します。

domain:name=j2eeType=value,name=value,parent-j2eeType[,property=value]*

たとえば mydomain:J2EEtype=J2EEDomain,name=mydomain のようになります。

Java EE 管理仕様では、各タイプの JMO のオブジェクト名には名前と値のペアが必須であることが厳密に定められています。

それぞれの子 JMO のオブジェクト名には、その親 JMO のオブジェクト名の名前と値のペアが含まれます。あるサーバ インスタンスの JMO の名前が、
mydomain:j2eeType=J2EEServer,name=myserver

である場合、そのサーバ インスタンスにデプロイされたアプリケーションの一部であるサーブレットの JMO の名前は次のようになります。

mydomain:J2EEApplication=myapplication,J2EEServer=myserver,WebModule=myapp_mywebmodule,j2eeType=Servlet,name=myservlet_name

名前と値のペアは、任意の順序で構いません。

JMO の任意指定の機能

Java EE 管理仕様のバージョン 1.0 では、Web アプリケーション サーバが JMO を実装し、JMO への API アクセスを提供していることが必須事項です。

必要に応じて、パフォーマンス統計や管理操作を行ったり、指定されたイベントが発生したときに通知を送信したりするように JMO を実装できます。

JMO へのアクセス

Java アプリケーションから JMO へのアクセスは、MEJB (Management Enterprise Java Bean) のリモート インタフェースである javax.management.j2ee.Management を介して行われます。

Java EE 管理仕様では、MEJB のホーム インタフェースがサーバの JNDI ツリーに ejb.mgmt.MEJB として登録されている必要があります。

javax.management.j2ee パッケージの API リファレンス http://java.sun.com/j2ee/1.4/docs/api/javax/management/j2ee/package-summary.html を参照してください。

 


WebLogic Server での Java EE Management Model

WebLogic Server 10.0 には、Java EE 管理仕様バージョン 1.0 の必要な機能のみが実装されています。そのため、以下の制限があります。

MEJB と JMO は管理サーバでのみ使用できます。これは Java EE Management Model と一貫性があります。Java EE Management Model では、論理的に関連のあるいくつかの集合内にほとんどの Java EE Web サーバが存在し、その集合内にはサーバ インスタンスへのアクセスやそれらの管理を行うための中枢があることを前提としています。Java アプリケーションでは、WebLogic Server ドメインの任意のサーバ インスタンスの任意のリソースを表す JMO を管理サーバから参照できます。

WebLogic Server では JMO を MBean のラッパーとして実装しているため、JMO に対応する WebLogic Server MBean に変更が加えられると、その変更は Java EE 管理 API によってすぐに反映されます。

WebLogic Server のすべての JMO のオブジェクト名は、domain: の部分が WebLogic Server ドメインの名前と一致しています。

 


WebLogic Server での MEJB へのアクセス

モニタするデータを MEJB を通じて取得するには以下を実行します。

  1. ejb.mgmt.MEJB の下にある管理サーバの JNDI ツリーを介して javax.management.j2ee.ManagementHome インタフェースをルックアップします。
  2. ManagementHome を使用して MEJB のリモート インタフェースである javax.management.j2ee.Management のインスタンスを生成します。

例 : JMO の名前のクエリ

サンプル クラスでは、WebLogic Server ドメインの MEJB にアクセスし、javax.management.j2ee.Management.queryNames メソッドを呼び出します。このメソッドはドメイン内のすべての JMO のオブジェクト名を返します。

コード リスト 2-1 JMO の名前のクエリ
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Set;
import java.util.Properties;
import javax.management.j2ee.Management;
import javax.management.j2ee.ManagementHome;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.ObjectName;
import javax.management.QueryExp;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ejb.CreateException;
public class GetJMONames { 
   static String url = "t3://localhost:7001";
   static String user = "weblogic";
   static String password = "weblogic";
   public static void main(String[] args) {
      try {
         getAllJMONames();
      }catch(Exception e){
      System.out.println(e);
      }
   }
   public static Management getMEJBRemote()
       throws IOException, MalformedURLException,
       NamingException,CreateException
   {
      Context context = getInitialContext();
      ManagementHome home = (ManagementHome)
          context.lookup("ejb.mgmt.MEJB");
      Management bean = home.create();
      return bean;
   }
   public static Context getInitialContext()
          throws NamingException
   {
      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY,
          "weblogic.jndi.WLInitialContextFactory");
      p.put(Context.PROVIDER_URL, url);
      if (user != null) {
         p.put(Context.SECURITY_PRINCIPAL, user);
         if (password == null)
            password = "";
            p.put(Context.SECURITY_CREDENTIALS, password);
         }
      return new InitialContext(p);
   }
   public static void getAllJMONames()
   {
      try {
         Management rhome = getMEJBRemote();
         String string = "";
         ObjectName name = new ObjectName(string);
         QueryExp query = null;
         Set allNames = rhome.queryNames(name, query);
         Iterator nameIterator = allNames.iterator();
         while(nameIterator.hasNext()) {
            ObjectName on = (ObjectName)nameIterator.next();
            System.out.println(on.getCanonicalName() + "\n");
         }
      } catch (Exception ex) {
            ex.printStackTrace();
      }
   }
}

ページの先頭       前  次