Skip to content

Commit a03a8eb

Browse files
committed
Merge pull request #20662 from mp911de
* pr/20662: Polish "Migrate off deprecated Spring Data Cassandra API" Migrate off deprecated Spring Data Cassandra API Closes gh-20662
2 parents eb70fd9 + 97bf3ec commit a03a8eb

File tree

6 files changed

+76
-67
lines changed

6 files changed

+76
-67
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ public CassandraMappingContext cassandraMapping(BeanFactory beanFactory, Cassand
8080
if (!packages.isEmpty()) {
8181
context.setInitialEntitySet(CassandraEntityClassScanner.scan(packages));
8282
}
83-
context.setUserTypeResolver(new SimpleUserTypeResolver(this.session));
84-
context.setCustomConversions(conversions);
83+
context.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
8584
return context;
8685
}
8786

@@ -90,7 +89,9 @@ public CassandraMappingContext cassandraMapping(BeanFactory beanFactory, Cassand
9089
public CassandraConverter cassandraConverter(CassandraMappingContext mapping,
9190
CassandraCustomConversions conversions) {
9291
MappingCassandraConverter converter = new MappingCassandraConverter(mapping);
92+
converter.setCodecRegistry(this.session.getContext().getCodecRegistry());
9393
converter.setCustomConversions(conversions);
94+
converter.setUserTypeResolver(new SimpleUserTypeResolver(this.session));
9495
return converter;
9596
}
9697

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationTests.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@
3232
import org.springframework.context.annotation.Configuration;
3333
import org.springframework.core.convert.converter.Converter;
3434
import org.springframework.data.cassandra.core.CassandraTemplate;
35+
import org.springframework.data.cassandra.core.convert.CassandraConverter;
3536
import org.springframework.data.cassandra.core.convert.CassandraCustomConversions;
3637
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
3738
import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver;
3839
import org.springframework.test.util.ReflectionTestUtils;
3940
import org.springframework.util.ObjectUtils;
4041

4142
import static org.assertj.core.api.Assertions.assertThat;
42-
import static org.mockito.Mockito.mock;
4343

4444
/**
4545
* Tests for {@link CassandraDataAutoConfiguration}.
@@ -61,7 +61,7 @@ void close() {
6161

6262
@Test
6363
void templateExists() {
64-
load(TestConfiguration.class);
64+
load(CassandraMockConfiguration.class);
6565
assertThat(this.context.getBeanNamesForType(CassandraTemplate.class)).hasSize(1);
6666
}
6767

@@ -78,8 +78,16 @@ void entityScanShouldSetInitialEntitySet() {
7878
@Test
7979
void userTypeResolverShouldBeSet() {
8080
load();
81-
CassandraMappingContext mappingContext = this.context.getBean(CassandraMappingContext.class);
82-
assertThat(mappingContext).extracting("userTypeResolver").isInstanceOf(SimpleUserTypeResolver.class);
81+
CassandraConverter cassandraConverter = this.context.getBean(CassandraConverter.class);
82+
assertThat(cassandraConverter).extracting("userTypeResolver").isInstanceOf(SimpleUserTypeResolver.class);
83+
}
84+
85+
@Test
86+
void codecRegistryShouldBeSet() {
87+
load();
88+
CassandraConverter cassandraConverter = this.context.getBean(CassandraConverter.class);
89+
assertThat(cassandraConverter.getCodecRegistry())
90+
.isSameAs(this.context.getBean(CassandraMockConfiguration.class).codecRegistry);
8391
}
8492

8593
@Test
@@ -94,7 +102,6 @@ void customConversions() {
94102
load(CustomConversionConfig.class);
95103
CassandraTemplate template = this.context.getBean(CassandraTemplate.class);
96104
assertThat(template.getConverter().getConversionService().canConvert(Person.class, String.class)).isTrue();
97-
98105
}
99106

100107
@Test
@@ -109,21 +116,12 @@ void load(Class<?>... config) {
109116
if (!ObjectUtils.isEmpty(config)) {
110117
ctx.register(config);
111118
}
112-
ctx.register(TestConfiguration.class, CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class);
119+
ctx.register(CassandraMockConfiguration.class, CassandraAutoConfiguration.class,
120+
CassandraDataAutoConfiguration.class);
113121
ctx.refresh();
114122
this.context = ctx;
115123
}
116124

117-
@Configuration(proxyBeanMethods = false)
118-
static class TestConfiguration {
119-
120-
@Bean
121-
CqlSession cqlSession() {
122-
return mock(CqlSession.class);
123-
}
124-
125-
}
126-
127125
@Configuration(proxyBeanMethods = false)
128126
@EntityScan("org.springframework.boot.autoconfigure.data.cassandra.city")
129127
static class EntityScanConfig {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright 2012-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.autoconfigure.data.cassandra;
18+
19+
import com.datastax.oss.driver.api.core.CqlSession;
20+
import com.datastax.oss.driver.api.core.context.DriverContext;
21+
import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
22+
23+
import org.springframework.context.annotation.Bean;
24+
import org.springframework.context.annotation.Configuration;
25+
26+
import static org.mockito.BDDMockito.given;
27+
import static org.mockito.Mockito.mock;
28+
29+
/**
30+
* Test configuration that mocks access to Cassandra.
31+
*
32+
* @author Stephane Nicoll
33+
*/
34+
@Configuration(proxyBeanMethods = false)
35+
class CassandraMockConfiguration {
36+
37+
final CodecRegistry codecRegistry = mock(CodecRegistry.class);
38+
39+
@Bean
40+
CqlSession cqlSession() {
41+
DriverContext context = mock(DriverContext.class);
42+
given(context.getCodecRegistry()).willReturn(this.codecRegistry);
43+
CqlSession cqlSession = mock(CqlSession.class);
44+
given(cqlSession.getContext()).willReturn(context);
45+
return cqlSession;
46+
}
47+
48+
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfigurationTests.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Set;
2020

21-
import com.datastax.oss.driver.api.core.CqlSession;
2221
import org.junit.jupiter.api.AfterEach;
2322
import org.junit.jupiter.api.Test;
2423

@@ -27,15 +26,14 @@
2726
import org.springframework.boot.autoconfigure.domain.EntityScan;
2827
import org.springframework.boot.test.util.TestPropertyValues;
2928
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
30-
import org.springframework.context.annotation.Bean;
3129
import org.springframework.context.annotation.Configuration;
3230
import org.springframework.data.cassandra.core.ReactiveCassandraTemplate;
31+
import org.springframework.data.cassandra.core.convert.CassandraConverter;
3332
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
3433
import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver;
3534
import org.springframework.test.util.ReflectionTestUtils;
3635

3736
import static org.assertj.core.api.Assertions.assertThat;
38-
import static org.mockito.Mockito.mock;
3937

4038
/**
4139
* Tests for {@link CassandraReactiveDataAutoConfiguration}.
@@ -74,8 +72,8 @@ void entityScanShouldSetInitialEntitySet() {
7472
@Test
7573
void userTypeResolverShouldBeSet() {
7674
load("spring.data.cassandra.keyspaceName:boot_test");
77-
CassandraMappingContext mappingContext = this.context.getBean(CassandraMappingContext.class);
78-
assertThat(mappingContext).extracting("userTypeResolver").isInstanceOf(SimpleUserTypeResolver.class);
75+
CassandraConverter cassandraConverter = this.context.getBean(CassandraConverter.class);
76+
assertThat(cassandraConverter).extracting("userTypeResolver").isInstanceOf(SimpleUserTypeResolver.class);
7977
}
8078

8179
private void load(String... environment) {
@@ -88,22 +86,12 @@ private void load(Class<?> config, String... environment) {
8886
if (config != null) {
8987
ctx.register(config);
9088
}
91-
ctx.register(TestConfiguration.class, CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class,
92-
CassandraReactiveDataAutoConfiguration.class);
89+
ctx.register(CassandraMockConfiguration.class, CassandraAutoConfiguration.class,
90+
CassandraDataAutoConfiguration.class, CassandraReactiveDataAutoConfiguration.class);
9391
ctx.refresh();
9492
this.context = ctx;
9593
}
9694

97-
@Configuration(proxyBeanMethods = false)
98-
static class TestConfiguration {
99-
100-
@Bean
101-
CqlSession cqlSession() {
102-
return mock(CqlSession.class);
103-
}
104-
105-
}
106-
10795
@Configuration(proxyBeanMethods = false)
10896
@EntityScan("org.springframework.boot.autoconfigure.data.cassandra.city")
10997
static class EntityScanConfig {

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveRepositoriesAutoConfigurationTests.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Set;
2020

21-
import com.datastax.oss.driver.api.core.CqlSession;
2221
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
2322
import org.junit.jupiter.api.Test;
2423

@@ -32,15 +31,13 @@
3231
import org.springframework.boot.autoconfigure.data.empty.EmptyDataPackage;
3332
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3433
import org.springframework.context.ApplicationContext;
35-
import org.springframework.context.annotation.Bean;
3634
import org.springframework.context.annotation.Configuration;
3735
import org.springframework.context.annotation.Import;
3836
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
3937
import org.springframework.data.cassandra.repository.config.EnableReactiveCassandraRepositories;
4038
import org.springframework.test.util.ReflectionTestUtils;
4139

4240
import static org.assertj.core.api.Assertions.assertThat;
43-
import static org.mockito.Mockito.mock;
4441

4542
/**
4643
* Tests for {@link CassandraReactiveRepositoriesAutoConfiguration}.
@@ -102,34 +99,24 @@ private Set<Class<?>> getInitialEntitySet(ApplicationContext context) {
10299
return (Set<Class<?>>) ReflectionTestUtils.getField(mappingContext, "initialEntitySet");
103100
}
104101

105-
@Configuration(proxyBeanMethods = false)
106-
static class TestConfiguration {
107-
108-
@Bean
109-
CqlSession cqlSession() {
110-
return mock(CqlSession.class);
111-
}
112-
113-
}
114-
115102
@Configuration(proxyBeanMethods = false)
116103
@TestAutoConfigurationPackage(EmptyDataPackage.class)
117-
@Import(TestConfiguration.class)
104+
@Import(CassandraMockConfiguration.class)
118105
static class EmptyConfiguration {
119106

120107
}
121108

122109
@Configuration(proxyBeanMethods = false)
123110
@TestAutoConfigurationPackage(City.class)
124-
@Import(TestConfiguration.class)
111+
@Import(CassandraMockConfiguration.class)
125112
static class DefaultConfiguration {
126113

127114
}
128115

129116
@Configuration(proxyBeanMethods = false)
130117
@TestAutoConfigurationPackage(CassandraReactiveRepositoriesAutoConfigurationTests.class)
131118
@EnableReactiveCassandraRepositories(basePackageClasses = ReactiveCityCassandraRepository.class)
132-
@Import(TestConfiguration.class)
119+
@Import(CassandraMockConfiguration.class)
133120
static class CustomizedConfiguration {
134121

135122
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraRepositoriesAutoConfigurationTests.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Set;
2020

21-
import com.datastax.oss.driver.api.core.CqlSession;
2221
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
2322
import org.junit.jupiter.api.Test;
2423

@@ -32,15 +31,13 @@
3231
import org.springframework.boot.autoconfigure.data.empty.EmptyDataPackage;
3332
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
3433
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
35-
import org.springframework.context.annotation.Bean;
3634
import org.springframework.context.annotation.Configuration;
3735
import org.springframework.context.annotation.Import;
3836
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
3937
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
4038
import org.springframework.test.util.ReflectionTestUtils;
4139

4240
import static org.assertj.core.api.Assertions.assertThat;
43-
import static org.mockito.Mockito.mock;
4441

4542
/**
4643
* Tests for {@link CassandraRepositoriesAutoConfiguration}.
@@ -100,34 +97,24 @@ private Set<Class<?>> getInitialEntitySet(AssertableApplicationContext context)
10097
return (Set<Class<?>>) ReflectionTestUtils.getField(mappingContext, "initialEntitySet");
10198
}
10299

103-
@Configuration(proxyBeanMethods = false)
104-
static class TestConfiguration {
105-
106-
@Bean
107-
CqlSession cqlSession() {
108-
return mock(CqlSession.class);
109-
}
110-
111-
}
112-
113100
@Configuration(proxyBeanMethods = false)
114101
@TestAutoConfigurationPackage(EmptyDataPackage.class)
115-
@Import(TestConfiguration.class)
102+
@Import(CassandraMockConfiguration.class)
116103
static class EmptyConfiguration {
117104

118105
}
119106

120107
@Configuration(proxyBeanMethods = false)
121108
@TestAutoConfigurationPackage(City.class)
122-
@Import(TestConfiguration.class)
109+
@Import(CassandraMockConfiguration.class)
123110
static class DefaultConfiguration {
124111

125112
}
126113

127114
@Configuration(proxyBeanMethods = false)
128115
@TestAutoConfigurationPackage(CassandraRepositoriesAutoConfigurationTests.class)
129116
@EnableCassandraRepositories(basePackageClasses = CityCassandraRepository.class)
130-
@Import(TestConfiguration.class)
117+
@Import(CassandraMockConfiguration.class)
131118
static class CustomizedConfiguration {
132119

133120
}

0 commit comments

Comments
 (0)