Skip to content

Commit f79d4d3

Browse files
committed
redis: RedisSessionStore requires a redis pool
- Fixes #2420 - Fixes #2285
1 parent b727a0b commit f79d4d3

File tree

6 files changed

+303
-60
lines changed

6 files changed

+303
-60
lines changed

docs/asciidoc/modules/redis.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ The Redis module provides a HTTP Session Store.
137137
import io.jooby.redis.RedisModule;
138138
import io.jooby.redis.RedisSessionStore;
139139
140-
import io.lettuce.core.api.StatefulRedisConnection;
140+
import io.lettuce.core.RedisClient;
141141
142142
{
143143
install(new RedisModule()); <1>
144144
145-
setSessionStore(new RedisSessionStore(require(StatefulRedisConnection.class))); <2>
145+
setSessionStore(new RedisSessionStore(require(RedisClient.class))); <2>
146146
147147
get("/", ctx -> {
148148
Session httpSession = ctx.session(); <3>
@@ -157,12 +157,12 @@ import io.lettuce.core.api.StatefulRedisConnection;
157157
import io.jooby.redis.RedisModule
158158
import io.jooby.redis.RedisSessionStore
159159
160-
import io.lettuce.core.api.StatefulRedisConnection
160+
import io.lettuce.core.RedisClient
161161
162162
{
163163
install(RedisModule()) <1>
164164
165-
sessionStore = RedisSessionStore(require(StatefulRedisConnection::class)) <2>
165+
sessionStore = RedisSessionStore(require(RedisClient::class)) <2>
166166
167167
get("/") {
168168
val httpSession = ctx.session() <3>

modules/jooby-bom/pom.xml

Lines changed: 179 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@
2121
<archetype-packaging.version>3.2.0</archetype-packaging.version>
2222
<asm.version>9.1</asm.version>
2323
<auto-service.version>1.0</auto-service.version>
24-
<aws-java-sdk.version>1.11.916</aws-java-sdk.version>
24+
<aws-java-sdk.version>1.12.57</aws-java-sdk.version>
2525
<bucket4j-core.version>6.0.1</bucket4j-core.version>
2626
<caffeine.version>2.8.8</caffeine.version>
2727
<checkstyle.version>8.42</checkstyle.version>
2828
<commons-email.version>1.5</commons-email.version>
2929
<commons-io.version>2.8.0</commons-io.version>
30+
<commons-pool2.version>2.11.1</commons-pool2.version>
3031
<compile-testing.version>0.19</compile-testing.version>
3132
<config.version>1.4.1</config.version>
3233
<conscrypt.version>2.5.2</conscrypt.version>
@@ -58,7 +59,7 @@
5859
<jdbi.version>3.20.0</jdbi.version>
5960
<jetty.version>9.4.43.v20210629</jetty.version>
6061
<jfiglet.version>0.0.8</jfiglet.version>
61-
<jmespath-java.version>1.11.916</jmespath-java.version>
62+
<jmespath-java.version>1.12.57</jmespath-java.version>
6263
<jooby-maven-plugin.version>2.10.1-SNAPSHOT</jooby-maven-plugin.version>
6364
<jooby.version>2.10.1-SNAPSHOT</jooby.version>
6465
<jsonwebtoken.version>0.11.2</jsonwebtoken.version>
@@ -98,7 +99,7 @@
9899
<mockito.version>3.10.0</mockito.version>
99100
<mojo-executor.version>2.3.1</mojo-executor.version>
100101
<mysql-connector-java.version>8.0.25</mysql-connector-java.version>
101-
<netty.version>4.1.66.Final</netty.version>
102+
<netty.version>4.1.68.Final</netty.version>
102103
<nexus-staging-maven-plugin.version>1.6.8</nexus-staging-maven-plugin.version>
103104
<node.version>v12.19.0</node.version>
104105
<okhttp.version>4.9.1</okhttp.version>
@@ -119,7 +120,7 @@
119120
<thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
120121
<truth.version>1.1.2</truth.version>
121122
<unbescape.version>1.1.6.RELEASE</unbescape.version>
122-
<undertow.version>2.2.8.Final</undertow.version>
123+
<undertow.version>2.2.10.Final</undertow.version>
123124
<versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
124125
<weld.version>3.1.5.Final</weld.version>
125126
<yasson.version>1.0.9</yasson.version>
@@ -1045,6 +1046,12 @@
10451046
<version>${lettuce.version}</version>
10461047
<type>jar</type>
10471048
</dependency>
1049+
<dependency>
1050+
<groupId>org.apache.commons</groupId>
1051+
<artifactId>commons-pool2</artifactId>
1052+
<version>${commons-pool2.version}</version>
1053+
<type>jar</type>
1054+
</dependency>
10481055
<dependency>
10491056
<groupId>org.apache.kafka</groupId>
10501057
<artifactId>kafka-clients</artifactId>
@@ -1087,6 +1094,174 @@
10871094
<version>${plexus-utils.version}</version>
10881095
<type>jar</type>
10891096
</dependency>
1097+
<dependency>
1098+
<groupId>com.amazonaws</groupId>
1099+
<artifactId>aws-java-sdk-memorydb</artifactId>
1100+
<version>${aws-java-sdk.version}</version>
1101+
<type>jar</type>
1102+
</dependency>
1103+
<dependency>
1104+
<groupId>com.amazonaws</groupId>
1105+
<artifactId>aws-java-sdk-snowdevicemanagement</artifactId>
1106+
<version>${aws-java-sdk.version}</version>
1107+
<type>jar</type>
1108+
</dependency>
1109+
<dependency>
1110+
<groupId>com.amazonaws</groupId>
1111+
<artifactId>aws-java-sdk-chimesdkidentity</artifactId>
1112+
<version>${aws-java-sdk.version}</version>
1113+
<type>jar</type>
1114+
</dependency>
1115+
<dependency>
1116+
<groupId>com.amazonaws</groupId>
1117+
<artifactId>aws-java-sdk-chimesdkmessaging</artifactId>
1118+
<version>${aws-java-sdk.version}</version>
1119+
<type>jar</type>
1120+
</dependency>
1121+
<dependency>
1122+
<groupId>com.amazonaws</groupId>
1123+
<artifactId>aws-java-sdk-route53recoverycluster</artifactId>
1124+
<version>${aws-java-sdk.version}</version>
1125+
<type>jar</type>
1126+
</dependency>
1127+
<dependency>
1128+
<groupId>com.amazonaws</groupId>
1129+
<artifactId>aws-java-sdk-route53recoverycontrolconfig</artifactId>
1130+
<version>${aws-java-sdk.version}</version>
1131+
<type>jar</type>
1132+
</dependency>
1133+
<dependency>
1134+
<groupId>com.amazonaws</groupId>
1135+
<artifactId>aws-java-sdk-route53recoveryreadiness</artifactId>
1136+
<version>${aws-java-sdk.version}</version>
1137+
<type>jar</type>
1138+
</dependency>
1139+
<dependency>
1140+
<groupId>com.amazonaws</groupId>
1141+
<artifactId>aws-java-sdk-proton</artifactId>
1142+
<version>${aws-java-sdk.version}</version>
1143+
<type>jar</type>
1144+
</dependency>
1145+
<dependency>
1146+
<groupId>com.amazonaws</groupId>
1147+
<artifactId>aws-java-sdk-apprunner</artifactId>
1148+
<version>${aws-java-sdk.version}</version>
1149+
<type>jar</type>
1150+
</dependency>
1151+
<dependency>
1152+
<groupId>com.amazonaws</groupId>
1153+
<artifactId>aws-java-sdk-applicationcostprofiler</artifactId>
1154+
<version>${aws-java-sdk.version}</version>
1155+
<type>jar</type>
1156+
</dependency>
1157+
<dependency>
1158+
<groupId>com.amazonaws</groupId>
1159+
<artifactId>aws-java-sdk-ssmcontacts</artifactId>
1160+
<version>${aws-java-sdk.version}</version>
1161+
<type>jar</type>
1162+
</dependency>
1163+
<dependency>
1164+
<groupId>com.amazonaws</groupId>
1165+
<artifactId>aws-java-sdk-ssmincidents</artifactId>
1166+
<version>${aws-java-sdk.version}</version>
1167+
<type>jar</type>
1168+
</dependency>
1169+
<dependency>
1170+
<groupId>com.amazonaws</groupId>
1171+
<artifactId>aws-java-sdk-finspacedata</artifactId>
1172+
<version>${aws-java-sdk.version}</version>
1173+
<type>jar</type>
1174+
</dependency>
1175+
<dependency>
1176+
<groupId>com.amazonaws</groupId>
1177+
<artifactId>aws-java-sdk-finspace</artifactId>
1178+
<version>${aws-java-sdk.version}</version>
1179+
<type>jar</type>
1180+
</dependency>
1181+
<dependency>
1182+
<groupId>com.amazonaws</groupId>
1183+
<artifactId>aws-java-sdk-nimblestudio</artifactId>
1184+
<version>${aws-java-sdk.version}</version>
1185+
<type>jar</type>
1186+
</dependency>
1187+
<dependency>
1188+
<groupId>com.amazonaws</groupId>
1189+
<artifactId>aws-java-sdk-lookoutequipment</artifactId>
1190+
<version>${aws-java-sdk.version}</version>
1191+
<type>jar</type>
1192+
</dependency>
1193+
<dependency>
1194+
<groupId>com.amazonaws</groupId>
1195+
<artifactId>aws-java-sdk-mgn</artifactId>
1196+
<version>${aws-java-sdk.version}</version>
1197+
<type>jar</type>
1198+
</dependency>
1199+
<dependency>
1200+
<groupId>com.amazonaws</groupId>
1201+
<artifactId>aws-java-sdk-lookoutmetrics</artifactId>
1202+
<version>${aws-java-sdk.version}</version>
1203+
<type>jar</type>
1204+
</dependency>
1205+
<dependency>
1206+
<groupId>com.amazonaws</groupId>
1207+
<artifactId>aws-java-sdk-fis</artifactId>
1208+
<version>${aws-java-sdk.version}</version>
1209+
<type>jar</type>
1210+
</dependency>
1211+
<dependency>
1212+
<groupId>com.amazonaws</groupId>
1213+
<artifactId>aws-java-sdk-lexmodelsv2</artifactId>
1214+
<version>${aws-java-sdk.version}</version>
1215+
<type>jar</type>
1216+
</dependency>
1217+
<dependency>
1218+
<groupId>com.amazonaws</groupId>
1219+
<artifactId>aws-java-sdk-lexruntimev2</artifactId>
1220+
<version>${aws-java-sdk.version}</version>
1221+
<type>jar</type>
1222+
</dependency>
1223+
<dependency>
1224+
<groupId>com.amazonaws</groupId>
1225+
<artifactId>aws-java-sdk-wellarchitected</artifactId>
1226+
<version>${aws-java-sdk.version}</version>
1227+
<type>jar</type>
1228+
</dependency>
1229+
<dependency>
1230+
<groupId>com.amazonaws</groupId>
1231+
<artifactId>aws-java-sdk-location</artifactId>
1232+
<version>${aws-java-sdk.version}</version>
1233+
<type>jar</type>
1234+
</dependency>
1235+
<dependency>
1236+
<groupId>com.amazonaws</groupId>
1237+
<artifactId>aws-java-sdk-iotdeviceadvisor</artifactId>
1238+
<version>${aws-java-sdk.version}</version>
1239+
<type>jar</type>
1240+
</dependency>
1241+
<dependency>
1242+
<groupId>com.amazonaws</groupId>
1243+
<artifactId>aws-java-sdk-iotfleethub</artifactId>
1244+
<version>${aws-java-sdk.version}</version>
1245+
<type>jar</type>
1246+
</dependency>
1247+
<dependency>
1248+
<groupId>com.amazonaws</groupId>
1249+
<artifactId>aws-java-sdk-iotwireless</artifactId>
1250+
<version>${aws-java-sdk.version}</version>
1251+
<type>jar</type>
1252+
</dependency>
1253+
<dependency>
1254+
<groupId>com.amazonaws</groupId>
1255+
<artifactId>aws-java-sdk-greengrassv2</artifactId>
1256+
<version>${aws-java-sdk.version}</version>
1257+
<type>jar</type>
1258+
</dependency>
1259+
<dependency>
1260+
<groupId>com.amazonaws</groupId>
1261+
<artifactId>aws-java-sdk-prometheus</artifactId>
1262+
<version>${aws-java-sdk.version}</version>
1263+
<type>jar</type>
1264+
</dependency>
10901265
<dependency>
10911266
<groupId>com.amazonaws</groupId>
10921267
<artifactId>aws-java-sdk-auditmanager</artifactId>

modules/jooby-redis/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
<artifactId>reactor-core</artifactId>
4747
</dependency>
4848

49+
<dependency>
50+
<groupId>org.apache.commons</groupId>
51+
<artifactId>commons-pool2</artifactId>
52+
</dependency>
53+
4954
<dependency>
5055
<groupId>io.lettuce</groupId>
5156
<artifactId>lettuce-core</artifactId>

modules/jooby-redis/src/main/java/io/jooby/redis/RedisModule.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55
*/
66
package io.jooby.redis;
77

8+
import static io.lettuce.core.support.BoundedPoolConfig.create;
9+
10+
import java.util.stream.Stream;
11+
12+
import javax.annotation.Nonnull;
13+
14+
import org.apache.commons.pool2.impl.GenericObjectPool;
15+
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
16+
817
import com.typesafe.config.Config;
918
import io.jooby.Extension;
1019
import io.jooby.Jooby;
@@ -13,10 +22,11 @@
1322
import io.lettuce.core.RedisClient;
1423
import io.lettuce.core.RedisURI;
1524
import io.lettuce.core.api.StatefulRedisConnection;
25+
import io.lettuce.core.codec.StringCodec;
1626
import io.lettuce.core.pubsub.StatefulRedisPubSubConnection;
17-
18-
import javax.annotation.Nonnull;
19-
import java.util.stream.Stream;
27+
import io.lettuce.core.support.AsyncConnectionPoolSupport;
28+
import io.lettuce.core.support.AsyncPool;
29+
import io.lettuce.core.support.ConnectionPoolSupport;
2030

2131
/**
2232
* Redis module: https://jooby.io/modules/redis.
@@ -102,7 +112,12 @@ public RedisModule() {
102112
StatefulRedisConnection<String, String> connection = client.connect();
103113
StatefulRedisPubSubConnection<String, String> connectPubSub = client.connectPubSub();
104114

115+
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
116+
GenericObjectPool<StatefulRedisConnection<String, String>> pool = ConnectionPoolSupport
117+
.createGenericObjectPool(() -> client.connect(), poolConfig);
118+
105119
// Close client and connection on shutdown
120+
application.onStop(pool::close);
106121
application.onStop(connection::close);
107122
application.onStop(connectPubSub::close);
108123
application.onStop(client::shutdown);
@@ -115,6 +130,9 @@ public RedisModule() {
115130
registry.putIfAbsent(ServiceKey.key(StatefulRedisConnection.class), connection);
116131
registry.put(ServiceKey.key(StatefulRedisConnection.class, name), connection);
117132

133+
registry.putIfAbsent(ServiceKey.key(GenericObjectPool.class), pool);
134+
registry.put(ServiceKey.key(GenericObjectPool.class, name), pool);
135+
118136
registry.putIfAbsent(ServiceKey.key(StatefulRedisPubSubConnection.class), connectPubSub);
119137
registry.put(ServiceKey.key(StatefulRedisPubSubConnection.class, name), connectPubSub);
120138
}

0 commit comments

Comments
 (0)