2009-05-05 7 views
1

私は、特定のjvmが稼働しているときに実行する小さなテストクラスを用意しています(基本的にはTomcat上で動作するWebアプリケーションです)。私がこれをやりたいのは、そのテストクラスのために同じ環境(ロードされ、初期化されたクラス)を得るために、そのjvm内に小さなテストクラス(メインメソッドとすべて)を実行したいのです。リモートjvmでクラスを実行する

クラスを実行するために新しいVMを初期化するのではなく、リモートVM上で実行して結果をコンソールに表示するべきではないことを、例えばjvmパラメータを使って示すことは可能ですか?したがって、ローカルのJVMは一種のシンプロキシとして機能しますか?

これを可能にするいくつかのツールがあると私は気づいていません。また、Java 6 jvmにこのようなオプションが付属していると聞いたことはありますか? 私を助けてください。

ありがとう、

+0

どのように小さなテストクラスatmを実行していますか? – Chii

答えて

0

有用なJMXがあります。サーバープロセスにMBeanを登録します。 visualvm(またはjconsole)で呼び出します。 (tutorial)絶対にそれを試したことはありません。

0

RMIでも魔法を使うでしょう。

http://java.sun.com/javase/6/docs/technotes/guides/rmi/index.html

Webアプリケーションは、RMIレジストリを起動し、 豆そこにあなたのサービスを登録してください。

他のJVMでは、Webアプリケーションによって開始されたRMIレジストリ を照会して、確認するサービスを とするプログラムを実行することができます。

1

btraceをご覧ください。そのJVM内の変数の状態を変更しない限り、すでに起動済みのJVMでコードを実行することができます。この種のトレースでは、問題を別の方法で解決できる可能性があります。新しいクラスの形で余分なコードを実行するのではなく、安全なコードをJVM内で実行されている既存のクラスに追加することによって実現します。

たとえば、File.existsへの呼び出しがある場合、ファイルの名前はSystem.out.printlnとなります。

0

「小さなテストクラス」は基本的に、実際のアプリケーションを監視するために実行したいデバッグコードです。これはTomcatにリモートで配置されています。この場合、EclipseデバッガをリモートでTomcatインスタンスに接続する必要があります。そのため、興味深い場所にブレークポイントを設定し、Eclipseの表示ビューを使用して、高度なデバッグコードを実行するために必要な任意のコードを実行できます。 Javaはデバッグメカニズムを使用してホットコード置換をサポートするため、実行時に新しいコードでリモート側の既存のコードを変更することもできます。

+0

よく言い換えれば、私はwebcatをtomcat上で走らせていると言います。実行したい新しいクラスはそのコードベースの一部ではありません。診断コードを言うので、このクラスをtomcatのexvisting jvmにロードしますそれを実行して、それは可能ですか?デバッガは元のクラスがすでにjvmにロードされている場合にのみ役立ちます – redzedi

1

この質問と回答を読んだ後、私は自分自身の小さなユーティリティをロールバックすることを決定した:remoteJunit

それは、軽量でかつ動的にサーバーJVMにクライアントからクラスをロードします。通信にHTTPを使用します。