![]() |
![]() |
|
|
| |
MBean 通知の使い方
以下の節では、WebLogic Server MBean からブロードキャストされる、さまざまな通知の使い方について概説します。
概要
すべての WebLogic Server MBean には javax.management.NotificationBroadcaster
インタフェースが実装されているため、WebLogic Server MBean は標準の JMX 通知タイプを送信できます。
MBean 通知を監視するには、NotificationListener
インタフェースをクライアント アプリケーションに実装し、受信する通知の送信元になる MBean にリスナ クラスを登録します。次の図は、JSP またはサーブレットを使用して通知をモニタする基本的なシステムを示しています。
必要に応じて、リスナ クラスには NotificationFilter
クラスを登録できます。これにより、リスナが受信する通知に関して詳細な指定を行うことができます。
注意: JMX 通知とその機能の詳細については、Sun Microsystems J2EE JMX 仕様を参照してください。
外部クライアントでの通知の使用
JMX 1.0 仕様では、ブロードキャストを行っている MBean の JVM の外部にあるクライアントで通知を使用できるようにする方法については定義されていません。WebLogic Server バージョン 6.1 では、weblogic.management.RemoteNotificationListener
インタフェースを通じて、外部でも通知を使用できるようになっています。
RemoteNotificationListener
は、javax.management.NotificationListener
および java.rmi.Remote
を拡張したものであり、RMI を通じて外部クライアントで MBean 通知を使用できるようにします。次の図に示すように、WebLogic MBean 通知を受信するために、リモートの Java クライアントには、NotificationListener
ではなく、RemoteNotificationListener
が実装されます。
リモートの Java クライアント リスナの登録は、標準の JMX addNotificationListener()
メソッドを使用して行われます。
MBean 通知の概要
WebLogic Server 通知では、JMX 1.0 仕様で示されている、標準の通知クラスが使用されます。さらに、WebLogic Server では、WebLogic Server MBean ログ通知を処理するための、追加の通知クラスおよび通知ヘルパー クラスが用意されています。以降の節では、WebLogic Server の JMX アプリケーションで使用できる通知タイプおよび通知クラスについて概説します。
基本的な JMX 通知
すべての WebLogic Server MBean には、NotificationBroadcaster
インタフェースが実装されているため、WebLogic Server MBean は JMX 1.0 仕様で示されている通知タイプを生成できます通知タイプは以下のとおりです。
javax.management.AttributeChangeNotification
。MBean の属性値が変更された場合の通知に使用します。
javax.management.MbeanServerNotification
。MBeanServer に委託された通知に使用します。
また、特定の WebLogic Server MBean では、「add」メソッドおよび「remove」メソッドを保持する属性用に通知タイプがさらに 2 種類サポートされています。
weblogic.management.AttributeAddNotification
は、属性の add
AttributeName
メソッドが呼び出されるときにブロードキャストされます。
weblogic.management.AttributeRemoveNotification
は、属性の remove
AttributeName
メソッドが呼び出されるときにブロードキャストされます。
WebLogic Server ログ通知
WebLogic Server には、ログ メッセージのブロードキャストを処理する LogBroadcasterRuntime
MBean が用意されています。ログ通知をリスンする必要のあるクライアント アプリケーションでは、通知リスナを LogBroadcasterRuntime
MBean に簡単に登録できます。
WebLogic Server ログ メッセージを表す通知には、以下のような多くの情報が含まれています。
こうした WebLogic Server ログ情報を JMX アプリケーションで抽出し、使用できるよう、WebLogicLogNotification
ラッパー クラスが用意されています。WebLogicLogNotification
では、メッセージに関連付けられたトランザクション ID、ユーザ ID、およびバージョン番号を取得するメソッドだけでなく、ログ メッセージの部分を抽出する、単純なゲッター メソッドも提供されています。
「 WebLogic Server ログ通知の処理」では、クラスおよびインタフェースがサポートされているログ通知の使い方の詳細について説明しています。
基本的な JMX 通知の使い方
外部クライアント アプリケーションで WebLogic MBean 通知を受信するには、以下の処理を行う必要があります。
以降の節では、これらの処理の基本手順について説明します。
通知リスナの作成
通知リスナ クラスは、1 つまたは複数の MBean によってブロードキャストされる JMX 通知を処理します。JMX アプリケーションが、ブロードキャストを行っている MBean の JVM の外部にある場合は、リスナ クラスに weblogic.management.RemoteNotificationListener
を実装して、通知の受信時にアクションを実行する handleNotification()
クラスを提供する必要があります。次に実装例を示します。
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.Notification.*;
...
public class WebLogicLogNotificationListener implements
RemoteNotificationListener {
...
public void handleNotification(Notification notification, Object obj) {
WebLogicLogNotification wln = (WebLogicLogNotification)notification;
System.out.println("WebLogicLogNotification");
System.out.println(" type = " +
wln.getType());
System.out.println(" message id = " +
wln.getMessageId());
System.out.println(" server name = " +
wln.getServername());
System.out.println(" timestamp = " +
wln.getTimeStamp());
System.out.println(" message = " +
wln.getMessage() + "\n");
}
通知リスナの MBean への登録
すべての WebLogic Server MBean は通知をブロードキャストします。このため、使用可能な任意の MBean に NotificationListener
を登録できます。NotificationListener
は、その MBean の addNotificationListener()
メソッドを呼び出すことによって登録できます。
ただし、ほとんどの場合では、MBeanServer の addNotificationListener()
メソッドを使用して、リスナを登録することが望ましいと言えます。javax.management.MBeanServer
インタフェースを使用することで、登録を行うためだけに特定の MBean をルックアップする手間を省くことができます。たとえば、「
通知リスナの作成」で定義されたリスナは次のように登録されます。
rmbs = home.getMBeanServer();
oname = new WebLogicObjectName("TheLogBroadcaster",
"LogBroadcasterRuntime",
DOMAIN_NAME,
SERVER_NAME);
rmbs.addNotificationListener(oname,
listener,
null,
null);
WebLogic Server ログ通知の処理
上記の例で示されているように、ログ メッセージを受信するために、クライアント アプリケーションでは標準の JMX API を使用して、通知リスナを WebLogic Server LogBroadcasterRuntimeMBean
に登録できます。LogBroadcasterRuntimeMBean
は、サーバによって生成されるログ メッセージ用の通知の生成を行います。
LogBroadcasterRuntimeMBean
によってブロードキャストされるすべての通知のタイプは、WebLogicLogNotification
です。TheLogBroadcaster
という LogBroadcasterRuntimeMBean
が、サーバごとに 1 つだけ存在します。
LogBroadcasterRuntimeMBean
には、「
MBeanHome からの MBean へのアクセス」で説明されているメカニズムを使用してアクセスできます。
WebLogicLogNotification の内容
WebLogic Server ログ メッセージのすべての JMX 通知には、以下のフィールドがあります。
weblogic.logMessage.
subSystem.messageID
ここで、subSystem
はログ メッセージを発行した WebLogic Server サブシステムを示し、messageID
は WebLogic Server 内部のメッセージ ID を示します。
すべての通知のタイプは、WebLogicLogNotification
です。このヘルパー クラスでは、ログ メッセージの個々のフィールドすべてに対するゲッター メソッドが提供されています。WebLogicLogNotification
クラスを使用すると、クライアント アプリケーションで重要度、ユーザ ID、サブシステムなどのフィールドに基づいて、ログ通知を簡単にフィルタ処理できます。
次に示す NotificationFilter
の例では、WebLogicLogNotification
クラスを使用して、特定のメッセージ ID(111000)のメッセージだけが選択され、通知として送信されます。
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.Notification.*;
....
public class WebLogicLogNotificationFilter implements NotificationFilter,
java.io.Serializable {
public WebLogicLogNotificationFilter() {
subsystem = "";
}
public boolean isNotificationEnabled(Notification notification) {
if (!(notification instanceof WebLogicLogNotification)) {
return false;
}
WebLogicLogNotification wln = (WebLogicLogNotification)notification;
if (subsystem == null ||
subsystem.equals("")) {
return true;
}
StringTokenizer tokens = new StringTokenizer(wln.getType(), ".");
tokens.nextToken();
tokens.nextToken();
return (tokens.nextToken().equals(subsystem));
}
public void setSubsystemFilter(String newSubsystem) {
subsystem = newSubsystem;
}
}
WebLogic Server エラー メッセージ用の通知リスナの例
クライアント アプリケーションでは、ログ メッセージを通知として受信し、以下のようなアクションを実行する、さまざまなカスタム NotificationListener
を作成できます。
この通知リスナの基本的なフォームは、「 通知リスナの作成」で示されている例とは若干異なります。その例で出力されるメッセージを、通知に応答してアクションを実行する、必要な JDBC 呼び出しまたはページング処理で置き換えてください。
![]() |
![]() |
![]() |