diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 39a0f9b00b..5a199a5290 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -373,7 +373,17 @@ public void close() { // Legacy public Transaction multi() { - transaction = new Transaction(this); + transaction = new Transaction(getConnection()) { + @Override + protected void onAfterExec() { + resetState(); + } + + @Override + protected void onAfterDiscard() { + resetState(); + } + }; return transaction; } diff --git a/src/main/java/redis/clients/jedis/Transaction.java b/src/main/java/redis/clients/jedis/Transaction.java index 3b7398913f..e072ab9c23 100644 --- a/src/main/java/redis/clients/jedis/Transaction.java +++ b/src/main/java/redis/clients/jedis/Transaction.java @@ -20,8 +20,6 @@ public class Transaction extends AbstractTransaction { private final Queue> pipelinedResponses = new LinkedList<>(); - private Jedis jedis = null; - protected final Connection connection; private final boolean closeConnection; @@ -29,13 +27,6 @@ public class Transaction extends AbstractTransaction { private boolean inWatch = false; private boolean inMulti = false; - // Legacy - to support Jedis.multi() - // TODO: Should be package private ?? - public Transaction(Jedis jedis) { - this(jedis.getConnection()); - this.jedis = jedis; - } - /** * Creates a new transaction. * @@ -211,9 +202,7 @@ public List exec() { inMulti = false; inWatch = false; pipelinedResponses.clear(); - if (jedis != null) { - jedis.resetState(); - } + onAfterExec(); } } @@ -238,9 +227,23 @@ public String discard() { inMulti = false; inWatch = false; pipelinedResponses.clear(); - if (jedis != null) { - jedis.resetState(); - } + onAfterDiscard(); } } + + /** + * Hook method called after exec() completes (successfully or with error). + * Subclasses can override this to perform cleanup actions. + */ + protected void onAfterExec() { + // Default implementation does nothing + } + + /** + * Hook method called after discard() completes (successfully or with error). + * Subclasses can override this to perform cleanup actions. + */ + protected void onAfterDiscard() { + // Default implementation does nothing + } }