From 3f013df4268e48e927b2bebb4d4fe92ccf112e1f Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Thu, 27 Jan 2011 20:14:44 +0200 Subject: [PATCH] DATAKV-26 + add String connection to RedisTemplate --- .../connection/DefaultStringRedisConnection.java | 1 - .../data/keyvalue/redis/core/RedisTemplate.java | 14 ++++++++++++-- .../keyvalue/redis/core/StringRedisTemplate.java | 13 ++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java index b5c028c8c..5766db582 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java @@ -45,7 +45,6 @@ public class DefaultStringRedisConnection implements StringRedisConnection { */ public DefaultStringRedisConnection(RedisConnection connection) { Assert.notNull(connection, "connection is required"); - Assert.notNull(connection, "serializer is required"); this.delegate = connection; this.serializer = new StringRedisSerializer(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 1dad831c0..8f80eaf09 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -160,13 +160,14 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation RedisConnectionFactory factory = getConnectionFactory(); RedisConnection conn = RedisConnectionUtils.getConnection(factory); + boolean existingConnection = TransactionSynchronizationManager.hasResource(factory); + preProcessConnection(conn, existingConnection); + boolean pipelineStatus = conn.isPipelined(); if (pipeline && !pipelineStatus) { conn.openPipeline(); } - boolean existingConnection = TransactionSynchronizationManager.hasResource(factory); - try { RedisConnection connToExpose = (exposeConnection ? conn : createRedisConnectionProxy(conn)); T result = action.doInRedis(connToExpose); @@ -189,6 +190,15 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation new CloseSuppressingInvocationHandler(pm)); } + /** + * Processes the connection (before any settings are executed on it). Default implementation returns the connection as is. + * + * @param connection redis connection + */ + protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) { + return connection; + } + protected T postProcessResult(T result, RedisConnection conn, boolean existingConnection) { return result; } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java index 3ffe0cc51..6a364b51f 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/StringRedisTemplate.java @@ -15,7 +15,10 @@ */ package org.springframework.data.keyvalue.redis.core; +import org.springframework.data.keyvalue.redis.connection.DefaultStringRedisConnection; +import org.springframework.data.keyvalue.redis.connection.RedisConnection; import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory; +import org.springframework.data.keyvalue.redis.connection.StringRedisConnection; import org.springframework.data.keyvalue.redis.serializer.RedisSerializer; import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; @@ -24,6 +27,9 @@ import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; * this class provides a dedicated class that minimizes configuration of its more generic * {@link RedisTemplate template} especially in terms of serializers. * + *

Note that this template exposes the {@link RedisConnection} used by the {@link RedisCallback} + * as a {@link StringRedisConnection}. + * * @author Costin Leau */ public class StringRedisTemplate extends RedisTemplate { @@ -52,4 +58,9 @@ public class StringRedisTemplate extends RedisTemplate { setHashKeySerializer(stringSerializer); setHashValueSerializer(stringSerializer); } -} + + @Override + protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) { + return new DefaultStringRedisConnection(connection); + } +} \ No newline at end of file