1

サーバー上で実行中のJava、Scala Webアプリケーションを実行しています。実行中のアプリケーションにアクセス/クエリするための cli インターフェイスを作成するにはどうすればよいですか? 最低限必要なのは、実行中のアプリケーションのメソッドを呼び出して、返された文字列を取得することだけです。すべてコマンド ラインから実行します。どうすればいいですか?

注: Apache Thriftは私の問題に関連しているようですが、やり過ぎのように感じます。すでに実行中のアプリケーションに「フック」できるbashスクリプトまたは小さなJavaプログラムを書きたいだけです。

4

2 に答える 2

1

プログラムは attach API を使用して、実行中の JVM を見つけて接続できます。

http://docs.oracle.com/javase/7/docs/jdk/api/attach/spec/

次に、エージェントを JVM にロードするように指示できます。このようなエージェントの実装方法について は、java.lang.instrumentパッケージの説明の「VM 起動後のエージェントの起動」の章を参照してください。

このエージェントは、ターゲット JVM で目的のメソッドを呼び出すことができます。別のアプリケーションを管理する際に実行する可能性のある多くの操作用の JMX エージェントが既に存在することに注意してください。それを勉強する価値があります。

于 2013-09-05T11:09:53.597 に答える
1

JMX を使用する

要件を考慮すると、最も簡単なソリューションはJMXを使用する可能性が最も高いです。それはJava Management eXtensions API であるため、まさにそのために作成されたものです。

Java チュートリアルに詳細なチュートリアル トレイルがあります。比較的単純です。Java プログラムは JMX クライアントからの接続をリッスンし、独自の管理 Bean (MBean)を照会できるようにします。

管理者は、JMX 互換クライアント (たとえばjconsole) またはカスタム クライアントを使用できます。カスタム JMX クライアントの例については、こちらを参照してください。

もう 1 つの優れた (現在はやや古くなっていますが) チュートリアルは、Getting Started with MBeansです。


監視と管理のための独自の拡張ポイントを作成するのではなく、特定の関数の戻り値をインターセプトすることが必要な場合は、デバッガーを使用する可能性が高くなります。

また、次の SO の質問に興味があるかもしれません。

于 2013-09-05T11:13:29.540 に答える