Compare commits

..

22 Commits
2.5.4 ... 2.5.6

Author SHA1 Message Date
Eleftheria Stein
2c5e5b4fe2 Release 2.5.6 2022-04-19 14:55:24 +02:00
Eleftheria Stein
a29c12f9ad Upgrade Spring Data to 2021.0.11
Closes gh-2057
2022-04-19 14:29:50 +02:00
Eleftheria Stein
0a8238be94 Upgrade test dependencies 2022-04-19 11:50:53 +02:00
Eleftheria Stein
f8d5ed0dd1 Upgrade Spring Framework to 5.3.19
Closes gh-2061
2022-04-19 11:49:25 +02:00
Eleftheria Stein
59a94ac6fc Upgrade Spring Security to 5.5.6
Closes gh-2062
2022-04-19 11:48:28 +02:00
Eleftheria Stein
74cf6262b0 Upgrade Reactor to 2020.0.18
Closes gh-2060
2022-04-19 11:47:22 +02:00
Eleftheria Stein
e5bff98619 Upgrade samples to Spring Boot 2.5.12
Closes gh-2056
2022-04-19 11:46:33 +02:00
Felix Scheinost
3eaa0b9f43 Fix bug in JDBC SaveMode.ON_GET_ATTRIBUTE 2022-04-08 17:52:35 +02:00
Eleftheria Stein
af1a5d2179 Document release process for 2.5.x
Issue gh-2036
2022-02-23 14:13:55 +01:00
Eleftheria Stein
4a3dc3febb Next development version 2022-02-22 09:21:00 +01:00
Eleftheria Stein
8ae6ca9ce1 Release 2.5.5 2022-02-22 09:20:06 +01:00
Eleftheria Stein
756d29b93a Upgrade test dependencies 2022-02-21 18:37:48 +01:00
Eleftheria Stein
0ea706a970 Upgrade Hazelcast 4 to 4.2.4
Closes gh-2022
2022-02-21 18:37:04 +01:00
Eleftheria Stein
2d8f2c6f97 Upgrade Spring Framework to 5.3.16
Closes gh-2023
2022-02-21 18:36:38 +01:00
Eleftheria Stein
ef28b6363e Upgrade Spring Data to 2021.0.9
Closes gh-2026
2022-02-21 18:36:05 +01:00
Eleftheria Stein
e8442eaf2e Upgrade Spring Security to 5.5.5
Closes gh-2024
2022-02-21 18:35:36 +01:00
Eleftheria Stein
236f5985cb Upgrade Reactor to 2020.0.16
Closes gh-2025
2022-02-21 18:34:19 +01:00
Eleftheria Stein
dbdad05a30 Upgrade samples to Spring Boot 2.5.9
Closes gh-2027
2022-02-21 18:33:47 +01:00
Eleftheria Stein
1e3c65ff9d Update to jakarta.servlet-api dependency
Closes gh-1960
2022-01-25 13:18:36 +01:00
Eleftheria Stein
10ebde5725 Update to jakarta.annotation-api dependency
Closes gh-1956
2022-01-25 12:52:47 +01:00
Ruslan Molchanov
e154197492 Fix memory leak with null principal in Redis
Closes gh-1987
2022-01-20 10:16:14 +01:00
Eleftheria Stein
e7f1d5ae44 Next development version 2021-12-21 14:03:43 +02:00
26 changed files with 184 additions and 46 deletions

97
RELEASE.adoc Normal file
View File

@@ -0,0 +1,97 @@
== 1. Update Dependencies
Dependencies are declared in `gradle/dependency-management.gradle`.
Update Spring Framework, Spring Security and Spring Data at a minimum.
Run all the checks:
[source,bash]
----
$ ./gradlew check
----
Create separate issues for each dependency update, aside from test dependencies which can be combined into a single commit.
== 2. Check All Issues are Closed
You can manually check at https://github.com/spring-projects/spring-session/milestones
== 3. Update Release Version
Update the version number in `gradle.properties` for the release, for example `2.5.0-M1`, `2.5.0-RC1`, `2.5.5`
== 4. Build Locally
Run the build using
[source,bash]
----
$ ./gradlew check
----
== 5. Push the Release Commit
Push the commit and GitHub actions will build and deploy the artifacts.
Wait for the artifact to appear in https://repo1.maven.org/maven2/org/springframework/session/spring-session-core/
== 6. Tag the release
Tag the release and then push the tag
....
git tag 2.5.6
git push origin 2.5.6
....
== 7. Update to Next Development Version
Update `gradle.properties` version to next `+SNAPSHOT+` version and then push
== 8. Update version on project pages
Update the versions on https://spring.io/projects for Spring Session Core, Spring Session Data Redis, Spring Session JDBC, and Spring Session Hazelcast.
== 9. Update Release Notes on GitHub
Download
https://github.com/spring-io/github-changelog-generator/releases/latest[the
GitHub release notes generator]
* Generate the release notes
....
java -jar github-changelog-generator.jar \
--changelog.repository=spring-projects/spring-session \
$MILESTONE release-notes
....
Note 1: `+$MILESTONE+` is something like `+2.5.1+` or `+2.5.0-M1+`. +
Note 2: This will create a file on your filesystem
called `+release-notes+`.
* Copy the release notes to your clipboard (your mileage may vary with
the following command)
....
cat release-notes | xclip -selection clipboard
....
* Create the
https://github.com/spring-projects/spring-session/releases[release on
GitHub], associate it with the tag, and paste the generated notes.
== 10. Close / Create Milestone
* In
https://github.com/spring-projects/spring-session/milestones[GitHub
Milestones], create a new milestone for the next release version
* Move any open issues from the existing milestone you just released to
the new milestone.
* Close the milestone for the release.
== 11. Announce the release
* Announce via Slack on https://pivotal.slack.com/messages/spring-session[#spring-session], and tag any downstream Spring Session projects (e.g Spring Session for Apache Geode).
Note: Do not post on #spring-release or create a blog post. Those steps happen after the Spring Session BOM is released.

View File

@@ -4,7 +4,7 @@ buildscript {
snapshotBuild = version.endsWith('SNAPSHOT')
milestoneBuild = !(releaseBuild || snapshotBuild)
springBootVersion = '2.5.7'
springBootVersion = '2.5.12'
}
repositories {

View File

@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
version=2.5.4
version=2.5.6

View File

@@ -1,10 +1,10 @@
dependencyManagement {
imports {
mavenBom 'io.projectreactor:reactor-bom:2020.0.14'
mavenBom 'io.projectreactor:reactor-bom:2020.0.18'
mavenBom 'org.junit:junit-bom:5.7.2'
mavenBom 'org.springframework:spring-framework-bom:5.3.14'
mavenBom 'org.springframework.data:spring-data-bom:2021.0.7'
mavenBom 'org.springframework.security:spring-security-bom:5.5.4'
mavenBom 'org.springframework:spring-framework-bom:5.3.19'
mavenBom 'org.springframework.data:spring-data-bom:2021.0.11'
mavenBom 'org.springframework.security:spring-security-bom:5.5.6'
mavenBom 'org.testcontainers:testcontainers-bom:1.15.3'
}
@@ -14,23 +14,23 @@ dependencyManagement {
entry 'hazelcast-client'
}
dependency 'org.aspectj:aspectjweaver:1.9.7'
dependency 'org.aspectj:aspectjweaver:1.9.9.1'
dependency 'com.h2database:h2:1.4.200'
dependency 'com.ibm.db2:jcc:11.5.5.0'
dependency 'com.ibm.db2:jcc:11.5.7.0'
dependency 'com.microsoft.sqlserver:mssql-jdbc:7.4.1.jre8'
dependency 'com.oracle.database.jdbc:ojdbc8:19.10.0.0'
dependency 'com.zaxxer:HikariCP:3.4.5'
dependency 'edu.umd.cs.mtc:multithreadedtc:1.01'
dependency 'io.lettuce:lettuce-core:6.1.5.RELEASE'
dependency 'javax.annotation:javax.annotation-api:1.3.2'
dependency 'javax.servlet:javax.servlet-api:4.0.1'
dependency 'io.lettuce:lettuce-core:6.1.8.RELEASE'
dependency 'jakarta.annotation:jakarta.annotation-api:1.3.5'
dependency 'jakarta.servlet:jakarta.servlet-api:4.0.4'
dependency 'junit:junit:4.13.2'
dependency 'mysql:mysql-connector-java:8.0.27'
dependency 'mysql:mysql-connector-java:8.0.28'
dependency 'org.apache.derby:derby:10.14.2.0'
dependency 'org.assertj:assertj-core:3.19.0'
dependency 'org.hsqldb:hsqldb:2.5.2'
dependency 'org.mariadb.jdbc:mariadb-java-client:2.7.4'
dependency 'org.mariadb.jdbc:mariadb-java-client:2.7.5'
dependency 'org.mockito:mockito-core:3.10.0'
dependency 'org.postgresql:postgresql:42.2.24'
dependency 'org.postgresql:postgresql:42.2.25'
}
}

View File

@@ -6,8 +6,8 @@ dependencies {
compile "org.springframework:spring-jcl"
optional "io.projectreactor:reactor-core"
optional "javax.annotation:javax.annotation-api"
optional "javax.servlet:javax.servlet-api"
optional "jakarta.annotation:jakarta.annotation-api"
optional "jakarta.servlet:jakarta.servlet-api"
optional "org.springframework:spring-context"
optional "org.springframework:spring-jdbc"
optional "org.springframework:spring-messaging"

View File

@@ -12,7 +12,7 @@ dependencies {
optional "org.springframework:spring-web"
testCompile "io.projectreactor:reactor-test"
testCompile "javax.servlet:javax.servlet-api"
testCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.springframework:spring-web"
testCompile "org.springframework.security:spring-security-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -527,6 +527,30 @@ class RedisIndexedSessionRepositoryITests extends AbstractRedisITests {
assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId);
}
@Test // gh-1987
void changeSessionIdWhenPrincipalNameChangesFromNullThenIndexShouldNotBeCreated() {
String principalName = null;
String principalNameChanged = "findByChangedPrincipalName" + UUID.randomUUID();
RedisSession toSave = this.repository.createSession();
toSave.setAttribute(INDEX_NAME, principalName);
this.repository.save(toSave);
RedisSession findById = this.repository.findById(toSave.getId());
String changeSessionId = findById.changeSessionId();
findById.setAttribute(INDEX_NAME, principalNameChanged);
this.repository.save(findById);
Map<String, RedisSession> findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME,
principalName);
assertThat(findByPrincipalName).isEmpty();
findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME, principalNameChanged);
assertThat(findByPrincipalName).hasSize(1);
assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId);
}
@Test
void changeSessionIdWhenOnlyChangeId() {
String attrName = "changeSessionId";

View File

@@ -858,11 +858,13 @@ public class RedisIndexedSessionRepository
catch (NonTransientDataAccessException ex) {
handleErrNoSuchKeyError(ex);
}
String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
.remove(this.originalSessionId);
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
.add(sessionId);
if (this.originalPrincipalName != null) {
String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
.remove(this.originalSessionId);
RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey)
.add(sessionId);
}
}
this.originalSessionId = sessionId;
}

View File

@@ -18,7 +18,7 @@ dependencies {
testCompile 'org.assertj:assertj-core'
testCompile 'com.hazelcast:hazelcast'
testCompile 'io.lettuce:lettuce-core'
testCompile 'javax.servlet:javax.servlet-api'
testCompile 'jakarta.servlet:jakarta.servlet-api'
testCompile 'org.junit.jupiter:junit-jupiter-api'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

View File

@@ -31,18 +31,18 @@ artifacts {
dependencies {
compile project(':spring-session-core')
optional "com.hazelcast:hazelcast:4.2.3"
optional "com.hazelcast:hazelcast:4.2.4"
compile "org.springframework:spring-context"
compile "javax.annotation:javax.annotation-api"
compile "jakarta.annotation:jakarta.annotation-api"
testCompile "javax.servlet:javax.servlet-api"
testCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.springframework:spring-web"
testCompile "org.junit.jupiter:junit-jupiter-api"
testCompile "org.springframework.security:spring-security-core"
testRuntime "org.junit.jupiter:junit-jupiter-engine"
integrationTestCompile "org.testcontainers:testcontainers"
integrationTestCompile "com.hazelcast:hazelcast:4.2.3"
integrationTestCompile "com.hazelcast:hazelcast:4.2.4"
integrationTestCompile project(":spring-session-hazelcast")
}

View File

@@ -7,13 +7,13 @@ configurations {
dependencies {
compile project(':spring-session-core')
compile "com.hazelcast:hazelcast"
compile "javax.annotation:javax.annotation-api"
compile "jakarta.annotation:jakarta.annotation-api"
compile "org.springframework:spring-context"
hazelcast4(project(path: ":hazelcast4", configuration: 'classesOnlyElements'))
compileOnly(project(":hazelcast4"))
testCompile "javax.servlet:javax.servlet-api"
testCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.springframework:spring-web"
testCompile "org.springframework.security:spring-security-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -7,7 +7,7 @@ dependencies {
compile "org.springframework:spring-context"
compile "org.springframework:spring-jdbc"
testCompile "javax.servlet:javax.servlet-api"
testCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.springframework:spring-web"
testCompile "org.springframework.security:spring-security-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -46,7 +46,7 @@ final class DatabaseContainers {
}
static MySQLContainer<?> mySql() {
return new MySQLContainer<>("mysql:8.0.27");
return new MySQLContainer<>("mysql:8.0.28");
}
static OracleContainer oracle() {

View File

@@ -728,7 +728,8 @@ public class JdbcIndexedSessionRepository
T attributeValue = supplier.get();
if (attributeValue != null
&& JdbcIndexedSessionRepository.this.saveMode.equals(SaveMode.ON_GET_ATTRIBUTE)) {
this.delta.put(attributeName, DeltaValue.UPDATED);
this.delta.merge(attributeName, DeltaValue.UPDATED, (oldDeltaValue,
deltaValue) -> (oldDeltaValue == DeltaValue.ADDED) ? oldDeltaValue : deltaValue);
}
return attributeValue;
}

View File

@@ -655,6 +655,20 @@ class JdbcIndexedSessionRepositoryTests {
verifyNoMoreInteractions(this.jdbcOperations);
}
@Test
void saveWithSaveModeOnGetAttributeAndNewAttributeSetAndGet() {
this.repository.setSaveMode(SaveMode.ON_GET_ATTRIBUTE);
MapSession delegate = new MapSession();
delegate.setAttribute("attribute1", (Supplier<String>) () -> "value1");
JdbcSession session = this.repository.new JdbcSession(delegate, UUID.randomUUID().toString(), false);
session.setAttribute("attribute2", "value2");
session.getAttribute("attribute2");
this.repository.save(session);
verify(this.jdbcOperations, times(1)).update(startsWith("INSERT INTO SPRING_SESSION_ATTRIBUTES ("),
isA(PreparedStatementSetter.class));
verifyNoMoreInteractions(this.jdbcOperations);
}
@Test
void saveWithSaveModeAlways() {
this.repository.setSaveMode(SaveMode.ALWAYS);

View File

@@ -1,17 +1,17 @@
dependencyManagement {
imports {
mavenBom 'com.fasterxml.jackson:jackson-bom:2.12.6'
mavenBom 'com.fasterxml.jackson:jackson-bom:2.12.6.20220326'
}
dependencies {
dependency 'ch.qos.logback:logback-classic:1.2.9'
dependency 'ch.qos.logback:logback-classic:1.2.11'
dependency 'com.maxmind.geoip2:geoip2:2.15.0'
dependency 'javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.2'
dependency 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.3'
dependency 'org.apache.taglibs:taglibs-standard-jstlel:1.2.5'
dependency 'org.seleniumhq.selenium:htmlunit-driver:2.49.1'
dependency 'org.slf4j:jcl-over-slf4j:1.7.32'
dependency 'org.slf4j:log4j-over-slf4j:1.7.32'
dependency 'org.slf4j:jcl-over-slf4j:1.7.36'
dependency 'org.slf4j:log4j-over-slf4j:1.7.36'
dependency 'org.webjars:bootstrap:2.3.2'
dependency 'org.webjars:html5shiv:3.7.3-1'
dependency 'org.webjars:jquery:3.6.0'

View File

@@ -7,7 +7,7 @@ dependencies {
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-thymeleaf"
compile "org.springframework.boot:spring-boot-starter-security"
compile "com.hazelcast:hazelcast:4.2.3"
compile "com.hazelcast:hazelcast:4.2.4"
compile "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect"
compile "org.webjars:bootstrap"
compile "org.webjars:html5shiv"

View File

@@ -10,7 +10,7 @@ dependencies {
compile slf4jDependencies
compile "org.testcontainers:testcontainers"
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -12,7 +12,7 @@ dependencies {
compile jstlDependencies
compile slf4jDependencies
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
providedCompile "javax.servlet.jsp:javax.servlet.jsp-api"
testCompile "org.assertj:assertj-core"

View File

@@ -9,7 +9,7 @@ dependencies {
compile jstlDependencies
compile slf4jDependencies
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -10,7 +10,7 @@ dependencies {
compile slf4jDependencies
compile "org.testcontainers:testcontainers"
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -11,7 +11,7 @@ dependencies {
compile slf4jDependencies
compile "org.testcontainers:testcontainers"
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.springframework.security:spring-security-test"
testCompile "org.assertj:assertj-core"

View File

@@ -12,7 +12,7 @@ dependencies {
compile slf4jDependencies
compile "org.testcontainers:testcontainers"
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
providedCompile "javax.servlet.jsp:javax.servlet.jsp-api"
testCompile "org.assertj:assertj-core"

View File

@@ -8,7 +8,7 @@ dependencies {
compile jstlDependencies
compile slf4jDependencies
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -9,7 +9,7 @@ dependencies {
compile jstlDependencies
compile slf4jDependencies
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"

View File

@@ -10,7 +10,7 @@ dependencies {
compile slf4jDependencies
compile "org.testcontainers:testcontainers"
providedCompile "javax.servlet:javax.servlet-api"
providedCompile "jakarta.servlet:jakarta.servlet-api"
testCompile "org.assertj:assertj-core"
testCompile "org.junit.jupiter:junit-jupiter-api"