From 277b295cd0ee8c57f6817eb261f685152af2ec69 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 6 Jun 2019 14:18:22 +0200 Subject: [PATCH] [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. --- .../org/jooq/impl/TransactionListeners.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/TransactionListeners.java b/jOOQ/src/main/java/org/jooq/impl/TransactionListeners.java index a810e766b9..7ca60dd945 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TransactionListeners.java +++ b/jOOQ/src/main/java/org/jooq/impl/TransactionListeners.java @@ -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); }