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

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

Go to download

A safe implementation of the transactional outbox pattern for Java (jOOQ extension library)

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

import com.gruelbox.transactionoutbox.ThrowingTransactionalSupplier;
import com.gruelbox.transactionoutbox.spi.AbstractThreadLocalTransactionManager;
import com.gruelbox.transactionoutbox.spi.SimpleTransaction;
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