# Annotation Interface MetadataDefinition

@Retention(RUNTIME) @Target(TYPE) public @interface MetadataDefinition
Meta annotation for defining new types of event metadata.

In the following example, a transaction event is defined with two user-defined annotations, `@Severity` and `@TransactionId`.

    @MetadataDefinition
    @Label("Severity")
    @Description("Value between 0 and 100 that indicates severity. 100 is most severe.")
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.TYPE })
    public @interface Severity {
        int value() default 50;
    }

    @MetadataDefinition
    @Label("Transaction Id")
    @Relational
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.FIELD })
    public @interface TransactionId {
    }

    @Severity(80)
    @Label("Transaction Blocked")
    class TransactionBlocked extends Event {
        @TransactionId
        @Label("Transaction")
        long transactionId1;

        @TransactionId
        @Label("Transaction Blocker")
        long transactionId2;
    }

Adding `@MetadataDefinition` to the declaration of `@Severity` and `@TransactionId` ensures the information is saved by Flight Recorder.

Since:
  9