BT

Byteman 2.0.0: バイトコード操作、テスティング、フォールトインジェクション、ロギング

| 作者: Bienvenido David III フォローする 0 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2012年2月5日. 推定読書時間: 3 分 |

原文(投稿日:2012/01/30)へのリンク

JBossはByteman 2.0.0リリースした。これはオープンソースのJavaバイトコード操作ツールで、GNU LGPL 2.1でライセンスされている。Bytemanはコードのテスト、トレース、モニタリングを支援するJavaエージェントであり、開発者はこれを使って、ロード時や実行中にJavaアプリケーションの動作を変更することができる。これはアプリケーションの書き直しや再コンパイルをすることなく動作し、StringやThreadといったJavaプラットフォームクラスを修正することまで可能だ。

以下にByteman 2.0.0の新機能を挙げる。

  • ファイルおよびラインに関するデバッグ情報。コンパイルされたBytemanルールにファイルおよび行数の情報が含まれるようになった。これによりデバッガは実行時にルール経由でステップ実行できるようになる。
  • @Listenerを使ったBMunitのTestNGインポート。TestNGクラスはBMUnitの振る舞いを@Listenerアノテーションを使ってインポートするようになった。以前のバージョンはBMNGRunnerをサブクラスする必要があったが、これだとテストクラスがすでに別のテストクラスを拡張しているときに競合が起こっていた。
  • Throw Errorルール。Bytemanはたとえターゲットクラスによって宣言されていなくても、throw Errorルールを許すようになった。
  • バグ修正。この最新リリースでは、1.6.0リリースで見つかった8つのバグが修正されている。

 

Bytemanでは、シンプルなEvent Condition Action (ECA)スクリプト言語を使って、どこで、いつ、どのように、ターゲットのJavaコードが変換されるべきかを指定する。インジェクトされたコードが実行されてもコードの実行は継続するが、インジェクトされたコードが例外をスローしたり、すぐに強制リターンしてもよい。以下に単純なBytemanスクリプトの例を挙げる。

 

# script.btm
RULE trace main entry
CLASS App
METHOD main
AT ENTRY
IF true
DO traceln("entering main")
ENDRULE

 

このスクリプトでは、App.main()メソッドの開始時に "entering main" を出力するよう、Bytemanに指示している。アプリケーションでBytemanを有効にするためには、JavaエージェントJVM引数を追加して、スクリプトを指定する。

 

-javaagent:<BYTEMAN-DIR>\lib\byteman.jar=script:script.btm

 

bminstall.shを使って、すでに動作しているアプリケーションにBytemanを追加することも可能だ。もっと複雑なルールやコードインジェクションには、ビルトインのByteman Rule Helperを使ったり、プラグインとして自作のPOJOを作ることもできる。

Bytemanと同様、AOPもクラスのインスツルメントやコードのインジェクトができるのだが、Bytemanを使えばクラスを作成したりコードをコンパイルする必要がない。コードを書くときに予め考慮しておく必要もなく、後からインジェクトするコードを決めることができる。また、Bytemanは使いやすくて変更しやすく、特にテストやアドホックなログ用途に適している。

まずはBytemanバイナリをダウンロードして、これをJavaエージェントとしてアプリケーションに指定しよう。BytemanにはJDK 6以上が必要であることに注意しよう。詳しくは、Byteman プログラマーズガイドを読むこと。このリリースに関する詳しい情報はByteman 2.0.0のリリースノートに書かれている。公式Byteman ドキュメントフォーラムを訪れてもよいだろう。ソースコードはGitHubから入手可能だ。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT