[jOOQ/jOOQ#8746] Add support for reversing the listener invocation order

In some cases, it may make sense to support reversing the invocation
order for some listener lists, e.g. for TransactionListener (in this
commit), depending on whether we're calling a [action]Start() or an
[action]End() event.
This commit is contained in:
Lukas Eder 2019-06-06 14:18:22 +02:00
parent 0fba3e7564
commit 277b295cd0

View File

@ -37,10 +37,13 @@
*/
package org.jooq.impl;
import java.util.Arrays;
import org.jooq.Configuration;
import org.jooq.TransactionContext;
import org.jooq.TransactionListener;
import org.jooq.TransactionListenerProvider;
import org.jooq.conf.InvocationOrder;
/**
* @author Lukas Eder
@ -59,37 +62,49 @@ class TransactionListeners implements TransactionListener {
@Override
public final void beginStart(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerStartInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.beginStart(ctx);
}
@Override
public final void beginEnd(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerEndInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.beginEnd(ctx);
}
@Override
public final void commitStart(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerStartInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.commitStart(ctx);
}
@Override
public final void commitEnd(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerEndInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.commitEnd(ctx);
}
@Override
public final void rollbackStart(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerStartInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.rollbackStart(ctx);
}
@Override
public final void rollbackEnd(TransactionContext ctx) {
for (TransactionListener listener : listeners)
for (TransactionListener listener : ctx.settings().getTransactionListenerEndInvocationOrder() == InvocationOrder.DEFAULT
? Arrays.asList(listeners)
: Tools.reverseIterable(listeners))
listener.rollbackEnd(ctx);
}