ナビゲーションをスキップ

WebLogic JMX Service プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

WebLogic Server MBean へのアクセス

すべての JMX タスク (MBean 属性の表示と変更、通知の使用、および変更のモニタ) では、同じプロセスで MBean にアクセスします。

以下の節では、WebLogic Server MBean にアクセスする方法について説明します。

 


MBean へのアクセス : 主な手順

WebLogic Server で MBean にアクセスするための主な手順は次のとおりです。

  1. weblogic.management.MBeanHome インタフェースを使用して MBean サーバにアクセスします。「MBeanHome インタフェースへのアクセス」を参照してください。
  2. 以下のいずれかのインタフェースを使用して、MBean の操作の取得、ルックアップ、および呼び出しを行います。
  3. ほとんどの場合では、これらのインタフェースを使用して MBean のリストを取得してから、そのリストをフィルタ処理して特定の MBean で操作の取得と呼び出しを行います。ただし、MBean の WebLogicObjectName が分かっている場合は、名前を使って直接 MBean を取得できます。

 


使用するインタフェースの決定

MBean にアクセスするときには、どのインタフェースを使用するかに関して 2 つの選択が必要になります。

 


MBeanHome インタフェースへのアクセス

ローカル MBeanHome インタフェースまたは管理 MBeanHome インタフェースを取得する最も単純な方法は、WebLogic Server の Helper クラスを使用することです。標準的な J2EE の手法の方がよい場合は、Java Naming and Directory Interface (JNDI) を使用して MBeanHome を取得できます。

ヘルパー API を使用した MBeanHome インタフェースの取得

WebLogic Server には、MBeanHome インタフェースを簡単に取得するための weblogic.management.Helper API が用意されています。

Helper API を使用するには、以下の情報を収集します。

上の情報を収集したら、以下のいずれかの API を使用します。

Helper API の詳細については、「WebLogic Server の Javadoc」 を参照。

例 : ローカル MBeanHome インタフェースの取得

次の例 (コード リスト  2-1)は、Helper API を使用して MS1 というサーバのローカル MBeanHome インタフェースを取得するクラスです。

コード リスト 2-1ローカル MBeanHome インタフェースの取得

import weblogic.management.Helper;
import weblogic.management.MBeanHome;
public class UseHelper {
    public static void main(String[] args) {
        String url = "t3://localhost:7001";
        String username = "weblogic";
        String password = "weblogic";
        String msName = "MS1";
        MBeanHome localHome = null;
        try {
            localHome = (MBeanHome)Helper.getMBeanHome(username, password, url,
                       msName);
            System.out.println("Local MBeanHome for" + localHome +
                       " found using the Helper class");
        } catch (IllegalArgumentException iae) {
            System.out.println("Illegal Argument Exception: " + iae);
        }
    }
}

JNDI を使用した MBeanHome インタフェースの取得

Helper API を使用すると MBeanHome インタフェースを簡単に取得できますが、JNDI を使用して MBeanHome を取得する標準的なアプローチの方がより分かりやすい場合もあります。サーバのローカル MBeanHome インタフェースには、管理対象サーバの JNDI ツリーからアクセスできます。管理サーバの JNDI ツリーからは、ドメイン内のすべてのサーバ インスタンスのローカル MBeanHome インタフェースに加えて管理 MBeanHome にもアクセスできます。

JNDI を使用して MBeanHome インタフェースを取得するには、次の手順に従います。

  1. weblogic.jndi.Environment オブジェクトを作成し、Environment のメソッドを使用してオブジェクトをコンフィグレーションします。
    1. setSecurityPrincipal メソッドおよび setSecurityCredentials メソッドを使用して、ユーザの資格を指定します。
    2. WebLogic Server は、MBeanHome インタフェースを通じてリクエストを実行するパーミッションがユーザの資格に付与されているかどうかを検証します。詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。

    3. アプリケーションと MBeanHome インタフェースが別々の JVM にある場合は、Environment.setProviderUrl メソッドを使用して MBeanHome インタフェースをホストするサーバ インスタンスを指定します。その URL では、サーバのリスン アドレスとサーバが管理要求をリスンするポートを指定する必要があります。
    4. 管理 MBeanHome を取得する場合、setProviderUrl では管理サーバを指定する必要があります。

    5. getInitialContext メソッドを使用して、javax.naming.Context オブジェクトを初期化します。

    たとえば次のコードでは、初期コンテキストを WLServerHost というホスト コンピュータで動作するサーバ インスタンスに設定し、デフォルトのドメイン全体の管理ポートを使用して管理要求を受信します。

    Environment env = new Environment();
    env.setProviderUrl("t3://WLServerHost:9002");
    env.setSecurityPrincipal("weblogic");
    env.setSecurityCredentials("weblogic");
    Context ctx = env.getInitialContext();

    weblogic.jndi.Environment の詳細については、「WebLogic Server の Javadoc」を参照してください。

  2. javax.naming.Context のメソッドを使用して、現在のコンテキストの MBeanHome インタフェースをルックアップして取得します。
  3. ローカル MBeanHome インタフェースを取得するのか、それとも管理 MBeanHome を取得するのかに応じて、次の API のいずれかを使用します。

以降の節では、MBeanHome インタフェースを取得する例を示します。

例 : 外部クライアントからの管理 MBeanHome の取得

次の例 (コード リスト  2-2) は、異なる JVM で実行されているアプリケーションから管理 MBeanHome インタフェースをルックアップする方法を示したものです。この例で、weblogic は MBean 属性を表示および変更するパーミッションを持つユーザです。MBean の表示や変更のパーミッションの詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。

コード リスト 2-2外部クライアントからの管理 MBeanHome の取得

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.AuthenticationException;
import javax.naming.CommunicationException;
import javax.naming.NamingException;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
public class RetrieveMBeanHome{
    public static void main(String[] args) {
        MBeanHome home = null;
        //ドメイン変数
        String url = "t3://localhost:7001";
        String username = "weblogic";
        String password = "weblogic";
        //初期コンテキストを設定
        try {
            Environment env = new Environment();
            env.setProviderUrl(url);
            env.setSecurityPrincipal(username);
            env.setSecurityCredentials(password);
            Context ctx = env.getInitialContext();
            //管理 MBeanHome インタフェースを取得
            home = (MBeanHome) ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);
            System.out.println("Got the Admin MBeanHome: " + home + " from the
                               Admin server");
        } catch (Exception e) {
            System.out.println("Exception caught: " + e);
        }
    }
}

例 : 内部クライアントからのローカル MBeanHome の取得

管理サーバ (または管理する WebLogic Server インスタンス) と同じ JVM にクライアント アプリケーションが存在する場合、MBeanHome の JNDI ルックアップはより簡単です。コード リスト 2-3 は、管理サーバと同じ JVM で動作するサーブレットから myserver というサーバ インスタンスのローカル MBeanHome をルックアップする方法を示したものです。

コード リスト 2-3内部クライアントからのローカル MBeanHome の取得

import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import javax.naming.Context;
public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException{
        doPost(req,res);
    }
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    throws ServletException{
        try {
            Environment env = new Environment();
            env.setProviderUrl("t3://localhost:7001");
        env.setSecurityPrincipal("weblogic");
            env.setSecurityCredentials("weblogic");
            //初期コンテキストを設定
            Context ctx = env.getInitialContext();
             //サーバ固有の MBeanHome インタフェースを取得
            MBeanHome home = (MBeanHome)ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);
            System.out.println("Got the Server-specific MBeanHome: " + home);
        } catch (Exception e) {
            System.out.println("Exception caught: " + e);
        }
    }
}

 


型保障インタフェースを使用した MBean へのアクセス

MBeanHome インタフェースを取得した後、MBean にアクセスする最も簡単な方法は MBean の型保証インタフェースを取得する MBeanHome インタフェースのメソッドを使用することです。

この型保証インタフェースは、WebLogic Server 提供の MBean でのみ使用できます。独自に作成した MBean タイプに基づく MBean では、この型保証インタフェースは使用できません。

全 MBean のリストの取得

MBeanHome.getAllMBeans メソッドを使用すると、取得する MBeanHome インタフェースのスコープに含まれる MBean のオブジェクト名をルックアップできます。たとえば、管理 MBeanHome を取得する場合、getAllMBeans() を使用するとドメイン内のすべての MBean のリストが返されます。ローカル MBeanHome インタフェースを取得する場合は、getAllMBeans() を使用すると、現在のサーバの実行時 MBean のリストと、ドメイン内のすべてのローカル コンフィグレーション MBean のリストが返されます。

コード リスト 2-4 のクラス例は次のように機能します。

  1. JNDI API を使用して、管理 MBeanHome インタフェースを取得します。
  2. MBeanHome.getAllMBeans メソッドを使用して、ドメイン内のすべての MBean を取得します。
  3. MBean のリストを Set オブジェクトに割り当て、Set および Iterator インタフェースのメソッドを使用してリストを検索します。
  4. WebLogicMBean.getObjectName メソッドを使用して、各 MBean の WebLogicObjectName を取得します。
  5. WebLogicObjectName.getName メソッドおよび getType メソッドを使用して、WebLogicObjectNameName 値および Type 値を取得します。

この例で、weblogic は MBean 属性を表示および変更するパーミッションを持つユーザです。MBean の表示や変更のパーミッションの詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。

コード リスト 2-4ドメイン内のすべての MBean の取得

import javax.naming.Context;
import java.util.Set;
import java.util.Iterator;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.WebLogicObjectName;
public class ListAllMBeans{
    public static void main(String args[]) {
        String url = "t3://localhost:7001";
        String username = "weblogic";
        String password = "weblogic";
        try {
            //JNDI を使用して MBeanHome を取得
            Environment env = new Environment();
            env.setProviderUrl(url);
            env.setSecurityPrincipal(username);
            env.setSecurityCredentials(password);
            Context ctx = env.getInitialContext();
            MBeanHome home = (MBeanHome)ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);
            Set allMBeans = home.getAllMBeans();
            System.out.println("Size: " + allMBeans.size());
            for (Iterator itr = allMBeans.iterator(); itr.hasNext(); ) {
                WebLogicMBean mbean = (WebLogicMBean)itr.next();
                WebLogicObjectName objectName = mbean.getObjectName();
                System.out.println(objectName.getName() + " is a(n) " +
                                        mbean.getType());
            }
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

MBeanHome.getAllMBeans メソッドの詳細については、「WebLogic Server の Javadoc」 を参照してください。

タイプおよびリストからの選択による MBean の取得

MBeanHome のスコープに含まれるすべての MBean のリストを取得する代わりに、特定のタイプと一致する MBean のリストを取得できます。Type は、MBean が管理するリソースのタイプと、MBean が管理 MBean、ローカル コンフィグレーション MBean、または実行時 MBean のどれであるかを示します。MBean のタイプの詳細については、「WebLogic Server の管理用ネームスペース」を参照してください。

コード リスト 2-5 のクラス例は次のように機能します。

  1. JNDI を使用して、管理 MBeanHome インタフェースを取得します。
  2. MBeanHome.getMBeansByType メソッドを使用して、ドメイン内のすべての ServerRuntime MBean のリストを取得します。
  3. MBean のリストを Set オブジェクトに割り当て、Set および Iterator インタフェースのメソッドを使用してリストを検索します。
  4. ServerRuntime.getName メソッドを使用して、各 ServerRuntime MBean の名前を取得します。ServerRuntime MBean の名前は、サーバ インスタンスの名前に対応します。
  5. Server1 というサーバの ServerRuntime MBean が見つかると、メッセージが標準出力に出力されます。

この例で、weblogic は MBean 属性を表示および変更するパーミッションを持つユーザです。MBean の表示や変更のパーミッションの詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。

コード リスト 2-5MBean のリストからのタイプによる選択

import java.util.Set;
import java.util.Iterator;
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.management.ObjectName;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.WebLogicObjectName;
import weblogic.management.configuration.ServerMBean;
import weblogic.management.runtime.ServerRuntimeMBean;
import weblogic.jndi.Environment;
public class serverRuntimeInfo {
    public static void main(String[] args) {
        MBeanHome home = null;
        //ドメイン変数
        String url = "t3://localhost:7001";
        String serverName = "Server1";
        String username = "weblogic";
        String password = "weblogic";
        ServerRuntimeMBean serverRuntime = null;
        Set mbeanSet = null;
        Iterator mbeanIterator = null;
        //JNDI を使用して管理 MBeanHome を取得
        //初期コンテキストを設定
        try {
            Environment env = new Environment();
            env.setProviderUrl(url);
            env.setSecurityPrincipal(username);
            env.setSecurityCredentials(password);
            Context ctx = env.getInitialContext();
            //管理 MBeanHome を取得
            home = (MBeanHome) ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);
            System.out.println("Got the Admin MBeanHome: " + home );
        } catch (Exception e) {
            System.out.println("Exception caught: " + e);
        }
        //getMBeansByType メソッドを使用してドメインのすべての
        //ServerRuntime MBean を取得
        try {
            mbeanSet = home.getMBeansByType("ServerRuntime");
            //結果を検索し、サーバ名を比較して
            //必要なものを見つける
            mbeanIterator = mbeanSet.iterator();
            while(mbeanIterator.hasNext()) {
                serverRuntime = (ServerRuntimeMBean)mbeanIterator.next();
                //serverRuntime.getName を使用して Server1 の ServerRuntime
                //MBean を見つける
                if(serverRuntime.getName().equals(serverName)) {
                    System.out.println("Got the serverRuntimembean: " +
                    serverRuntime + " for: " + serverName);
                 }
            }
         } catch (Exception e) {
               System.out.println("Exception caught: " + e);
         }
    }
}

MBeanHome.getMBeansByType メソッドの詳細については、「WebLogic Server の Javadoc」 を参照してください。

ローカル コンフィグレーション MBean と実行時 MBean の階層

WebLogic Server の MBean は、関連付けられたリソースを反映している階層の中に存在します。たとえば、各サーバ インスタンスは複数の実行キューを持つことができ、WebLogic Server は、各 ExecuteQueueMBeanServerMBean の子にすることでこの関係を表します。

ローカル コンフィグレーション MBean および実行時 MBean を取得するには、MBean の階層をたどるのが最も簡単な方法です。MBean の取得に管理 MBeanHome を使用するか、管理 MBean を取得する場合は、タイプによって MBean を取得してから、リストをフィルタ処理することをお勧めします。「タイプおよびリストからの選択による MBean の取得」を参照してください。

コンフィグレーション MBean 階層のルートは、DomainMBean です。このルート下には、次のような MBean があります。

実行時階層のルートは、ServerRuntimeMBean です。このルート下には、次のような MBean があります。

親 MBean は通常、子を取得するためのメソッドを提供します。たとえば、ServerMBean.getExecuteQueues は、サーバについてコンフィグレーションされているすべての ExecuteQueueMBean を返します。

階層の詳細については、「WebLogic Server の管理用ネームスペース」を参照してください。

ローカル コンフィグレーション MBean または実行時 MBean の階層をたどるには、次の手順に従います。

  1. JMX アプリケーションから、ローカル MBeanHome インタフェースを取得します。
  2. ローカル MBeanHome インタフェースから、次のメソッドのいずれかを呼び出して、最上位の MBean のいずれかを取得します。
  3. これらのメソッドを使用して、DomainMBean または ServerRuntimeMBean のすぐ下にある MBean のみを取得します。これらのメソッドは、MBean 階層の最初のレベル下にある MBean は返しません。

  4. 取得した MBean から、メソッドを呼び出してその MBean の子を取得します。
  5. 親 MBean に子 MBean 取得用のメソッドがない場合、getMBeanByType() を使用して、結果に対して繰り返し処理を行って、基準に一致する MBean を見つけます。ローカル コンフィグレーション MBean を取得するには、Config を MBean の type 値に付加してください。「タイプおよびリストからの選択による MBean の取得」を参照してください。

注意 : 値を読む目的でのみローカル コンフィグレーション MBean を取得することをお勧めします。ローカル コンフィグレーション MBean の属性値は変更しないでください。他の管理対象サーバのデータをレプリケートする際、管理対象サーバは管理 MBean に格納された値を使用します。管理 MBean とローカル コンフィグレーション MBean の間で値に相違があると、通信に問題が起こることがあります。

コード リスト 2-6 に、MedRecServer というサーバ インスタンス上のすべてのローカル コンフィグレーション ExecuteQueueMBeans を取得する例を示します。

コード リスト 2-6ローカル コンフィグレーション ExecuteQueueMBean の取得

import javax.naming.Context;
import javax.management.ObjectName;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.WebLogicObjectName;
import weblogic.management.configuration.ConfigurationMBean;
import weblogic.management.configuration.ServerMBean;
import weblogic.management.configuration.ExecuteQueueMBean;
import weblogic.jndi.Environment;
public class serverConfigInfo {
public static void main(String[] args) {
MBeanHome home = null;
ServerMBean servercfg = null;
ExecuteQueueMBean[] xqueues = null;
ExecuteQueueMBean xqueue = null;
        //ドメイン変数
String url = "t3://localhost:7001";
String serverName = "MedRecServer";
String username = "weblogic";
String password = "weblogic";
        try {
Environment env = new Environment();
env.setProviderUrl(url);
env.setSecurityPrincipal(username);
env.setSecurityCredentials(password);
            //初期コンテキストを設定
Context ctx = env.getInitialContext();
            //サーバ固有の MBeanHome インタフェースを取得
home = (MBeanHome)ctx.lookup(MBeanHome.LOCAL_JNDI_NAME);
System.out.println("Got the Server-specific MBeanHome: " + home);
           //ローカル コンフィグレーション ServerMBean を取得
servercfg = (ServerMBean)home.getConfigurationMBean(serverName,
"ServerConfig");
System.out.println("Got the Server Config MBean: " + servercfg);
           //サーバ インスタンスについてコンフィグレーションされている
//すべての ExecuteQueue MBean を取得
xqueues = servercfg.getExecuteQueues();
           //結果の繰り返し処理 
for (int i=0; i < xqueues.length; i++){
xqueue = xqueues[i];
System.out.println("Execute queue name: " +
xqueue.DEFAULT_QUEUE_NAME);
System.out.println("Thread count:" + xqueue.getThreadCount());
             }
} catch (Exception e) {
System.out.println("Exception caught: " + e);
}
}
}

任意のサーバ インスタンス上で実行できる汎用的な JMX コードを作成して、サーバ コンフィグレーション MBean を取得するには、次の手順に従います。

  1. ローカル MBeanHome インタフェースから、getMBeansByType メソッドを使用して、サーバの ServerRuntimeMBean を取得します。
    serverRuntime = MBeanHome.getMBeansByType(ServerRuntime)
  2. ローカル MBeanHome インタフェースがアクセスできるのは、現在のサーバ インスタンスに固有の実行時 MBean のみであるため、getMBeansByType(ServerRuntime) が返すのは、現在のサーバの ServerRuntimeMBean のみです。

  3. ServerRuntimeMBeangetName メソッドを使用して、サーバの名前を取得します。
    serverName = serverRuntime.getName()
  4. MBeanHome.getConfigurationMBean を呼び出す際に、サーバ名を使用します。
    MBeanHome.getConfigurationMBean(serverName,"ServerConfig")

詳細については、「例 : アクティブなドメインとサーバの判別」を参照してください。

 


MBeanServer インタフェースを使用した MBean へのアクセス

MBean と対話する標準的な JMX の手法では、javax.management.MBeanServer インタフェースを使用して MBean サーバに登録されている MBean をルックアップします。続いて、MBeanServer インタフェースを使用して、MBean 属性を取得または設定するか、MBean の操作を呼び出します。MBeanServer メソッドの詳細なリストについては、「http://jcp.org/aboutJava/communityprocess/final/jsr003/index.html」からダウンロード可能な JMX 1.0 API のドキュメントを参照してください。ダウンロードしたアーカイブに、API ドキュメントが格納されています。

MBeanServer インタフェースは以下の方法で取得できます。

コード リスト 2-7  のサンプルコードでは、サーバの JNDI ツリーから MBeanServer をルックアップしています。WebLogic Server JNDI ツリーの初期コンテキストを確立するには、クライアントでサーバの接続情報、WebLogic Server コンテキスト ファクトリの名前、および WebLogic Server のログイン資格を指定する必要があります。「javax.naming.Context」の Javadoc を参照してください。

この例で、weblogic は MBean 属性を表示および変更するパーミッションを持つユーザです。MBean の表示や変更のパーミッションの詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。

コード リスト 2-7JNDI を介した MBeanServer の取得

String url = "t3://localhost:7001"; //URL of the server instance
String username = "weblogic";
String password = "weblogic";
MBeanServer rmbs = null;
Hashtable props = new Hashtable();
props.put(Context.PROVIDER_URL, url);
props.put(Context.INITIAL_CONTEXT_FACTORY,
   "weblogic.jndi.WLInitialContextFactory");
   props.put(Context.SECURITY_PRINCIPAL, username);
   props.put(Context.SECURITY_CREDENTIALS, password);
InitialContext ctx = new InitialContext(props);
rmbs = (MBeanServer) ctx.lookup("weblogic.management.server");

 

フッタのナビゲーションのスキップ  ページの先頭 前 次