
com.gruelbox.transactionoutbox.jooq.ThreadLocalJooqTransactionManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of transactionoutbox-jooq Show documentation
Show all versions of transactionoutbox-jooq Show documentation
A safe implementation of the transactional outbox pattern for Java (jOOQ extension library)
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