5

私は過去 2 年間で JMX について多くのことを学び、自分の Web アプリケーション用にかなり洗練された MBean を構築しました。ただし、非常に基本的な質問に対する適切な答えがあるかどうかはわかりません。

単純な HTTP サーブレットで JMX を使用する理由

私の現在の Web アプリケーションは冗長な監視オプションを提供しています。監視する必要があるデータには、JConsole などのクライアントを使用して JMX 経由でアクセスしたり、サーブレット経由で同じデータに XML 形式でアクセスしたりできます。あるメソッドを別のメソッドよりも優先して使用する強い理由はわかりませんが、サーブレット メソッドには、単純な http クライアント/Web ブラウザーで読み取り可能であるという大きな利点があります。

JMX が Web アプリではない Java アプリケーションに非常に役立つことはわかりますが、Web アプリに JMX を使用する利点は見当たりません。

4

3 に答える 3

10

単純な HTTP サーブレットで JMX を使用する理由

私の観点からは、JMX は次の 3 つの理由で優れています。

  1. 監視ポイントを有効にするために必要なコードが少なくて済みます。
  2. Java のシリアル化されたオブジェクトをエンドツーエンドで処理するため、データの一貫性が向上します。
  3. (前述のように)サーブレットベースではないプログラムで動作します。

JMX は、特定のデータ項目へのはるかに簡単なインターフェイスを提供します。多くのサーブレットで同じ機能を作成することは確かにできますが、JMX を使用してそれらを公開する方が簡単です。

たとえば、Spring を使用している場合は、org.springframework.jmx.export注釈 ( @ManagedResource@ManagedAttributeなど) を使用してクラスをマークアップできます。また、 SimpleJmx フレームワークも公開したので、Spring とは関係なく、2 つのアノテーションだけで属性と操作を簡単に公開できます。例えば:

@JmxResource(domainName = "j256", objectName = "lookupCache")
public class LookupCache {

    // this can also be done as @JmxAttributeMethod on the getter/setters
    @JmxAttributeField(description = "Number of hits in the cache")
    private int hitCount;
    ...

    @JmxOperation(description = "Flush the cache")
    public void flushCache() {
       ...
    }
}

それがどのように機能するかを確認するために、完全に機能するサンプルプログラムがあります。したがって、値または操作を公開するために必要なことは、クラスと各属性および/またはメソッドに注釈を追加することだけです。SimpleJmx を使用して公開するコードは次のようになります。豆とはいえ、春は似ています:

// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
jmxServer.start();
// register our lookupCache object defined above
jmxServer.register(lookupCache);

サーブレットで同様の機能を実現するには、単なる注釈よりも多くのコードが必要になります。とはいえ、私が知らないサーブレットランドで同様の機能を提供するフレームワークが存在する可能性があります。

その他の注意事項:

  • HTTP/HTML を理解するためのより優れた監視ツールが存在する可能性がありますが、分散型 JMX 監視アプリケーションも数多くあります。たぶん投げです。
  • プログラムで JMX サーバーからオブジェクトを取得できることは、サーブレット ページからの単なる文字列とは対照的にプラスです。 SimpleJmxは単純な JMX クライアントもサポートしていますが、より優れたものがあります。
  • もちろん、VM 設定、スレッドの詳細、メモリ情報など、他の多くの価値のあるデータがデフォルトで JVM によって公開されています。
于 2012-05-18T20:59:52.820 に答える
3

値を読み取るだけでなく、JMX を使用して管理 Bean のメソッドを呼び出すこともできます。

たとえば、Tomcat インスタンスの JVM ガベージ コレクションをリモートで強制するためによく使用します。

また、JMX は http/https とは異なるポートであるため、ファイアウォールを介してネットワーク レベルでアクセスを制限できます。JMX には組み込みのユーザー名/パスワード認証もあります。

Web サーブレットは、独自のアクセス制御を実装する必要があります。

于 2012-05-18T20:59:35.540 に答える
2

私の意見では、JMX は過大評価されており、設定が難しい場合があります。アプリケーションがすでに Web コンテナーである場合は、単純なサーブレットを使用する必要があると思います。

nudge4j のような小さなサーブレット アプローチは、すべてを提供します。

于 2016-06-06T12:30:31.950 に答える