Upgrade to Hazelcast 5.0.2

See gh-29265
This commit is contained in:
Stephane Nicoll 2022-01-05 10:50:52 +01:00
parent 508d0af453
commit a780e87e9c
14 changed files with 247 additions and 9 deletions

View File

@ -1,5 +1,5 @@
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-4.0.xsd"
xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-5.0.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<map name="defaultCache" />

View File

@ -1,7 +1,7 @@
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-4.0.xsd">
http://www.hazelcast.com/schema/config/hazelcast-config-5.0.xsd">
<instance-name>actuator-hazelcast</instance-name>
<map name="defaultCache" />
<network>

View File

@ -1,5 +1,5 @@
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-4.0.xsd"
xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-5.0.xsd"
xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<instance-name>default-instance</instance-name>
<map name="defaultCache" />

View File

@ -1,4 +1,4 @@
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-4.0.xsd"
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-5.0.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

View File

@ -413,7 +413,7 @@ bom {
]
}
}
library("Hazelcast", "4.2.4") {
library("Hazelcast", "5.0.2") {
group("com.hazelcast") {
modules = [
"hazelcast",

View File

@ -10,8 +10,8 @@ Spring Boot first attempts to create a client by checking the following configur
* A `hazelcast-client.xml` in the working directory or at the root of the classpath.
* A `hazelcast-client.yaml` in the working directory or at the root of the classpath.
NOTE: Spring Boot supports both Hazelcast 4 and Hazelcast 3.
If you downgrade to Hazelcast 3, `hazelcast-client` should be added to the classpath to configure a client.
WARNING: Hazelcast 3 support is deprecated.
If you still need to downgrade to Hazelcast 3, `hazelcast-client` should be added to the classpath to configure a client.
If a client can not be created, Spring Boot attempts to configure an embedded server.
If you define a `com.hazelcast.config.Config` bean, Spring Boot uses that.

View File

@ -0,0 +1,61 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package smoketest.hazelcast3;
import com.hazelcast.spring.cache.HazelcastCacheManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.cache.CacheManager;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class SampleHazelcast3ApplicationTests {
@Autowired
private WebTestClient webClient;
@Autowired
private CacheManager cacheManager;
@Autowired
private CountryRepository countryRepository;
@Test
void cacheManagerIsUsingHazelcast() {
assertThat(this.cacheManager).isInstanceOf(HazelcastCacheManager.class);
}
@Test
void healthEndpointHasHazelcastContributor() {
this.webClient.get().uri("/actuator/health/hazelcast").exchange().expectStatus().isOk().expectBody()
.jsonPath("status").isEqualTo("UP").jsonPath("details.name").isNotEmpty().jsonPath("details.uuid")
.isNotEmpty();
}
@Test
void metricsEndpointHasCacheMetrics() {
this.webClient.get().uri("/actuator/metrics/cache.entries").exchange().expectStatus().isOk();
}
}

View File

@ -0,0 +1,24 @@
plugins {
id "java"
id "org.springframework.boot.conventions"
}
description = "Spring Boot Hazelcast 4 smoke test"
configurations.all {
resolutionStrategy {
force "com.hazelcast:hazelcast:4.0.5"
force "com.hazelcast:hazelcast-spring:4.0.5"
}
}
dependencies {
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-actuator"))
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-cache"))
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web"))
implementation("com.hazelcast:hazelcast")
implementation("com.hazelcast:hazelcast-spring")
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-webflux"))
}

View File

@ -0,0 +1,53 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package smoketest.hazelcast4;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Country implements Serializable {
private final String code;
public Country(String code) {
this.code = code;
}
public String getCode() {
return this.code;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Country country = (Country) o;
return this.code.equals(country.code);
}
@Override
public int hashCode() {
return this.code.hashCode();
}
}

View File

@ -0,0 +1,33 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package smoketest.hazelcast4;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@Component
@CacheConfig(cacheNames = "countries")
public class CountryRepository {
@Cacheable
public Country findByCode(String code) {
System.out.println("---> Loading country with code '" + code + "'");
return new Country(code);
}
}

View File

@ -0,0 +1,45 @@
/*
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package smoketest.hazelcast4;
import com.hazelcast.spring.cache.HazelcastCacheManager;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.metrics.cache.CacheMetricsRegistrar;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableCaching
public class SampleHazelcast4Application {
public static void main(String[] args) {
SpringApplication.run(SampleHazelcast4Application.class, args);
}
@Bean
public ApplicationRunner registerCache(CountryRepository repository, HazelcastCacheManager cacheManager,
CacheMetricsRegistrar registrar) {
return (args) -> {
repository.findByCode("BE");
registrar.bindCacheToRegistry(cacheManager.getCache("countries"));
};
}
}

View File

@ -0,0 +1,2 @@
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

View File

@ -0,0 +1,20 @@
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-4.0.xsd">
<map name="countries">
<time-to-live-seconds>600</time-to-live-seconds>
</map>
<cache name="countries">
<eviction size="200"/>
<statistics-enabled>true</statistics-enabled>
<management-enabled>true</management-enabled>
</cache>
<network>
<join>
<tcp-ip enabled="false"/>
<multicast enabled="false"/>
</join>
</network>
</hazelcast>

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,7 +14,7 @@
* limitations under the License.
*/
package smoketest.hazelcast3;
package smoketest.hazelcast4;
import com.hazelcast.spring.cache.HazelcastCacheManager;
import org.junit.jupiter.api.Test;