質問

を探しています:

  • JMX とは何ですか。
  • 良いJMXチュートリアルを見つけることができます。
  • JMXがJava EEプログラマーとして私に提供できるもの。
  • 私が知っておくべき他の何か。
役に立ちましたか?

解決

JMXは、アプリケーションの実行時の状態を表示および操作する方法です。それが助け場合は、SNMPの概念と多少似ています。 IMO、それは監視およびログファイルへの書き込みのほか、他のユーザーインターフェイスを持っていない可能性があり、サーバー型のアプリケーションを理解するために不可欠です。

基本的なアプローチは、その後、実際に利用可能なインタフェースで定義されたものを作るた(その後、「MBeanServerの」と、そのクラスのインスタンスを登録し、クラスがインタフェースを実装していて、監視したいもののためのインタフェースを作成することです)のjconsoleなどのJMX監視アプリケーションにます。

ここだ些細な - しかし、作業 - 例:

(私は、Java 5以上を想定しています)。

TestServerMBean.java

public interface TestServerMBean
{
    public long getUptimeMillis();
    public long getFooCount();
    public void setFooCount(long val);
    public void printStuff(String stuff);
}

TestServer.java:

import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;

import javax.management.ObjectName;

// If jconsole doesn't see this app automatically, invoke the application with the following java flags, and connect
// 'remotely' via jconsole.
//
// -Dcom.sun.management.jmxremote
// -Dcom.sun.management.jmxremote.port=2222 (or whatever)
// -Dcom.sun.management.jmxremote.authenticate=false
// -Dcom.sun.management.jmxremote.ssl=false
public class TestServer implements TestServerMBean
{
    private final AtomicLong m_counter = new AtomicLong(0L);
    private final long m_startTimeMillis = System.currentTimeMillis();

    public void run() throws InterruptedException {
        while (true) {
            m_counter.incrementAndGet();
            Thread.sleep(5000);
        }
    }

    public long getFooCount() {
        return m_counter.get();
    }

    public void setFooCount(long val) {
        m_counter.set(val);
    }

    public long getUptimeMillis() {
        return System.currentTimeMillis() - m_startTimeMillis;
    }

    public void printStuff(String stuff) {
        System.out.println(stuff);
    }

    public static void main(String[] args) throws Exception {
        TestServer ts = new TestServer();
        ManagementFactory.getPlatformMBeanServer().registerMBean(ts, new ObjectName("myapp:service=MyServer"));
        ts.run();
    }
}

コンパイルし、実行TestServer.classをいつものように、jconsoleを起動し、(それが自動的に表示されます、他に上記のコード内のコメントを参照してください)TESTSERVERに接続し、その後、「MBeanの」タブを見て、あなたは私たちわかりますインスタンスがmyapp:service=MyServer命名します。あなたは、現在の「稼働時間」を表示し、5秒ごとにFooCounter増分を見ることができます。また、あなたが好きな(長い)の値にFooCounterを設定し、任意の文字列引数でprintStuffメソッドを呼び出すことができます。

これは明らかにばかげた「サーバ」ですが、うまくいけば簡単な作業例を持つことは、全体的な概念を示し役立ちます。実行中のアプリを覗いて操作することができることを

があり、追加機能とのMBeanの異なる種類の多くがありますが、ちょうど上に示したバニラJMXはIMO、長い道のりを行く。

他のヒント

は、簡単に言えばJMXでリモートメソッドを呼び出すか、実行しているJVMの内部から露出データを表示することを可能にします。アプリケーションの多くは、一種のリモート管理を提供するために、その実行中のJVMにリモートダッシュボードを接続するためにJMXを使用します。

あなたはJMXで、マシン上で実行しているアプリケーションサーバーを持っていた場合は、

たとえば、リモートからそのサーバに関する公開情報を閲覧することが可能です。あなたのアプリケーション内の任意の変数やメソッドを公開することができ、独自のJMX MBeanをコーディングすることも可能です。曝露変数はその後、遠隔地について、あなたは知りたいのですが、特定の条件をテストするために、「ポーリング」することができます。

JMXについてのもう一つの便利なところは、リモートからその場で変数を変更することができるということです。あなたは最大合計量が設定プールのいくつかの並べ替えを持っている場合たとえば、この最大量は、アプリケーションサーバー上の任意のコンフィギュレーションファイルを再起動するか、変更することなくリモートで変更することができます。

jconsoleは、簡単に自分のクライアントソリューションをコーディングすることなく、リモートでMBeanを表示できるようにするJavaとSunが提供されます。あなたはまた、あなたの優れた柔軟性を与えることができるカスタムソリューションでMBeanを消費する可能性があります。

また、カップルに名前を付け、これを行う。Zenossとアプリケーションマネージャ8に建てられたJMX MBeanの監視が付属していくつかの監視ソフトウェア、既に存在します。

を追加:

JMXを利用してソフトウェアの多くは、すでに存在しています。 Tomcatは、jconsoleを経由してアクセス可能である情報を公開するので、JBossアプリケーションサーバが行います。

たぶん、JSR 262はまた、ここで言及される価値がある。

「JSR 262は、リモートでのJMX計測機器を使用できるようにするには、Webサービスを使用して、JMXリモートAPI用のコネクタを定義します。クライアントはJavaアプリケーションである必要はありませんが、することができます。」

JSR 262は、次のバージョンのJava(Javaの7)の一部になる可能性が非常に高いです。

依存 JMX WSコネクタのjava.netプロジェクトがありますワイズマンプロジェクトの上。ワイズマンは、WS-Managementの標準のオープンソースのJava実装です。

これらは、最初のJMX上に読み込むときに、私は読んで2つです。

日チュートリアル: http://java.sun.com/ドキュメント/書籍/チュートリアル/ JMX / index.htmlをする

春2.5 / JMX:ます。http://静的。 springframework.org/spring/docs/2.5.x/reference/jmx.htmlする

それとも、私がリストに数日前にそれを更新し、右ここにStackOverflow上こののJMXタグのwikiを見に行くことができますほとんど何を聞くと、いくつかの貢献追加情報:

https://stackoverflow.com/tags/jmx/info

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top