WebLogic JMX Service プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
すべての JMX タスク (MBean 属性の表示と変更、通知の使用、および変更のモニタ) では、同じプロセスで MBean にアクセスします。
以下の節では、WebLogic Server MBean にアクセスする方法について説明します。
WebLogic Server で MBean にアクセスするための主な手順は次のとおりです。
weblogic.management.MBeanHome
インタフェースを使用して MBean サーバにアクセスします。「MBeanHome インタフェースへのアクセス」を参照してください。 javax.management.MBeanServer
インタフェース。このインタフェースでは、WebLogic Server MBean または独自に作成した MBean の操作の取得および呼び出しを行えます。「MBeanServer インタフェースを使用した MBean へのアクセス」を参照してください。weblogic.management.RemoteMBeanServer
インタフェース。このインタフェースは、javax.management.MBeanServer
インタフェースおよび java.rmi.Remote
インタフェースを拡張します。
MBean にアクセスするときには、どのインタフェースを使用するかに関して 2 つの選択が必要になります。
MBeanHome
インタフェースまたは管理 MBeanHome
インタフェースのどちらを使用するか。選択した MBeanHome
インタフェースによって、アクセス可能な MBean が決まります。 次の表に、ローカルの MBeanHome
インタフェースと管理 MBeanHome
インタフェースのどちらを使用するかを決定するための標準的な考慮事項を示します。
|
|
MBeanServer
インタフェース、または WebLogic RemoteMBeanServer
インタフェースのどれを使用するか。次の表に、型保障インタフェースと MBeanServer
インタフェースのどちらを使用するかを決定するための標準的な考慮事項を示します。
ローカル MBeanHome
インタフェースまたは管理 MBeanHome
インタフェースを取得する最も単純な方法は、WebLogic Server の Helper
クラスを使用することです。標準的な J2EE の手法の方がよい場合は、Java Naming and Directory Interface (JNDI) を使用して MBeanHome
を取得できます。
WebLogic Server には、MBeanHome
インタフェースを簡単に取得するための weblogic.management.Helper
API が用意されています。
Helper
API を使用するには、以下の情報を収集します。
MBeanHome
インタフェースにアクセスする場合、対象サーバの名前 (ドメイン コンフィグレーションに定義されている名前) と URL。MBeanHome
にアクセスする場合、管理サーバの URL。上の情報を収集したら、以下のいずれかの API を使用します。
MBeanHome
を取得する場合 Helper.getMBeanHome(java.lang.String user, java.lang.String password, java.lang.String serverURL, java.lang.String serverName)
MBeanHome
を取得する場合 Helper.getAdminMBeanHome(java.lang.String user, java.lang.String password, java.lang.String adminServerURL)
Helper
API の詳細については、「WebLogic Server の Javadoc」 を参照。
次の例 (コード リスト 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);
}
}
}
Helper
API を使用すると MBeanHome
インタフェースを簡単に取得できますが、JNDI を使用して MBeanHome
を取得する標準的なアプローチの方がより分かりやすい場合もあります。サーバのローカル MBeanHome
インタフェースには、管理対象サーバの JNDI ツリーからアクセスできます。管理サーバの JNDI ツリーからは、ドメイン内のすべてのサーバ インスタンスのローカル MBeanHome
インタフェースに加えて管理 MBeanHome
にもアクセスできます。
JNDI を使用して MBeanHome
インタフェースを取得するには、次の手順に従います。
WebLogic Server は、MBeanHome
インタフェースを通じてリクエストを実行するパーミッションがユーザの資格に付与されているかどうかを検証します。詳細については、『WebLogic リソースのセキュリティ』の「セキュリティ ロール」を参照してください。
たとえば次のコードでは、初期コンテキストを 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」を参照してください。
MBeanHome
を取得するには、次の API を使用する。javax.naming.Context.lookup(MBeanHome.LOCAL_JNDI_NAME)
MBeanHome
を取得できる。javax.naming.Context.lookup("weblogic.management.home.
relevantServerName
")
MBeanHome
を取得できる。javax.naming.Context.lookup(MBeanHome.ADMIN_JNDI_NAME)
管理 MBeanHome
インタフェースは、ドメイン内のすべてのローカル コンフィグレーション MBean、管理 MBean、および実行時 MBean へのアクセスを提供します。
javax.naming.Context.lookup(String name)
の詳細については、「Sun の Javadoc」 を参照してください。
以降の節では、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);
}
}
}
管理サーバ (または管理する 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);
}
}
}
MBeanHome
インタフェースを取得した後、MBean にアクセスする最も簡単な方法は MBean の型保証インタフェースを取得する MBeanHome
インタフェースのメソッドを使用することです。
この型保証インタフェースは、WebLogic Server 提供の MBean でのみ使用できます。独自に作成した MBean タイプに基づく MBean では、この型保証インタフェースは使用できません。
MBeanHome.getAllMBeans
メソッドを使用すると、取得する MBeanHome
インタフェースのスコープに含まれる MBean のオブジェクト名をルックアップできます。たとえば、管理 MBeanHome
を取得する場合、getAllMBeans()
を使用するとドメイン内のすべての MBean のリストが返されます。ローカル MBeanHome
インタフェースを取得する場合は、getAllMBeans()
を使用すると、現在のサーバの実行時 MBean のリストと、ドメイン内のすべてのローカル コンフィグレーション MBean のリストが返されます。
コード リスト 2-4 のクラス例は次のように機能します。
この例で、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」 を参照してください。
MBeanHome
のスコープに含まれるすべての MBean のリストを取得する代わりに、特定のタイプと一致する MBean のリストを取得できます。Type
は、MBean が管理するリソースのタイプと、MBean が管理 MBean、ローカル コンフィグレーション MBean、または実行時 MBean のどれであるかを示します。MBean のタイプの詳細については、「WebLogic Server の管理用ネームスペース」を参照してください。
コード リスト 2-5 のクラス例は次のように機能します。
この例で、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」 を参照してください。
WebLogic Server の MBean は、関連付けられたリソースを反映している階層の中に存在します。たとえば、各サーバ インスタンスは複数の実行キューを持つことができ、WebLogic Server は、各 ExecuteQueueMBean
を ServerMBean
の子にすることでこの関係を表します。
ローカル コンフィグレーション MBean および実行時 MBean を取得するには、MBean の階層をたどるのが最も簡単な方法です。MBean の取得に管理 MBeanHome
を使用するか、管理 MBean を取得する場合は、タイプによって MBean を取得してから、リストをフィルタ処理することをお勧めします。「タイプおよびリストからの選択による MBean の取得」を参照してください。
コンフィグレーション MBean 階層のルートは、DomainMBean
です。このルート下には、次のような MBean があります。
実行時階層のルートは、ServerRuntimeMBean
です。このルート下には、次のような MBean があります。
親 MBean は通常、子を取得するためのメソッドを提供します。たとえば、ServerMBean.getExecuteQueues
は、サーバについてコンフィグレーションされているすべての ExecuteQueueMBean
を返します。
階層の詳細については、「WebLogic Server の管理用ネームスペース」を参照してください。
ローカル コンフィグレーション MBean または実行時 MBean の階層をたどるには、次の手順に従います。
getConfigurationMBean (java.lang.String name, java.lang.String type)
「MBeanHome.getConfigurationMBean」の Javadoc を参照してください。
getRuntimeMBean (java.lang.String name, java.lang.String type)
「MBeanHome.getRuntimeMBean」の Javadoc を参照してください。
これらのメソッドを使用して、DomainMBean
または ServerRuntimeMBean
のすぐ下にある MBean のみを取得します。これらのメソッドは、MBean 階層の最初のレベル下にある MBean は返しません。
親 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 を取得するには、次の手順に従います。
詳細については、「例 : アクティブなドメインとサーバの判別」を参照してください。
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
インタフェースは以下の方法で取得できます。
weblogic.management.MBeanHome
インタフェースの getMBeanServer()
メソッドを使用する。 この方法は、使用している JMX クライアントにすでに MBeanHome
インタフェースへの参照がある場合に使用します。「MBeanHome.getMBeanServer()」の Javadoc を参照してください。
javax.management.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");
![]() ![]() |
![]() |
![]() |