16 手動でのイベントの登録と登録解除
イベントは、イベント・クラスが初期化されると、デフォルトで自動的に登録されます。また、@Registered注釈を使用して手動でイベントを登録することも可能です。これを行う1つの理由は、イベントが初期化されるセキュリティ・コンテキストの制御です。
@Enabled注釈と@Registered注釈の違いは、イベントが登録解除されると、フィールド・レイアウトなどのメタデータを検査に使用できなくなることです。FlightRecorder::registerを呼び出すと、Java Management Extensions (JMX)クライアントなどに対して、構成用にイベント・クラスを表示できるようになります。
RegistrationSample.java
の例でこれを示します:
import jdk.jfr.Event;
import jdk.jfr.FlightRecorder;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Registered;
public class RegistrationSample {
@Name("com.oracle.Message")
@Label("Message")
@Registered(false)
static class Message extends Event {
String message;
}
public static void main(String... args) {
Message event1 = new Message();
event1.message = "Not registered, so you won't see this";
event1.commit();
FlightRecorder.register(Message.class);
Message event2 = new Message();
event2.message = "Now registered, so you will see this!";
event2.commit();
FlightRecorder.unregister(Message.class);
Message event3 = new Message();
event3.message = "Not registered again, so you won't see this";
event3.commit();
}
}