All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gruelbox.transactionoutbox.spi.AbstractThreadLocalTransactionManager Maven / Gradle / Ivy

There is a newer version: 6.0.553
Show newest version
package com.gruelbox.transactionoutbox.spi;

import com.gruelbox.transactionoutbox.*;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class AbstractThreadLocalTransactionManager
    implements ThreadLocalContextTransactionManager {

  private final ThreadLocal> transactions = ThreadLocal.withInitial(LinkedList::new);

  @Override
  public final void inTransaction(Runnable runnable) {
    ThreadLocalContextTransactionManager.super.inTransaction(runnable);
  }

  @Override
  public final void inTransaction(TransactionalWork work) {
    ThreadLocalContextTransactionManager.super.inTransaction(work);
  }

  @Override
  public final  T inTransactionReturns(TransactionalSupplier supplier) {
    return ThreadLocalContextTransactionManager.super.inTransactionReturns(supplier);
  }

  @Override
  public final  void inTransactionThrows(ThrowingTransactionalWork work)
      throws E {
    ThreadLocalContextTransactionManager.super.inTransactionThrows(work);
  }

  @Override
  public  T requireTransactionReturns(
      ThrowingTransactionalSupplier work) throws E, NoTransactionActiveException {
    return work.doWork(peekTransaction().orElseThrow(NoTransactionActiveException::new));
  }

  public final TX pushTransaction(TX transaction) {
    transactions.get().push(transaction);
    return transaction;
  }

  public final TX popTransaction() {
    TX result = transactions.get().pop();
    if (transactions.get().isEmpty()) {
      transactions.remove();
    }
    return result;
  }

  public Optional peekTransaction() {
    return Optional.ofNullable(transactions.get().peek());
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy