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();
    }
}