<< jconsole で WebLogic 9.x に接続すると " User does not have permission on weblogic.management.mbeanservers" | Home | セカンドライフ - Second Life に挑戦! >>

JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

JMX の仕様は昔からありますが、それにアクセスする標準的な方法はしばらくなく、WLS6.0 〜 8.1 まで、BEA は独自に EJB / RMI をベースとした方法を提供していました。

しばらくすると、JMX Remote APIという仕様が策定されました。最近の WebLogic (9.x 以降)や Tomcat が対応しています。
WebLogic は JMX Remote API に対応したのに伴い従来のアクセス方法には対応しなくなった(みたい?)※で、虚無僧が WLS9.x で動かない(みたい?)とのことです。

で、勉強がてらドキュメントと睨めっこして可能な限りシンプルなコードを書いてみました。
従来の WLS の API との一番の違いは MBean のリモートスタブそのものを取得できないことです。
オブジェクト名と属性(getter)を指定して結果を取得する(MBeanServerConnection#getAttribute)か、オブジェクト名とメソッド名を指定してメソッド実行をする(MBeanServerConnection#invoke)ことになるようです。

・サンプルコード


import java.util.Properties;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;

public class MBeanTest {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put(Context.SECURITY_PRINCIPAL, "weblogic");
props.put(Context.SECURITY_CREDENTIALS, "weblogic");
props.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
JMXConnector connector = JMXConnectorFactory.connect(
new JMXServiceURL("service:jmx:t3://localhost:7001/jndi/weblogic.management.mbeanservers.domainruntime"), props);
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName sr = new ObjectName("com.bea:Name=AdminServer,Location=AdminServer,Type=ServerRuntime");
System.out.println(connection.getAttribute(sr, "State"));
connector.close();
}
}


・実行イメージ
$ java -cp weblogic.jar:. MBeanTest
RUNNING
$


※ドキュメントでは旧API は「非推奨」ですが、〜WLS8.1 と WLS9.x では内部的な MBean の実装モデルが随分違います。なので、「枯れていない」ラッパー用のコードで一応使えるようになっているような状況と思われます。
「もう基本的にメンテはしないよ」という通常の「非推奨」とは違うレベルでお勧めできません。
参考:
・WLS9.2 - WebLogic Server MBean について
・WLS8.1 - WebLogic JMX サービスの概要


関連エントリ:
虚無僧2.0.3 リリース
JConsole で JBoss の MBean を監視
虚無僧2.0 - BSD ライセンスでリリース
@IT - Webアプリの問題点を「見える化」する7つ道具
虚無僧2.0

タグ :


Re: JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

Hello - How to get MBean for Datasource and get database connection to verify if Datasource is running. Thanks

Re: JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

私は上記のやり方で試しましたが、下記のエラーが出てしまいます。

原因は分かりますか。教えていただきたいですけど…

Exception in thread "main" java.lang.NoSuchMethodError: weblogic.rmi.extensions.server.ReferenceHelper.exists()Z
 at weblogic.rmi.extensions.PortableRemoteObject.narrow(PortableRemoteObject.java:84)
 at weblogic.management.remote.common.ClientProviderBase.narrowServer(ClientProviderBase.java:173)
 at weblogic.management.remote.common.ClientProviderBase.makeConnection(ClientProviderBase.java:167)
 at weblogic.management.remote.common.ClientProviderBase.newJMXConnector(ClientProviderBase.java:79)
 at javax.management.remote.JMXConnectorFactory.newJMXConnector(Unknown Source)
 at javax.management.remote.JMXConnectorFactory.connect(Unknown Source)
 at TestWLSMBean.getConnection(TestWLSMBean.java:81)
 at TestWLSMBean.runtests(TestWLSMBean.java:33)
 at TestWLSMBean.main(TestWLSMBean.java:90)

Re: JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

同じエラーを見たことはありませんが、クラスパスの問題のようです。 コンパイルする環境と実行する環境で使ってる weblogic.jar が異なっているのではないでしょうか。

コメント追加 トラックバック送信