ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     JMX Service プログラマーズ ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

WebLogic Server MBean へのアクセス

 

以下の節では、クライアント アプリケーションまたは管理フレームワークから WebLogic Server MBean にアクセスする方法について説明します。

 


概要

WebLogic Server の管理システム」で説明したように、クライアントは 2 つの主要なエージェントレベル インタフェース、MBeanServer および MBeanHome を使用して MBean にアクセスできます。

WebLogic Server の JVM の内部または外部のクライアントから MBean にアクセスするための簡単で、タイプ分けされたインタフェースとして、MBeanHome が提供されています。アプリケーションで、MBean への完全に JMX に準拠したアクセスが必要な場合は、MBeanHome を通じて MBeanServer インタフェースを取得することもできます。

以降の節では、MBeanHome を取得し、MBeanHome インタフェースを通じて WebLogic Server MBean にアクセスする基本的な手順について説明します。MBeanServer インタフェースを通じた MBean へのアクセスに関する詳細については、JMX 仕様を参照してください。

 


WebLogic Server MBean に対するクライアント インタフェースの選択

ドメイン内の各サーバには、そのサーバのコンフィグレーション MBean および実行時 MBean のホストとなる MBeanHome(および対応する MBeanServer)が存在します。さらに管理サーバには、ドメイン全体のすべての MBean へのアクセスを提供する、管理 MBeanHome があります。アプリケーションで使用するインタフェースの選択は、以下の要因によって決まります。

MBeanHome と MBeanServer

MBeanHome インタフェースを使用すると、WebLogic Server MBean に簡単にアクセスできます。ただし、MBeanServer インタフェースに登録されている可能性のあるユーザ定義 MBean にはアクセスできません。アプリケーションでユーザ定義 MBean にアクセスする必要がある場合には、必ず、MBeanServer インタフェースを使用してアクセスしてください。

アプリケーションを完全に JMX 仕様に準拠させる必要がある場合には、javax.management.MBeanServer インタフェースの使用を選択することもできます。ただし、MBeanHome インタフェースでは、WebLogic MBean にアクセスするための、タイプ分けされたインタフェースが提供されているので、このインタフェースのほうが MBeanServer より一般的に使いやすくなっています。

注意: この章のすべての例で、MBeanHome が MBean にアクセスするための主要な方法として使用されています。MBeanServer の使用については、JMX 仕様を参照してください。

サーバ MBeanHome と管理 MBeanHome

アプリケーションでは、アクセスする MBean に応じて、個々のサーバの MBeanHome インタフェースや管理 MBeanHome インタフェースを使用できます。

アプリケーションで管理 MBean を管理する必要がある場合には、必ず、管理サーバのドメイン全体の MBeanHome インタフェースを使用してください。管理対象サーバの MBeanHome インタフェースを通じては、管理 MBean にアクセスできないからです。

アプリケーションでドメイン内の複数の WebLogic Server インスタンスを管理する場合には、ドメイン全体の MBeanHome インタフェースを使用したほうが望ましいこともあります。ドメイン全体のインタフェースを使用して、JMX オブジェクト名をフィルタ処理することによって、管理ドメイン内の任意の WebLogic Server から MBean にアクセスできます。

アプリケーションでドメイン内の WebLogic Server インスタンスを 1 つだけ管理する場合には、ドメイン全体の MBeanHome ではなく、そのサーバのローカルの MBeanHome インタフェースを取得したほうがよいこともあります。ローカルのインタフェースを使用することで、そのサーバに適用される MBean を識別するために MBean をフィルタ処理する手間を省くことができます。また、管理対象サーバ自体に直接、接続しているので、ローカルのインタフェースではより少ないネットワーク ホップで MBean にアクセスできます。

 


JNDI を使用した MBeanHome の取得

サーバの MBeanHome は、MbeanHome.LOCAL_JNDI_NAME 定数を使用して、関連サーバの JNDI ツリーから取得できます。

ドメイン全体の管理 MBeanHome は、管理サーバの JNDI ツリーで MBeanHome.ADMIN_JNDI_NAME により発行されます。

また、この管理サーバは、その JNDI ツリー上のドメイン内のサーバごとに MBeanHome を発行します。この MBeanHome は管理サーバの JNDI ツリーから取得でき、MbeanHome.JNDI_NAME+"."+relevantServerName 定数を使用してアクセスできます。

個々のサーバの MBeanHomejavax.management.MBeanServer は、その MBeanHomegetMBeanServer() メソッドを呼び出すことによって取得できます。ドメイン全体の MBeanHome には、対応する javax.management.MBeanServer はありません。管理 MbeanHomegetMBeanServer() メソッドを呼び出すと、管理サーバの MBeanServer が返されます。

例 : 外部クライアントからの MBeanHome のルックアップ

次の例は、異なる JVM で実行中のアプリケーションで、管理サーバの MBeanHome インタフェースをルックアップする方法を示しています。

注意: この例では、非推奨の MBeanHome.JNDI_NAME 定数を使用して、特定のサーバの MBeanHome を取得しています。アプリケーションでは、この代わりに「 JNDI を使用した MBeanHome の取得」に記載されている JNDI 名を使用してください。

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 void findExternal(String host,

int port,

String password) {

String url = "t3://" + host +

":" + port;

String username = "system";

try {

Environment env = new Environment();

env.setProviderUrl(url);

env.setSecurityPrincipal(username);

env.setSecurityCredentials(password);

ctx = env.getInitialContext();

home = (MBeanHome)ctx.lookup(MBeanHome.JNDI_NAME + "." +

SERVER_NAME);

System.out.println(SERVER_NAME +

" MBeanHome found externally");

ctx.close();

} catch (AuthenticationException ae) {

System.out.println("Authentication Exception: " + ae);

} catch (CommunicationException ce) {

System.out.println("Communication Exception: " + ce);

} catch (NamingException ne) {

System.out.println("Naming Exception: " + ne);

}

}

例 : 内部クライアントからの MBeanHome のルックアップ

管理サーバ(または、モニタする WebLogic Server インスタンス)と同じ JVM にクライアント アプリケーションが存在する場合、MBeanHome の JNDI ルックアップはより簡素なものになります。次の例は、管理サーバと同じ JVM で実行中の JSP で、MBeanHome をルックアップする方法を示しています。

注意: この例では、非推奨の MBeanHome.JNDI_NAME 定数を使用して、特定のサーバの MBeanHome を取得しています。アプリケーションでは、この代わりに「 JNDI を使用した MBeanHome の取得」に記載されている JNDI 名を使用してください。

...

public void findInternal() {

Environment env = new Environment();

try {

ctx = env.getInitialContext();

home = (MBeanHome)ctx.lookup(MBeanHome.JNDI_NAME + "." +

SERVER_NAME);

System.out.println(SERVER_NAME +

" MBeanHome found internally");

ctx.close();

} catch (NamingException ne) {

System.out.println("Naming Exception: " + ne);

}

}

例 :MBeanHome からの MBeanServer の取得

アプリケーションで、MBeanServer インタフェースと直接対話する必要がある場合は、MBeanHome を使用すると、それに関連付けられた MBeanServer を簡単に取得できます。

注意: この例では、非推奨の MBeanHome.ADMIN_JNDI_NAME 定数を使用して、管理サーバの MBeanHome を取得しています。アプリケーションでは、この代わりに「 JNDI を使用した MBeanHome の取得」に記載されている JNDI 名を使用してください。

...

home = (MBeanHome)ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);

RemoteMBeanServer homeServer = (RemoteMBeanServer)home.getMBeanServer();

...

 


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

WebLogic Server バージョン 6.1 では、内部クライアントの MBeanHome インタフェースの取得プロセスを簡素化する weblogic.management.Helper クラスが提供されています。Helper クラスは、サーバまたは管理 MBeanHome を取得するメソッドを提供します。

たとえば、Helper クラスを使用して、管理サーバとローカル サーバの両方の MBeanHome を取得するには、次のように記述します。

public void find(String host,

int port,

String password) {

String url = "t3://" + host +

":" + port;

try {

localHome = (MBeanHome)Helper.getMBeanHome("system",

password,

url,

SERVER_NAME);

adminHome = (MBeanHome)Helper.getAdminMBeanHome("system",

password,

url);

System.out.println("Local and Admin Homes " +

"found using the Helper class");

} catch (IllegalArgumentException iae) {

System.out.println("Illegal Argument Exception: " + iae);

}

}

 


MBeanHome からの MBean へのアクセス

MBeanHome を取得したら、javax.management.MBeanHome で説明されているメソッドを使用して個々の MBean をルックアップできます。たとえば、管理 MBeanHome のすべての MBean をルックアップし、その JMX オブジェクト名を出力するには、次のように記述します。

public void displayMBeans() {

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());

}

}

MBeanHome.getMBean() メソッドを使用することで、個々の MBean にアクセスできます。getMBean() には、いくつかの異なるメソッド シグネチャがあります。最も単純なシグネチャは、デフォルト ドメインで指定された名前とタイプを持つ WebLogicMBean を返します。

MBeanHome では、特定の WebLogic Server MBean タイプを取得するための、追加のゲッター メソッドが提供されています。たとえば、現在のドメインから Server のコンフィグレーション MBean を取得するには、getConfigurationMBean() メソッドを使用できます。

String myBeanType = "ServerConfig";

ConfigurationMBean myServerMBean =

home.getConfigurationMBean(SERVER_NAME, myBeanType);

実行時 MBean を取得するには、getRuntimeMBean() メソッドを使用します。実行時 MBean とは、WeLogic Serverとアプリケーションのコンポーネントに関する実行時情報を与えるローカル MBean です。他の MBeanHome メソッドとは異なり、getRuntimeMBean() は、現在の WebLogic Server 上にある実行時 MBean だけを返します。管理サーバ上の MBeanHome.getRuntimeMBean()を呼び出しても、管理対象サーバから実行時 MBean を返すことはありません。たとえば、以下のようなコードになっている箇所では、現在の WebLogic Server からJDBCConnectionPoolRuntime MBean を返します。

String poolName = "requestConnectionPool";

JDBCConnectionPoolRuntimeMBean runtimeMBean =

(JDBCConnectionPoolRuntimeMBean)home.getRuntimeMBean(poolName,

"JDBCConnectionPoolRuntime");

MBeanHome で使用できる各ゲッター メソッドについては、weblogic.management.MBeanHome の Javadoc を参照してください。

 


カスタム MBean の MBeanServer への登録

WebLogic Server 管理サービスは JMX を使用して実装されているので、独自の MBean を作成し、インストールされている WebLogic Server の MBeanServer に登録することもできます。登録すると、WebLogic Server の MBeanServer 実装を利用して独自の MBean のホストにし、内部および外部クライアントで独自の MBean を使用できるようになります。

すべてのカスタム MBean は、登録され、JMX に準拠した MBeanServer インタフェースを使用してアクセスされなければなりません。カスタム MBean に対しては、MBeanHome インタフェースを使用できません。MBeanHome は、WebLogic Server MBean のみをクライアントで使用できるようにします。さらに、weblogic.Admin などの BEA ユーティリティを使用してカスタム MBean にアクセスすることもできません。

次の例は、基本的な MBean 実装と、MBean を管理サーバの MBeanServer に登録するクライアント アプリケーションを示しています。ただし、この例では、JMX 仕様で説明されているすべての要件(MBean の例外処理など)が示されているわけではありません。独自のカスタム MBean の実装に関する詳細については、JMX 仕様を参照してください。

カスタム MBean の例

この例では、カスタム MBean は、1 つのメソッド実装のみを必要とする省略されたインタフェースで構成されています。

public interface MyCustomMBean {

int getMyAttribute();

}

クライアント アプリケーションの例

クライアント アプリケーションでは、以下のアクションが実行されます。

MBeanHome および MBeanServer の取得など、上記のアクションの多くについては、この節で既に説明されています。登録および属性の呼び出しだけが MBean によって異なります。これらの呼び出しは MBeanServer インタフェースに直接作用し、完全に JMX に準拠しているからです。詳細な情報は、Java コメントに記載されています。

import weblogic.management.MBeanHome;

import weblogic.management.Helper;

import weblogic.management.RemoteMBeanServer;

import javax.management.*;

import MyCustomMBean;

// クライアント クラスで MyCustomMBean が実装され、main 関数によって

// MBeanHome と MBeanServer の取得、MBean の登録、属性値へのアクセス、

// およびそれ自体の登録解除が行われる

public class MyCustom implements MyCustomMBean, java.io.Serializable {

public static void main(String[] args)

// 実際の JMX クライアントでは、アプリケーション内の別の場所で例外が適切に処理される

// わかりやすくするために、この例では例外の送出だけを行う

throws Exception {

// ヘルパー クラスを使用して、管理サーバの MBeanHome を

// 取得する

MBeanHome mbh = Helper.getMBeanHome("system",

"system_password","t3://localhost:7001","examplesserver");

// MBeanHome を使用して、MBeanServer インタフェースを取得する

RemoteMBeanServer mbs = mbh.getMBeanServer();

// MBeanServer インタフェースに対して JMX 呼び出しを使用するには、

// ObjectName を使用する必要がある

ObjectName mbo = new ObjectName("user_Domain:Name=x");

// カスタム MBean の MBeanServer への登録を試みる

try {

mbs.registerMBean((Object)new MyCustom(),mbo);

} catch(InstanceAlreadyExistsException i) {

System.out.println("MBean ("+mbo+") allready exists");

}

// MyAttribute の値を取得し、出力する

System.out.println("Value of MyAttribute of ("+mbo+")from MBeanServer = "+

mbs.getAttribute(mbo,"MyAttribute"));

// カスタム MBean が登録解除される

mbs.unregisterMBean(mbo);

}

// この例のクライアントでは、MyCustomMBean インタフェースの、

// 出力を行うメソッドが 1 つ実装されている

public int getMyAttribute() {

System.out.println("getMyAttribute invoked.");

return 999;

}

}

 

back to top previous page next page