![]() |
![]() |
|
|
| |
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
定数を使用してアクセスできます。
個々のサーバの MBeanHome
の javax.management.MBeanServer
は、その MBeanHome
の getMBeanServer()
メソッドを呼び出すことによって取得できます。ドメイン全体の MBeanHome
には、対応する javax.management.MBeanServer
はありません。管理 MbeanHome
の getMBeanServer()
メソッドを呼び出すと、管理サーバの 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
の取得
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;
}
}
![]() |
![]() |
![]() |