diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java index ee4271b47..08fe265b0 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java @@ -145,6 +145,11 @@ public class LettuceConnection implements RedisConnection { } catch (RuntimeException ex) { throw convertLettuceAccessException(ex); } + + if (subscription != null) { + subscription.doClose(); + subscription = null; + } } public boolean isClosed() { @@ -179,7 +184,7 @@ public class LettuceConnection implements RedisConnection { List results = new ArrayList(ppline.size()); Exception problem = null; - + if (done) { for (Command cmd : ppline) { if (cmd.getOutput().hasError()) { diff --git a/src/test/java/org/springframework/data/redis/listener/PubSubTestParams.java b/src/test/java/org/springframework/data/redis/listener/PubSubTestParams.java index 6badf6eb8..8d087fe2c 100644 --- a/src/test/java/org/springframework/data/redis/listener/PubSubTestParams.java +++ b/src/test/java/org/springframework/data/redis/listener/PubSubTestParams.java @@ -21,6 +21,7 @@ import java.util.Collection; import org.springframework.data.redis.Person; import org.springframework.data.redis.SettingsUtils; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.rjc.RjcConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; @@ -52,7 +53,6 @@ public class PubSubTestParams { personTemplate.afterPropertiesSet(); // create RJC - RjcConnectionFactory rjcConnFactory = new RjcConnectionFactory(); rjcConnFactory.setUsePool(false); rjcConnFactory.setPort(SettingsUtils.getPort()); @@ -64,9 +64,21 @@ public class PubSubTestParams { personTemplateRJC.setConnectionFactory(rjcConnFactory); personTemplateRJC.afterPropertiesSet(); + // add Lettuce + LettuceConnectionFactory lettuceConnFactory = new LettuceConnectionFactory(); + lettuceConnFactory.setPort(SettingsUtils.getPort()); + lettuceConnFactory.setHostName(SettingsUtils.getHost()); + lettuceConnFactory.afterPropertiesSet(); + + RedisTemplate stringTemplateLtc = new StringRedisTemplate(lettuceConnFactory); + RedisTemplate personTemplateLtc = new RedisTemplate(); + personTemplateLtc.setConnectionFactory(lettuceConnFactory); + personTemplateLtc.afterPropertiesSet(); + return Arrays.asList(new Object[][] { { stringFactory, stringTemplate }, { personFactory, personTemplate }, - { stringFactory, stringTemplateRJC }, { personFactory, personTemplateRJC } + { stringFactory, stringTemplateRJC }, { personFactory, personTemplateRJC }, + { stringFactory, stringTemplateLtc }, { personFactory, personTemplateLtc } }); } } diff --git a/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java b/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java index 35bceb1e9..3b1001a7f 100644 --- a/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java +++ b/src/test/java/org/springframework/data/redis/support/collections/CollectionTestParams.java @@ -22,6 +22,7 @@ import org.springframework.data.redis.Person; import org.springframework.data.redis.SettingsUtils; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.connection.jredis.JredisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.rjc.RjcConnectionFactory; import org.springframework.data.redis.connection.srp.SrpConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -162,6 +163,32 @@ public abstract class CollectionTestParams { jsonPersonTemplateSRP.setConnectionFactory(srConnFactory); jsonPersonTemplateSRP.afterPropertiesSet(); + // Lettuce + LettuceConnectionFactory lettuceConnFactory = new LettuceConnectionFactory(); + lettuceConnFactory.setPort(SettingsUtils.getPort()); + lettuceConnFactory.setHostName(SettingsUtils.getHost()); + lettuceConnFactory.afterPropertiesSet(); + + RedisTemplate stringTemplateLtc = new StringRedisTemplate(srConnFactory); + RedisTemplate personTemplateLtc = new RedisTemplate(); + personTemplateLtc.setConnectionFactory(lettuceConnFactory); + personTemplateLtc.afterPropertiesSet(); + + RedisTemplate xstreamStringTemplateLtc = new RedisTemplate(); + xstreamStringTemplateLtc.setConnectionFactory(lettuceConnFactory); + xstreamStringTemplateLtc.setDefaultSerializer(serializer); + xstreamStringTemplateLtc.afterPropertiesSet(); + + RedisTemplate xstreamPersonTemplateLtc = new RedisTemplate(); + xstreamPersonTemplateLtc.setValueSerializer(serializer); + xstreamPersonTemplateLtc.setConnectionFactory(lettuceConnFactory); + xstreamPersonTemplateLtc.afterPropertiesSet(); + + RedisTemplate jsonPersonTemplateLtc = new RedisTemplate(); + jsonPersonTemplateLtc.setValueSerializer(jsonSerializer); + jsonPersonTemplateLtc.setConnectionFactory(lettuceConnFactory); + jsonPersonTemplateLtc.afterPropertiesSet(); + return Arrays.asList(new Object[][] { { stringFactory, stringTemplate }, { stringFactory, stringTemplateRJC }, { personFactory, personTemplateRJC }, //{ stringFactory, stringTemplateJR }, @@ -172,11 +199,18 @@ public abstract class CollectionTestParams { //{ personFactory, xstreamPersonTemplateJR }, { personFactory, jsonPersonTemplate }, //{ personFactory, jsonPersonTemplateJR }, + // rjc { stringFactory, xstreamStringTemplateRJC }, { personFactory, xstreamPersonTemplateRJC }, { personFactory, jsonPersonTemplateRJC }, + // srp { stringFactory, stringTemplateSRP },{ personFactory, personTemplateSRP }, { stringFactory, xstreamStringTemplateSRP }, { personFactory, xstreamPersonTemplateSRP }, - { personFactory, jsonPersonTemplateSRP } + { personFactory, jsonPersonTemplateSRP }, + // lettuce + { stringFactory, stringTemplateLtc }, { personFactory, personTemplateLtc }, + { stringFactory, xstreamStringTemplateLtc }, { personFactory, xstreamPersonTemplateLtc }, + { personFactory, jsonPersonTemplateLtc } + }); } }