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

com.gruelbox.transactionoutbox.ThreadLocalJooqTransactionManager Maven / Gradle / Ivy

package com.gruelbox.transactionoutbox;

import lombok.extern.slf4j.Slf4j;
import org.jooq.Configuration;
import org.jooq.DSLContext;

/**
 * jOOQ transaction manager which uses thread-local context. Best used with {@link
 * org.jooq.impl.ThreadLocalTransactionProvider}. Relies on a {@link JooqTransactionListener} being
 * attached to the {@link DSLContext}.
 */
@Slf4j
final class ThreadLocalJooqTransactionManager
    extends AbstractThreadLocalTransactionManager
    implements JooqTransactionManager {

  private final DSLContext parentDsl;

  ThreadLocalJooqTransactionManager(DSLContext parentDsl) {
    this.parentDsl = parentDsl;
  }

  @Override
  public  T inTransactionReturnsThrows(
      ThrowingTransactionalSupplier work) {
    DSLContext dsl =
        peekTransaction()
            .map(SimpleTransaction::context)
            .map(Configuration.class::cast)
            .map(Configuration::dsl)
            .orElse(parentDsl);
    return dsl.transactionResult(
        config ->
            config
                .dsl()
                .connectionResult(connection -> work.doWork(peekTransaction().orElseThrow())));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy