Java JVMを再起動せずに、インストルメンテーションコードをJavaクラスファイルに複数回動的に追加および削除したいとします。これは可能ですか?すでに実行中のインスタンスのJavaクラスのコードを変更するにはどうすればよいですか?
4
A
答えて
7
java.lang.instrument
package、特にClassFileTransformer
をご覧ください。
はここで良い記事です:Instrumentation: Modify Applications with Java 5 Class File Transformations
実際のバイトコード生成のために、私はあなたがそのようなBCELやASMなどのライブラリを見てお勧めします。
JRebelフレームワークでも興味があります。メソッド本体の実装を変更し、メソッドとコンストラクタの追加/削除、フィールドの追加/削除、クラスの追加/削除などをすべて実行時に行うことができます。
2
実行時に別のヘルパークラス(戦略デザインパターン)にスワップされる可能性のあるヘルパークラスを使用できます。
0
また、ByteManをJBossから参照してください。これは同じJavaエージェントメカニズムを使用し、特に修正スクリプトのインストールとアンインストールをサポートしています(を参照)。
$ jps
15295 Jps
4884 main
私たちは、その後、実行中のプロセスにByteManインストールすることができます:たとえば
我々はいくつかの実行中のJavaプロセスを持って言うことができます。以下は、チュートリアルの要約版がある
$ bminstall.sh 4884
ます
$ youreditor thread.btm
RULE trace thread start
CLASS java.lang.Thread
METHOD start()
IF true
DO traceln("*** start for thread: "+ $0.getName())
ENDRULE
次に、ByeManスクリプトをインストールすることができますスクリプトを使って:
$ bmsubmit.sh -l thread.btm
は削除するには、次の
$ bmsubmit.sh
は、Windows上で実行されている場合は、.SHを交換:
$ bmsubmit.sh -u thread.btm
は現在、引数を指定せずにそれを発行するだけで実行されているものを一覧表示するには各コマンドで.batを使用します。
1
Jrebelをホット・デプロイメントに使用できます。サーバーを再起動せずにコードを変更することができます。
関連する問題
- 1. デバッグモードで実行中にJavaコードを変更するにはどうすればよいですか?
- 2. 実行中のigniteインスタンスでキャッシュ設定を変更するにはどうすればよいですか?
- 3. vb6コードで実行時にocxのインスタンスをインスタンス化するにはどうすればよいですか?
- 4. Pythonで実行中にスレッドに変数の変更を渡すにはどうすればよいですか?
- 5. プログラムの実行中にChromeDriverの設定を変更するにはどうすればよいですか?
- 6. プログラムの実行中にQPyLineEditの内容を変更するにはどうすればよいですか?
- 7. セッションの実行中にAVCaptureMovieFileOutputビデオの方向を変更するにはどうすればよいですか?
- 8. プログラムの実行中にメニュー内のテキストを変更するにはどうすればよいですか?
- 9. Javaで実行中のアプリケーションのクラスを置き換えるにはどうすればいいですか?
- 10. 実行時にオートコンプリートのHTMLコードを動的に変更するにはどうすればよいですか?
- 11. クラスのすべてのインスタンスのプロパティの値を変更するにはどうすればよいですか?
- 12. ゲームの実行中に変数を更新するにはどうすればよいですか?
- 13. メインスレッドの実行中に制御プロパティを変更するにはどうすればよいですか?
- 14. 実行中のチームシップのデータベースを変更するにはどうすればよいですか?
- 15. 実行中/既存のWindowsインスタンスからAMIを作成するにはどうすればよいですか?
- 16. riak-shellの実行中のインスタンスに戻るにはどうすればよいですか?
- 17. アプリのインストール中に特定のコードを実行するにはどうすればよいですか?
- 18. このコードを変更するにはどうすればよいですか?
- 19. そのクラスのインスタンスからクラスのインスタンスを作成するにはどうすればよいですか?
- 20. Antからの相対パスでJavaクラスを実行するにはどうすればよいですか?
- 21. 実行中のBrowsersyncインスタンスを切断するにはどうすればよいですか?
- 22. 実行時に "アプリケーション"クラスを変更するにはどうすればよいですか?
- 23. RailsのAmazon EC2インスタンスで長期実行ジョブを実行するにはどうすればよいですか?
- 24. 実行時にjavascriptコードを変更するにはどうすればよいですか?
- 25. Colaboratoryでコードを実行するにはどうすればよいですか?
- 26. 通常の実装でトラックボールの中心を変更するにはどうすればよいですか?
- 27. Java - 呼び出し元クラスのメソッド変数を変更するにはどうすればよいですか?
- 28. テストクラスの実行中にマネージトリガの実行を停止するにはどうすればよいですか?
- 29. Javaでタイマを実行するにはどうすればよいですか?
- 30. 実行時にJavaクラスのコピーを作成するにはどうすればよいですか?
いいえ、これは深刻なセキュリティ上および設計上の欠陥です。 – leppie
- "これは可能ですか?"、 "いいえ、それは設計上の欠陥です。" ??? – aioobe
@leppieそれは可能ですが、必ずしもセキュリティ上の瑕疵ではありません(SecurityManager'sのことを聞いたことがあります)、それは必ずしも設計上の欠陥(AspectJについて聞いたことがありません) – adamax