KaumeiTx.java

/*
 * SPDX-FileCopyrightText: 2026 kaumei.io
 * SPDX-License-Identifier: Apache-2.0
 */
package io.kaumei.jdbc.annotation;

import java.lang.annotation.*;

/**
 * Declares transaction handling for a type or method.
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface KaumeiTx {

    /**
     * Transaction type. Defaults to {@link Type#MANDATORY} so transaction boundaries must be
     * declared explicitly.
     */
    Type value() default Type.MANDATORY;

    /**
     * Required transaction isolation.
     */
    Isolation isolation() default Isolation.DEFAULT;

    /**
     * Required read-only mode.
     */
    ReadOnly readOnly() default ReadOnly.DEFAULT;

    /**
     * Exception types that require rollback.
     */
    Class<? extends Throwable>[] rollbackOn() default {};

    /**
     * Exception types that do not require rollback.
     */
    Class<? extends Throwable>[] dontRollbackOn() default {};

    enum Type {
        REQUIRED,
        REQUIRES_NEW,
        MANDATORY,
        SUPPORTS,
        NOT_SUPPORTED,
        NEVER
    }

    enum Isolation {
        DEFAULT,
        READ_UNCOMMITTED,
        READ_COMMITTED,
        REPEATABLE_READ,
        SERIALIZABLE
    }

    enum ReadOnly {
        DEFAULT,
        READ_ONLY,
        READ_WRITE
    }
}