From 7449619fcaebb9cd669e491d578fc1c1099b05fb Mon Sep 17 00:00:00 2001 From: Henning Schmiedehausen Date: Fri, 7 Feb 2014 13:39:41 -0800 Subject: [PATCH 1/2] Implement Closeable for Jedis, BinaryJedis etc. This allows a Jedis object to participate in try-with-resources when using Java 7+. This change is fully backwards compatible to Java 6 and previous releases of the Jedis client. --- src/main/java/redis/clients/jedis/BinaryClient.java | 6 ++++++ src/main/java/redis/clients/jedis/BinaryJedis.java | 8 +++++++- src/main/java/redis/clients/jedis/Connection.java | 8 +++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 26cd8f2..d371d28 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -948,6 +948,12 @@ public class BinaryClient extends Connection { super.disconnect(); } + @Override + public void close() { + db = 0; + super.close(); + } + public void resetState() { if (isInMulti()) discard(); diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 991d046..5b4fdd7 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -2,6 +2,7 @@ package redis.clients.jedis; import static redis.clients.jedis.Protocol.toByteArray; +import java.io.Closeable; import java.net.URI; import java.util.ArrayList; import java.util.HashSet; @@ -19,7 +20,7 @@ import redis.clients.util.SafeEncoder; public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, - BinaryScriptingCommands { + BinaryScriptingCommands, Closeable { protected Client client = null; public BinaryJedis(final String host) { @@ -1735,6 +1736,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, return client.getStatusCodeReply(); } + @Override + public void close() { + client.close(); + } + /** * Sort a Set or a List. *

diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index 74bcc09..e913d68 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -1,5 +1,6 @@ package redis.clients.jedis; +import java.io.Closeable; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; @@ -15,7 +16,7 @@ import redis.clients.util.RedisInputStream; import redis.clients.util.RedisOutputStream; import redis.clients.util.SafeEncoder; -public class Connection { +public class Connection implements Closeable { private String host; private int port = Protocol.DEFAULT_PORT; private Socket socket; @@ -143,6 +144,11 @@ public class Connection { } } + @Override + public void close() { + disconnect(); + } + public void disconnect() { if (isConnected()) { try { From fcef705a6ca347593deb2f605625a2960c29a7da Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Tue, 11 Feb 2014 12:31:32 -0500 Subject: [PATCH 2/2] Add unit tests to Closeable --- .../java/redis/clients/jedis/tests/ConnectionTest.java | 7 +++++++ src/test/java/redis/clients/jedis/tests/JedisTest.java | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java index 9cbaa12..d6175a5 100644 --- a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java +++ b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java @@ -41,4 +41,11 @@ public class ConnectionTest extends Assert { client.setTimeoutInfinite(); } + @Test + public void checkCloseable() { + client.setHost("localhost"); + client.setPort(6379); + client.connect(); + client.close(); + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/JedisTest.java b/src/test/java/redis/clients/jedis/tests/JedisTest.java index b123b05..3f5cdf1 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisTest.java @@ -8,6 +8,7 @@ import java.util.Map; import org.junit.Test; +import redis.clients.jedis.BinaryJedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Protocol; @@ -91,4 +92,12 @@ public class JedisTest extends JedisCommandTestBase { assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); } + + @Test + public void checkCloseable() { + jedis.close(); + BinaryJedis bj = new BinaryJedis("localhost"); + bj.connect(); + bj.close(); + } } \ No newline at end of file