SynchronousBoundaryGuard.java

package com.ecommerce.platform.common.transaction;

import org.springframework.transaction.support.TransactionSynchronizationManager;

import java.util.Objects;

/**
 * Prevents a synchronous network dependency from accidentally running while
 * database locks and an owner-domain transaction are active.
 */
public final class SynchronousBoundaryGuard {

    private SynchronousBoundaryGuard() {
    }

    public static void requireOutsideTransaction(String boundary) {
        Objects.requireNonNull(boundary, "boundary");
        if (TransactionSynchronizationManager.isActualTransactionActive()) {
            throw new IllegalStateException(
                    "Synchronous boundary must execute outside a local transaction: " + boundary);
        }
    }
}