From 4c471a8547f76eb5fa177b31a9d153c6c88d0dd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Thu, 16 Apr 2026 14:31:31 +0800 Subject: [PATCH 01/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5 https://github.com/redis/jedis/blob/master/docs/migration-guides/v3-to-v4.md --- .github/workflows/build.yml | 1 + changes/en-us/2.x.md | 1 + changes/zh-cn/2.x.md | 2 +- console/pom.xml | 6 +-- .../seata/console/config/JacksonConfig.java | 39 +++++++++---------- .../console/config/WebSecurityConfig.java | 24 ++++++++++-- .../apache/seata/mcp/core/utils/UrlUtils.java | 4 +- .../impl/ConsoleRemoteServiceImpl.java | 2 +- .../seata/mcp/tools/GlobalLockTools.java | 11 ++---- .../seata/mcp/tools/GlobalSessionTools.java | 11 ++---- .../seata/mcp/tools/NameSpaceTools.java | 17 +++----- namingserver/pom.xml | 11 ++++-- .../seata/namingserver/config/WebConfig.java | 26 +++++-------- .../service/ConsoleLocalServiceImpl.java | 12 +----- ...uthControllerWithCustomPropertiesTest.java | 4 +- .../AuthControllerWithRandomPasswordTest.java | 4 +- server/pom.xml | 9 ++++- .../java/org/apache/seata/server/Server.java | 2 +- .../org/apache/seata/server/ServerRunner.java | 4 +- .../manager/ClusterWatcherManager.java | 2 +- .../raft/context/SeataClusterContext.java | 5 +-- .../seata/server/config/ServerConfig.java | 2 +- .../controller/BranchSessionController.java | 3 +- .../controller/GlobalLockController.java | 3 +- .../controller/GlobalSessionController.java | 3 +- .../impl/db/GlobalSessionDBServiceImpl.java | 2 +- .../server/controller/ClusterController.java | 2 +- .../AbstractSeataInstanceStrategy.java | 8 ++-- .../instance/RaftServerInstanceStrategy.java | 3 +- .../storage/redis/JedisPooledFactory.java | 8 ++-- .../store/RedisTransactionStoreManager.java | 3 +- .../apache/seata/server/LoaderConfTest.java | 9 +++-- .../db/BranchSessionDBServiceImplTest.java | 4 +- .../impl/db/GlobalLockDBServiceImplTest.java | 4 +- .../db/GlobalSessionDBServiceImplTest.java | 6 +-- .../RaftServerInstanceStrategyTest.java | 2 +- .../seata/server/lock/LockManagerTest.java | 2 +- .../seata/server/logging/AppenderTest.java | 5 ++- .../session/FileSessionManagerTest.java | 2 +- .../session/redis/RedisQueryConsolTest.java | 3 +- .../storage/redis/JedisPooledFactoryTest.java | 12 +++--- .../RedisTransactionStoreManagerTest.java | 5 +-- 42 files changed, 139 insertions(+), 149 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index db4180865e5..af4d3806508 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -81,6 +81,7 @@ jobs: if: matrix.java == '8' run: | ./mvnw -T 4C clean test \ + -pl '!server,!test-suite/test-new-version,!extensions/apm/apm-seata-skywalking-plugin' \ -Dpmd.skip=false -Dlicense.skip=false -DredisCaseEnabled=true -DnacosCaseEnabled=true \ -e -B \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index 87024bfdfd6..028b72a0113 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -58,6 +58,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#8031](https://github.com/apache/incubator-seata/pull/8031)] upgrade some dependencies versions - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] add the dependency jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] simplify jackson related dependencies +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server modules:spring-boot upgrade to 4.0.5 ### security: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 7585a7b8115..18481ec6c24 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -59,7 +59,7 @@ - [[#8031](https://github.com/apache/incubator-seata/pull/8031)] 升级一些依赖版本 - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] 添加依赖 jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] 简化 jackson 相关依赖 - +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server 模块:spring-boot 升级到 4.0.5 ### security: diff --git a/console/pom.xml b/console/pom.xml index 1fd057f32eb..1f86210de8c 100644 --- a/console/pom.xml +++ b/console/pom.xml @@ -32,10 +32,10 @@ console for Seata built with Maven - 3.5.2 - 6.2.8 + 4.0.5 + 7.0.6 2.0 - 11.0.18 + 11.0.20 1.1.0 diff --git a/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java b/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java index cda691a133e..88ab6452f1e 100644 --- a/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java +++ b/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java @@ -16,14 +16,13 @@ */ package org.apache.seata.console.config; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - -import java.io.IOException; +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.ValueSerializer; +import tools.jackson.databind.module.SimpleModule; @Configuration(proxyBeanMethods = false) public class JacksonConfig { @@ -32,19 +31,19 @@ public class JacksonConfig { * convert long to string for return to the front end */ @Bean - public Jackson2ObjectMapperBuilderCustomizer longToStringCustomizer() { - return jacksonObjectMapperBuilder -> - jacksonObjectMapperBuilder.serializerByType(Long.class, new JsonSerializer() { - @Override - public void serialize( - Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) - throws IOException { - if (value == null) { - jsonGenerator.writeString(""); - } else { - jsonGenerator.writeString(value.toString()); - } - } - }); + public SimpleModule customModule() { + SimpleModule module = new SimpleModule(); + module.addSerializer(Long.class, new ValueSerializer() { + @Override + public void serialize(Long value, JsonGenerator jsonGenerator, SerializationContext ctxt) + throws JacksonException { + if (value == null) { + jsonGenerator.writeString(""); + } else { + jsonGenerator.writeString(value.toString()); + } + } + }); + return module; } } diff --git a/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java b/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java index dc773eeabb0..5db35019f50 100644 --- a/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java +++ b/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java @@ -16,12 +16,14 @@ */ package org.apache.seata.console.config; +import jakarta.servlet.http.HttpServletRequest; import org.apache.seata.common.util.StringUtils; import org.apache.seata.console.filter.JwtAuthenticationTokenFilter; import org.apache.seata.console.security.CustomUserDetailsServiceImpl; import org.apache.seata.console.security.JwtAuthenticationEntryPoint; import org.apache.seata.console.utils.JwtTokenUtils; import org.apache.seata.mcp.core.props.MCPProperties; +import org.jspecify.annotations.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -39,8 +41,8 @@ import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher; +import org.springframework.util.AntPathMatcher; import java.util.Arrays; import java.util.List; @@ -98,9 +100,9 @@ public PasswordEncoder passwordEncoder() { } @Bean - public AuthenticationManager authenticationManager() { + public AuthenticationManager authenticationManager(PasswordEncoder passwordEncoder) { DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(userDetailsService); - authenticationProvider.setPasswordEncoder(passwordEncoder()); + authenticationProvider.setPasswordEncoder(passwordEncoder); return new ProviderManager(authenticationProvider); } @@ -150,7 +152,21 @@ private RequestMatcher[] buildAntMatchers(String patterns) { .filter(StringUtils::isNotBlank) // PathPatternParser using the new version of Security cannot directly achieve the same matching effect // as the deprecated Ant style mode /**/*.css - .map(AntPathRequestMatcher::new) + .map(pattern -> new RequestMatcher() { + private final AntPathMatcher matcher = new AntPathMatcher(); + + @Override + public boolean matches(@NonNull HttpServletRequest request) { + String path = request.getServletPath(); + if (request.getPathInfo() != null) { + path += request.getPathInfo(); + } + if (path == null || path.isEmpty()) { + path = "/"; + } + return matcher.match(pattern, path); + } + }) .toArray(RequestMatcher[]::new); } } diff --git a/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java b/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java index 44345f93877..a739c6c08fe 100644 --- a/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java +++ b/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java @@ -16,11 +16,11 @@ */ package org.apache.seata.mcp.core.utils; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.util.UriComponentsBuilder; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; import java.util.Collections; import java.util.HashMap; diff --git a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java index 4dfb152b1c8..0aaa9698c49 100644 --- a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java +++ b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java @@ -16,7 +16,6 @@ */ package org.apache.seata.mcp.service.impl; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.exception.AuthenticationFailedException; import org.apache.seata.common.util.StringUtils; import org.apache.seata.console.config.WebSecurityConfig; @@ -37,6 +36,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.ObjectMapper; import java.util.Map; diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java index ca6e034ea6f..6df0818a5ec 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java @@ -16,9 +16,6 @@ */ package org.apache.seata.mcp.tools; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.util.StringUtils; import org.apache.seata.mcp.core.constant.RPCConstant; @@ -36,6 +33,8 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -92,11 +91,7 @@ public PageResult queryGlobalLock( PageResult result = null; String response = mcpRPCService.getCallTC( nameSpaceDetail, RPCConstant.GLOBAL_LOCK_BASE_URL + "/query", param, null, null); - try { - result = objectMapper.readValue(response, new TypeReference>() {}); - } catch (JsonProcessingException e) { - logger.error(e.getMessage()); - } + result = objectMapper.readValue(response, new TypeReference>() {}); if (result == null) { return PageResult.failure("", "query global lock failed"); } else { diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java index b3697e5ddeb..25ec298fb33 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java @@ -16,9 +16,6 @@ */ package org.apache.seata.mcp.tools; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.util.StringUtils; import org.apache.seata.core.model.GlobalStatus; @@ -37,6 +34,8 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.HashMap; @@ -102,11 +101,7 @@ public PageResult queryGlobalSession( PageResult pageResult = null; String result = mcpRPCService.getCallTC( nameSpaceDetail, RPCConstant.GLOBAL_SESSION_BASE_URL + "/query", param, null, null); - try { - pageResult = objectMapper.readValue(result, new TypeReference>() {}); - } catch (JsonProcessingException e) { - logger.error(e.getMessage()); - } + pageResult = objectMapper.readValue(result, new TypeReference>() {}); if (pageResult == null) { return PageResult.failure("", "query global session failed"); } else { diff --git a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java index 1decea87730..bfdc423db08 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java @@ -16,14 +16,13 @@ */ package org.apache.seata.mcp.tools; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.SingleResult; import org.apache.seata.mcp.core.constant.RPCConstant; import org.apache.seata.mcp.service.ConsoleApiService; import org.springaicommunity.mcp.annotation.McpTool; import org.springframework.stereotype.Service; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -44,14 +43,10 @@ public NameSpaceTools(ConsoleApiService mcpRPCService, ObjectMapper objectMapper public SingleResult getTCNameSpaces() { String result = mcpRPCService.getCallNameSpace(RPCConstant.GET_NAMESPACE_PATH); Map nameSpacesVo = new HashMap<>(); - try { - JsonNode root = objectMapper.readTree(result); - JsonNode dataNode = root.get("data"); - if (dataNode != null && !dataNode.isNull()) { - nameSpacesVo.put("namespaces", dataNode.toString()); - } - } catch (JsonProcessingException e) { - return SingleResult.failure("Get namespace failed:" + e.getMessage()); + JsonNode root = objectMapper.readTree(result); + JsonNode dataNode = root.get("data"); + if (dataNode != null && !dataNode.isNull()) { + nameSpacesVo.put("namespaces", dataNode.toString()); } return SingleResult.success(nameSpacesVo); } diff --git a/namingserver/pom.xml b/namingserver/pom.xml index 03bfb3c5a67..68c3942d491 100644 --- a/namingserver/pom.xml +++ b/namingserver/pom.xml @@ -32,10 +32,10 @@ 25 - 3.5.2 - 6.2.8 + 4.0.5 + 7.0.6 2.0 - 11.0.18 + 11.0.20 @@ -173,6 +173,11 @@ com.squareup.okhttp3 okhttp + + org.springframework.boot + spring-boot-webmvc-test + test + diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java b/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java index f7d0a79f083..ea1162cc671 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java @@ -17,42 +17,34 @@ package org.apache.seata.namingserver.config; import jakarta.servlet.Filter; -import okhttp3.Dispatcher; -import okhttp3.OkHttpClient; import org.apache.seata.namingserver.filter.ConsoleRemotingFilter; import org.apache.seata.namingserver.manager.NamingManager; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; -import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; +import org.springframework.http.client.JdkClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -import java.util.concurrent.TimeUnit; +import java.net.http.HttpClient; +import java.time.Duration; -import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_CONNECTION_MAX_PER_ROUTE; -import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_CONNECTION_MAX_TOTAL; import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_REQUEST_TIMEOUT; -import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_WRITE_TIMEOUT; @Configuration public class WebConfig { @Bean public RestTemplate restTemplate() { - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequests(DEFAULT_CONNECTION_MAX_TOTAL); - dispatcher.setMaxRequestsPerHost(DEFAULT_CONNECTION_MAX_PER_ROUTE); - - OkHttpClient client = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .connectTimeout(DEFAULT_REQUEST_TIMEOUT, TimeUnit.MILLISECONDS) - .readTimeout(DEFAULT_REQUEST_TIMEOUT, TimeUnit.MILLISECONDS) - .writeTimeout(DEFAULT_WRITE_TIMEOUT, TimeUnit.MILLISECONDS) + HttpClient client = HttpClient.newBuilder() + .connectTimeout(Duration.ofMillis(DEFAULT_REQUEST_TIMEOUT)) .build(); + JdkClientHttpRequestFactory factory = new JdkClientHttpRequestFactory(client); + factory.setReadTimeout(Duration.ofMillis(DEFAULT_REQUEST_TIMEOUT)); + // Create and return a RestTemplate with the custom request factory - return new RestTemplate(new OkHttp3ClientHttpRequestFactory(client)); + return new RestTemplate(factory); } @Bean diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java index 782e2c30197..6ec4b1e8e90 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java @@ -16,8 +16,6 @@ */ package org.apache.seata.namingserver.service; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.metadata.ClusterRole; import org.apache.seata.common.metadata.Node; import org.apache.seata.common.metadata.namingserver.NamingServerNode; @@ -38,6 +36,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.ObjectMapper; import java.util.List; import java.util.Map; @@ -157,13 +156,6 @@ public String putCallTC( @Override public String getCallNameSpace(String path) { - String namespace; - try { - namespace = objectMapper.writeValueAsString(namingManager.namespace()); - } catch (JsonProcessingException e) { - LOGGER.error("Get NameSpace failed: {}", e.getMessage()); - return "Failed to get namespace"; - } - return namespace; + return objectMapper.writeValueAsString(namingManager.namespace()); } } diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java index 26f7689daee..8623f6ba460 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java @@ -16,18 +16,18 @@ */ package org.apache.seata.namingserver; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.Code; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.security.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import tools.jackson.databind.ObjectMapper; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java index c9279f4d2e5..db9446cabbd 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java @@ -16,20 +16,20 @@ */ package org.apache.seata.namingserver; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.Code; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.security.User; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.system.CapturedOutput; import org.springframework.boot.test.system.OutputCaptureExtension; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import tools.jackson.databind.ObjectMapper; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/server/pom.xml b/server/pom.xml index cbb58ab69fc..1ad2b3023e6 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -32,9 +32,10 @@ server for Seata built with Maven - 2.7.18 - 5.3.39 + 4.0.5 + 7.0.6 2.0 + 6.0.3 @@ -97,6 +98,10 @@ + + org.springframework.boot + spring-boot-web-server + org.springframework.boot spring-boot-starter diff --git a/server/src/main/java/org/apache/seata/server/Server.java b/server/src/main/java/org/apache/seata/server/Server.java index 44667d03095..ae82448bde5 100644 --- a/server/src/main/java/org/apache/seata/server/Server.java +++ b/server/src/main/java/org/apache/seata/server/Server.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server; +import jakarta.annotation.Resource; import org.apache.seata.common.XID; import org.apache.seata.common.holder.ObjectHolder; import org.apache.seata.common.thread.NamedThreadFactory; @@ -35,7 +36,6 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; diff --git a/server/src/main/java/org/apache/seata/server/ServerRunner.java b/server/src/main/java/org/apache/seata/server/ServerRunner.java index 94545399a56..a363a726e78 100644 --- a/server/src/main/java/org/apache/seata/server/ServerRunner.java +++ b/server/src/main/java/org/apache/seata/server/ServerRunner.java @@ -16,19 +16,19 @@ */ package org.apache.seata.server; +import jakarta.annotation.Resource; import org.apache.seata.core.rpc.Disposable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.boot.web.server.context.WebServerInitializedEvent; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/server/src/main/java/org/apache/seata/server/cluster/manager/ClusterWatcherManager.java b/server/src/main/java/org/apache/seata/server/cluster/manager/ClusterWatcherManager.java index 2d3d0cfaf87..860ca616cd9 100644 --- a/server/src/main/java/org/apache/seata/server/cluster/manager/ClusterWatcherManager.java +++ b/server/src/main/java/org/apache/seata/server/cluster/manager/ClusterWatcherManager.java @@ -31,6 +31,7 @@ import io.netty.handler.codec.http2.DefaultHttp2Headers; import io.netty.handler.codec.http2.DefaultHttp2HeadersFrame; import io.netty.handler.codec.http2.Http2Headers; +import jakarta.annotation.PostConstruct; import org.apache.seata.common.ConfigurationKeys; import org.apache.seata.common.Constants; import org.apache.seata.common.metadata.MetadataResponse; @@ -51,7 +52,6 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashSet; diff --git a/server/src/main/java/org/apache/seata/server/cluster/raft/context/SeataClusterContext.java b/server/src/main/java/org/apache/seata/server/cluster/raft/context/SeataClusterContext.java index 0f783a1b1bd..a9825707937 100644 --- a/server/src/main/java/org/apache/seata/server/cluster/raft/context/SeataClusterContext.java +++ b/server/src/main/java/org/apache/seata/server/cluster/raft/context/SeataClusterContext.java @@ -16,14 +16,13 @@ */ package org.apache.seata.server.cluster.raft.context; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; import org.apache.seata.common.ConfigurationKeys; import org.apache.seata.config.ConfigurationFactory; import org.apache.seata.core.context.ContextCore; import org.apache.seata.core.context.ContextCoreLoader; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - import static org.apache.seata.common.DefaultValues.DEFAULT_SEATA_GROUP; /** diff --git a/server/src/main/java/org/apache/seata/server/config/ServerConfig.java b/server/src/main/java/org/apache/seata/server/config/ServerConfig.java index 067666e1d81..9cc7e309d7e 100644 --- a/server/src/main/java/org/apache/seata/server/config/ServerConfig.java +++ b/server/src/main/java/org/apache/seata/server/config/ServerConfig.java @@ -16,7 +16,7 @@ */ package org.apache.seata.server.config; -import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.boot.web.server.autoconfigure.ServerProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java b/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java index 5b82b605a13..1510551dd19 100644 --- a/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java +++ b/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.console.controller; +import jakarta.annotation.Resource; import org.apache.seata.common.result.SingleResult; import org.apache.seata.server.console.service.BranchSessionService; import org.slf4j.Logger; @@ -25,8 +26,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; - /** * Branch Session Controller */ diff --git a/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java b/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java index fb7e3054f0c..ec37b3b2104 100644 --- a/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java +++ b/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.console.controller; +import jakarta.annotation.Resource; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.result.SingleResult; import org.apache.seata.server.console.entity.param.GlobalLockParam; @@ -29,8 +30,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; - /** * Global Lock Controller */ diff --git a/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java b/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java index a7703bc4100..48c5531c47b 100644 --- a/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java +++ b/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.console.controller; +import jakarta.annotation.Resource; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.result.SingleResult; import org.apache.seata.server.console.entity.param.GlobalSessionParam; @@ -30,8 +31,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; - /** * Global Session Controller */ diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java index 16e772e7d14..1acaf087917 100644 --- a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java +++ b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.console.impl.db; +import jakarta.annotation.Resource; import org.apache.seata.common.ConfigurationKeys; import org.apache.seata.common.exception.StoreException; import org.apache.seata.common.loader.EnhancedServiceLoader; @@ -36,7 +37,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/server/src/main/java/org/apache/seata/server/controller/ClusterController.java b/server/src/main/java/org/apache/seata/server/controller/ClusterController.java index b3f124bebc3..ef875f0eca6 100644 --- a/server/src/main/java/org/apache/seata/server/controller/ClusterController.java +++ b/server/src/main/java/org/apache/seata/server/controller/ClusterController.java @@ -18,6 +18,7 @@ import com.alipay.sofa.jraft.RouteTable; import com.alipay.sofa.jraft.conf.Configuration; +import jakarta.annotation.Resource; import org.apache.seata.common.metadata.MetadataResponse; import org.apache.seata.common.result.Result; import org.apache.seata.common.rpc.http.HttpContext; @@ -31,7 +32,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; import java.util.Map; @RestController diff --git a/server/src/main/java/org/apache/seata/server/instance/AbstractSeataInstanceStrategy.java b/server/src/main/java/org/apache/seata/server/instance/AbstractSeataInstanceStrategy.java index 00d8a8eef39..21ff3663757 100644 --- a/server/src/main/java/org/apache/seata/server/instance/AbstractSeataInstanceStrategy.java +++ b/server/src/main/java/org/apache/seata/server/instance/AbstractSeataInstanceStrategy.java @@ -16,6 +16,9 @@ */ package org.apache.seata.server.instance; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; import org.apache.seata.common.metadata.Instance; import org.apache.seata.common.thread.NamedThreadFactory; import org.apache.seata.core.protocol.Version; @@ -25,12 +28,9 @@ import org.apache.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.boot.web.server.autoconfigure.ServerProperties; import org.springframework.context.ApplicationContext; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; import java.util.Arrays; import java.util.Optional; import java.util.concurrent.ScheduledExecutorService; diff --git a/server/src/main/java/org/apache/seata/server/instance/RaftServerInstanceStrategy.java b/server/src/main/java/org/apache/seata/server/instance/RaftServerInstanceStrategy.java index 230933baa4d..a231e648306 100644 --- a/server/src/main/java/org/apache/seata/server/instance/RaftServerInstanceStrategy.java +++ b/server/src/main/java/org/apache/seata/server/instance/RaftServerInstanceStrategy.java @@ -17,6 +17,7 @@ package org.apache.seata.server.instance; import com.alipay.sofa.jraft.entity.PeerId; +import jakarta.annotation.Resource; import org.apache.seata.common.XID; import org.apache.seata.common.holder.ObjectHolder; import org.apache.seata.common.metadata.ClusterRole; @@ -36,8 +37,6 @@ import org.springframework.core.env.PropertySource; import org.springframework.scheduling.annotation.Async; -import javax.annotation.Resource; - import static org.apache.seata.common.ConfigurationKeys.META_PREFIX; import static org.apache.seata.common.Constants.OBJECT_KEY_SPRING_CONFIGURABLE_ENVIRONMENT; diff --git a/server/src/main/java/org/apache/seata/server/storage/redis/JedisPooledFactory.java b/server/src/main/java/org/apache/seata/server/storage/redis/JedisPooledFactory.java index 583f30275e6..e9ce9a004ef 100644 --- a/server/src/main/java/org/apache/seata/server/storage/redis/JedisPooledFactory.java +++ b/server/src/main/java/org/apache/seata/server/storage/redis/JedisPooledFactory.java @@ -26,10 +26,10 @@ import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolAbstract; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisSentinelPool; import redis.clients.jedis.Protocol; +import redis.clients.jedis.util.Pool; import java.util.Arrays; import java.util.HashSet; @@ -47,7 +47,7 @@ public class JedisPooledFactory { */ protected static final Logger LOGGER = LoggerFactory.getLogger(JedisPooledFactory.class); - private static volatile JedisPoolAbstract jedisPool = null; + private static volatile Pool jedisPool = null; private static final String HOST = "127.0.0.1"; @@ -63,11 +63,11 @@ public class JedisPooledFactory { * * @return redisPool */ - public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisPools) { + public static Pool getJedisPoolInstance(Pool... jedisPools) { if (jedisPool == null) { synchronized (JedisPooledFactory.class) { if (jedisPool == null) { - JedisPoolAbstract tempJedisPool = null; + Pool tempJedisPool = null; if (jedisPools != null && jedisPools.length > 0) { tempJedisPool = jedisPools[0]; } else { diff --git a/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java b/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java index f5d14070943..c27ebc1dae3 100644 --- a/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java +++ b/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java @@ -54,7 +54,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -500,7 +499,7 @@ public List readSortByTimeoutBeginSessions(boolean withBranchSess // queryCount final long queryCount = Math.min(logQueryLimit, countGlobalSessions); try (Jedis jedis = JedisPooledFactory.getJedisInstance()) { - Set values = jedis.zrangeByScore( + List values = jedis.zrangeByScore( REDIS_SEATA_BEGIN_TRANSACTIONS_KEY, 0, System.currentTimeMillis(), 0, (int) queryCount); List> rep; try (Pipeline pipeline = jedis.pipelined()) { diff --git a/server/src/test/java/org/apache/seata/server/LoaderConfTest.java b/server/src/test/java/org/apache/seata/server/LoaderConfTest.java index 811615dcf00..1125715a825 100644 --- a/server/src/test/java/org/apache/seata/server/LoaderConfTest.java +++ b/server/src/test/java/org/apache/seata/server/LoaderConfTest.java @@ -16,12 +16,13 @@ */ package org.apache.seata.server; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; +import static org.junit.jupiter.api.Assertions.assertEquals; + /** * */ @@ -42,10 +43,10 @@ public static void initSessionManager(ApplicationContext context) throws Excepti @Test public void checkConf() { String nacosServerAddr = environment.resolveRequiredPlaceholders("${seata.config.nacos.serverAddr:localhost}"); - Assertions.assertEquals(nacosServerAddr, "127.0.0.1:8848"); + assertEquals("127.0.0.1:8848", nacosServerAddr); String nacosNamespace = environment.resolveRequiredPlaceholders("${seata.config.nacos.namespace:seata-group}"); - Assertions.assertEquals(nacosNamespace, "seata-test"); + assertEquals("seata-test", nacosNamespace); String undologSaveDays = environment.resolveRequiredPlaceholders("${seata.server.undo.log-save-days:7}"); - Assertions.assertEquals(undologSaveDays, "2"); + assertEquals("2", undologSaveDays); } } diff --git a/server/src/test/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImplTest.java b/server/src/test/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImplTest.java index 7d34b978acb..b8d2ef935f6 100644 --- a/server/src/test/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImplTest.java +++ b/server/src/test/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImplTest.java @@ -24,8 +24,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; import javax.sql.DataSource; @@ -49,7 +49,7 @@ class BranchSessionDBServiceImplTest extends BaseSpringBootTest { @Autowired private BranchSessionDBServiceImpl branchSessionDBService; - @MockBean + @MockitoBean private DataSource dataSource; private Connection connection; diff --git a/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImplTest.java b/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImplTest.java index 6c60f7aac9e..03e8fb675d1 100644 --- a/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImplTest.java +++ b/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImplTest.java @@ -27,8 +27,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; import javax.sql.DataSource; @@ -52,7 +52,7 @@ class GlobalLockDBServiceImplTest extends BaseSpringBootTest { @Autowired private GlobalLockDBServiceImpl globalLockDBService; - @MockBean + @MockitoBean private DataSource dataSource; private Connection connection; diff --git a/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImplTest.java b/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImplTest.java index c91abfcdf4d..3b29ea43110 100644 --- a/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImplTest.java +++ b/server/src/test/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImplTest.java @@ -27,8 +27,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; import javax.sql.DataSource; @@ -51,10 +51,10 @@ class GlobalSessionDBServiceImplTest extends BaseSpringBootTest { @Autowired private GlobalSessionDBServiceImpl globalSessionDBService; - @MockBean + @MockitoBean private DataSource dataSource; - @MockBean + @MockitoBean private BranchSessionService branchSessionService; private Connection connection; diff --git a/server/src/test/java/org/apache/seata/server/instance/RaftServerInstanceStrategyTest.java b/server/src/test/java/org/apache/seata/server/instance/RaftServerInstanceStrategyTest.java index d5d59d94fbf..07d9f63603c 100644 --- a/server/src/test/java/org/apache/seata/server/instance/RaftServerInstanceStrategyTest.java +++ b/server/src/test/java/org/apache/seata/server/instance/RaftServerInstanceStrategyTest.java @@ -40,7 +40,7 @@ import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.boot.web.server.autoconfigure.ServerProperties; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MutablePropertySources; diff --git a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java index e045d0437ed..568d56dad53 100644 --- a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java +++ b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.lock; +import jakarta.annotation.Resource; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.store.SessionMode; import org.apache.seata.common.util.CollectionUtils; @@ -38,7 +39,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.springframework.context.ApplicationContext; -import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collection; diff --git a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java index 894959e499a..c4dda6323da 100644 --- a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java +++ b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java @@ -18,6 +18,7 @@ import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.util.ContextSelectorStaticBinder; import ch.qos.logback.core.Appender; import com.github.danielwegener.logback.kafka.KafkaAppender; import net.logstash.logback.appender.LogstashTcpSocketAppender; @@ -26,7 +27,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.slf4j.impl.StaticLoggerBinder; import java.lang.reflect.Field; import java.util.Iterator; @@ -43,7 +43,8 @@ public static void init() { @Test public void testAppenderEnabled() { - LoggerContext lc = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory(); + LoggerContext lc = + (LoggerContext) ContextSelectorStaticBinder.getSingleton().getContextSelector(); Iterator> appenderIterator = lc.getLogger("ROOT").iteratorForAppenders(); diff --git a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java index f4c22f7b448..77de755c649 100644 --- a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java +++ b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java @@ -16,6 +16,7 @@ */ package org.apache.seata.server.session; +import jakarta.annotation.Resource; import org.apache.commons.lang3.time.DateUtils; import org.apache.seata.common.XID; import org.apache.seata.common.loader.EnhancedServiceLoader; @@ -43,7 +44,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.springframework.context.ApplicationContext; -import javax.annotation.Resource; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; diff --git a/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java b/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java index b21babacd0c..19602acecd7 100644 --- a/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java +++ b/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java @@ -17,6 +17,7 @@ package org.apache.seata.server.session.redis; import com.alibaba.fastjson.JSON; +import jakarta.annotation.Resource; import org.apache.seata.common.result.PageResult; import org.apache.seata.server.BaseSpringBootTest; import org.apache.seata.server.console.entity.param.GlobalLockParam; @@ -28,8 +29,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfSystemProperty; -import javax.annotation.Resource; - /** */ @EnabledIfSystemProperty(named = "redisCaseEnabled", matches = "true") diff --git a/server/src/test/java/org/apache/seata/server/storage/redis/JedisPooledFactoryTest.java b/server/src/test/java/org/apache/seata/server/storage/redis/JedisPooledFactoryTest.java index 2f82489552b..e794766bd8b 100644 --- a/server/src/test/java/org/apache/seata/server/storage/redis/JedisPooledFactoryTest.java +++ b/server/src/test/java/org/apache/seata/server/storage/redis/JedisPooledFactoryTest.java @@ -24,8 +24,8 @@ import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolAbstract; import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.util.Pool; import java.lang.reflect.Field; @@ -37,7 +37,7 @@ public void setUp() throws Exception { // Reset the singleton jedisPool field to null before each test to ensure test isolation Field jedisPoolField = JedisPooledFactory.class.getDeclaredField("jedisPool"); jedisPoolField.setAccessible(true); - JedisPoolAbstract existingPool = (JedisPoolAbstract) jedisPoolField.get(null); + Pool existingPool = (Pool) jedisPoolField.get(null); // Close existing pool if present to prevent resource leaks if (existingPool != null) { @@ -53,7 +53,7 @@ public void tearDown() throws Exception { // Clean up resources after each test Field jedisPoolField = JedisPooledFactory.class.getDeclaredField("jedisPool"); jedisPoolField.setAccessible(true); - JedisPoolAbstract pool = (JedisPoolAbstract) jedisPoolField.get(null); + Pool pool = (Pool) jedisPoolField.get(null); if (pool != null) { pool.close(); @@ -72,7 +72,7 @@ public void testGetJedisPoolInstanceWithProvidedPool() { JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379, 60000); - JedisPoolAbstract poolInstance = JedisPooledFactory.getJedisPoolInstance(jedisPool); + Pool poolInstance = JedisPooledFactory.getJedisPoolInstance(jedisPool); Assertions.assertNotNull(poolInstance); Assertions.assertEquals(jedisPool, poolInstance); @@ -86,8 +86,8 @@ public void testGetJedisPoolInstanceSingleton() { JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379, 60000); - JedisPoolAbstract instance1 = JedisPooledFactory.getJedisPoolInstance(jedisPool); - JedisPoolAbstract instance2 = JedisPooledFactory.getJedisPoolInstance(); + Pool instance1 = JedisPooledFactory.getJedisPoolInstance(jedisPool); + Pool instance2 = JedisPooledFactory.getJedisPoolInstance(); Assertions.assertNotNull(instance1); Assertions.assertNotNull(instance2); diff --git a/server/src/test/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManagerTest.java b/server/src/test/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManagerTest.java index 3ad93bfeee4..ed4c2961ceb 100644 --- a/server/src/test/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManagerTest.java +++ b/server/src/test/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManagerTest.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Map; -import java.util.Set; @EnabledIfSystemProperty(named = "redisCaseEnabled", matches = "true") public class RedisTransactionStoreManagerTest extends BaseSpringBootTest { @@ -254,7 +253,7 @@ public void testInsertGlobalTransactionDO() throws Exception { Assertions.assertTrue(statusList.contains("testGlobalXid:111")); // Verify timeout sorted set - Set timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); + List timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); Assertions.assertTrue(timeoutSet.contains(globalKey)); // Cleanup @@ -292,7 +291,7 @@ public void testDeleteGlobalTransactionDO() throws Exception { List statusList = jedis.lrange(statusKey, 0, -1); Assertions.assertFalse(statusList.contains("testGlobalXid:222")); - Set timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); + List timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); Assertions.assertFalse(timeoutSet.contains(globalKey)); } } From 76775561b2db1d49f94d8598da45c0d254e2a119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Thu, 16 Apr 2026 19:19:16 +0800 Subject: [PATCH 02/22] feature: disabled test AppenderTest#testAppenderEnabled --- .../java/org/apache/seata/server/logging/AppenderTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java index c4dda6323da..8cef845b0bf 100644 --- a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java +++ b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java @@ -26,7 +26,6 @@ import org.apache.seata.server.logging.logback.appender.MetricLogbackAppender; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; import java.lang.reflect.Field; import java.util.Iterator; @@ -41,7 +40,7 @@ public static void init() { System.setProperty("logging.extend.metric-appender.enabled", "true"); } - @Test + // @Test public void testAppenderEnabled() { LoggerContext lc = (LoggerContext) ContextSelectorStaticBinder.getSingleton().getContextSelector(); From 97a44d8b7a7fd32e1d6ead4e1516c0070e53b2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:17:30 +0800 Subject: [PATCH 03/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: recover --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88a927d4670..289634d6087 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -101,9 +101,9 @@ jobs: run: | ./mvnw -T 4C clean test \ -pl '!server,!test-suite/test-new-version,!extensions/apm/apm-seata-skywalking-plugin' \ - -Dpmd.skip=false -Dlicense.skip=false -DredisCaseEnabled=true -DnacosCaseEnabled=true \ + -Dlicense.skip=false -DredisCaseEnabled=true -DnacosCaseEnabled=true \ -e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - # step 6.2 + # step 6.3 - name: "Test with Maven and Java${{ matrix.java }}" if: matrix.java != '8' run: | From 8bedc77a30e4e10c4f1b3429ce228f89fe0154a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:24:23 +0800 Subject: [PATCH 04/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix jackson 3 --- .../seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java b/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java index 821dc8e418f..e399d869ddc 100644 --- a/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java +++ b/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java @@ -16,7 +16,6 @@ */ package org.apache.seata.mcp.service.impl; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.utils.JwtTokenUtils; import org.apache.seata.mcp.core.props.NameSpaceDetail; @@ -32,6 +31,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.RestClient; +import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.List; From 4188fdc6148b54c3ceb5da0522a1a63602445de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:28:14 +0800 Subject: [PATCH 05/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: clean --- .../apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java index 077264d3e04..10e766eaa5f 100644 --- a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java +++ b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java @@ -38,7 +38,6 @@ import org.springframework.util.StreamUtils; import org.springframework.web.client.RestClient; import org.springframework.web.client.RestClientException; -import org.springframework.web.client.RestTemplate; import tools.jackson.databind.ObjectMapper; import java.io.IOException; From 2da5ce145b408be4ef649ed770f41ea4ff493488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:30:16 +0800 Subject: [PATCH 06/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix objectMapper.readValue --- .../java/org/apache/seata/mcp/tools/GlobalLockTools.java | 7 ++++++- .../org/apache/seata/mcp/tools/GlobalSessionTools.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java index 6df0818a5ec..782e901f241 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java @@ -33,6 +33,7 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; import tools.jackson.core.type.TypeReference; import tools.jackson.databind.ObjectMapper; @@ -91,7 +92,11 @@ public PageResult queryGlobalLock( PageResult result = null; String response = mcpRPCService.getCallTC( nameSpaceDetail, RPCConstant.GLOBAL_LOCK_BASE_URL + "/query", param, null, null); - result = objectMapper.readValue(response, new TypeReference>() {}); + try { + result = objectMapper.readValue(response, new TypeReference>() {}); + } catch (JacksonException e) { + logger.error(e.getMessage()); + } if (result == null) { return PageResult.failure("", "query global lock failed"); } else { diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java index 25ec298fb33..f60d9eb6eff 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java @@ -34,6 +34,7 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; import tools.jackson.core.type.TypeReference; import tools.jackson.databind.ObjectMapper; @@ -101,7 +102,11 @@ public PageResult queryGlobalSession( PageResult pageResult = null; String result = mcpRPCService.getCallTC( nameSpaceDetail, RPCConstant.GLOBAL_SESSION_BASE_URL + "/query", param, null, null); - pageResult = objectMapper.readValue(result, new TypeReference>() {}); + try { + pageResult = objectMapper.readValue(result, new TypeReference>() {}); + } catch (JacksonException e) { + logger.error(e.getMessage()); + } if (pageResult == null) { return PageResult.failure("", "query global session failed"); } else { From 9b9b7fb8bd79ff149f2872829d8a61197ad2402a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:32:25 +0800 Subject: [PATCH 07/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix objectMapper.readTree --- .../org/apache/seata/mcp/tools/NameSpaceTools.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java index bfdc423db08..2a20824da34 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java @@ -21,6 +21,7 @@ import org.apache.seata.mcp.service.ConsoleApiService; import org.springaicommunity.mcp.annotation.McpTool; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; import tools.jackson.databind.JsonNode; import tools.jackson.databind.ObjectMapper; @@ -43,10 +44,14 @@ public NameSpaceTools(ConsoleApiService mcpRPCService, ObjectMapper objectMapper public SingleResult getTCNameSpaces() { String result = mcpRPCService.getCallNameSpace(RPCConstant.GET_NAMESPACE_PATH); Map nameSpacesVo = new HashMap<>(); - JsonNode root = objectMapper.readTree(result); - JsonNode dataNode = root.get("data"); - if (dataNode != null && !dataNode.isNull()) { - nameSpacesVo.put("namespaces", dataNode.toString()); + try { + JsonNode root = objectMapper.readTree(result); + JsonNode dataNode = root.get("data"); + if (dataNode != null && !dataNode.isNull()) { + nameSpacesVo.put("namespaces", dataNode.toString()); + } + } catch (JacksonException e) { + return SingleResult.failure("Get namespace failed:" + e.getMessage()); } return SingleResult.success(nameSpacesVo); } From 7559add665676bd1b1549e889337a519ebcb0ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:34:19 +0800 Subject: [PATCH 08/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix import --- .../java/org/apache/seata/namingserver/config/WebConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java b/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java index 3d536b2c2ed..78afca51519 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/config/WebConfig.java @@ -30,6 +30,7 @@ import java.time.Duration; import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_REQUEST_TIMEOUT; +import static org.apache.seata.namingserver.contants.NamingConstant.DEFAULT_WRITE_TIMEOUT; @Configuration public class WebConfig { From e5266cf41eb3c4d9d8cc47eb1580ef0c22a1f44e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:34:34 +0800 Subject: [PATCH 09/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix objectMapper.writeValueAsString --- .../namingserver/service/ConsoleLocalServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java index 5ad0f0f0a59..f556b81f4fc 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java @@ -37,6 +37,7 @@ import org.springframework.util.StreamUtils; import org.springframework.web.client.RestClient; import org.springframework.web.client.RestClientException; +import tools.jackson.core.JacksonException; import tools.jackson.databind.ObjectMapper; import java.io.IOException; @@ -175,6 +176,13 @@ public String putCallTC( @Override public String getCallNameSpace(String path) { - return objectMapper.writeValueAsString(namingManager.namespace()); + String namespace; + try { + namespace = objectMapper.writeValueAsString(namingManager.namespace()); + } catch (JacksonException e) { + LOGGER.error("Get NameSpace failed: {}", e.getMessage()); + return "Failed to get namespace"; + } + return namespace; } } From d2a827638cbb6626ea276d88f05c17fa571ceaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 16:47:57 +0800 Subject: [PATCH 10/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: fix jackson 3 --- .../seata/namingserver/service/ConsoleLocalServiceImplTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java index 4a6d71c8476..3202d76bdca 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java @@ -16,7 +16,6 @@ */ package org.apache.seata.namingserver.service; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.metadata.ClusterRole; import org.apache.seata.common.metadata.Node; import org.apache.seata.common.metadata.namingserver.NamingServerNode; @@ -30,6 +29,7 @@ import org.springframework.http.HttpStatus; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.RestClient; +import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.List; From c6417c397f415d1a40801e931911dc014cdc50f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 17:17:41 +0800 Subject: [PATCH 11/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.5: add dependency --- namingserver/pom.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/namingserver/pom.xml b/namingserver/pom.xml index 71b2c459514..b181f5c3f22 100644 --- a/namingserver/pom.xml +++ b/namingserver/pom.xml @@ -171,7 +171,16 @@ org.springframework.boot - spring-boot-webmvc-test + spring-boot-starter-restclient + + + org.springframework.boot + spring-boot-starter-restclient-test + test + + + org.springframework.boot + spring-boot-starter-webmvc-test test From c56c0f0447225f738cea0dffbf631f8c926dfc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 17:45:10 +0800 Subject: [PATCH 12/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.6 --- console/pom.xml | 6 +++--- namingserver/pom.xml | 6 +++--- server/pom.xml | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/console/pom.xml b/console/pom.xml index d0381cb9b4c..a12077bd373 100644 --- a/console/pom.xml +++ b/console/pom.xml @@ -32,10 +32,10 @@ console for Seata built with Maven - 4.0.5 - 7.0.6 + 4.0.6 + 7.0.7 2.0 - 11.0.20 + 11.0.21 1.1.0 diff --git a/namingserver/pom.xml b/namingserver/pom.xml index b181f5c3f22..46ab795dc89 100644 --- a/namingserver/pom.xml +++ b/namingserver/pom.xml @@ -32,10 +32,10 @@ 25 - 4.0.5 - 7.0.6 + 4.0.6 + 7.0.7 2.0 - 11.0.20 + 11.0.21 diff --git a/server/pom.xml b/server/pom.xml index 1ad2b3023e6..fdf3070c376 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -32,8 +32,8 @@ server for Seata built with Maven - 4.0.5 - 7.0.6 + 4.0.6 + 7.0.7 2.0 6.0.3 From 421999cf5e4ae2dbf7647266bb325efcaf4d437e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Wed, 29 Apr 2026 17:56:25 +0800 Subject: [PATCH 13/22] feature: console/namingserver/server: spring-boot upgrade to 4.0.6: fix AppenderTest --- server/src/main/resources/logback-spring.xml | 6 ++++ .../seata/server/logging/AppenderTest.java | 36 ++++++++++++------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/server/src/main/resources/logback-spring.xml b/server/src/main/resources/logback-spring.xml index 880cb910115..a303251e67e 100644 --- a/server/src/main/resources/logback-spring.xml +++ b/server/src/main/resources/logback-spring.xml @@ -155,6 +155,12 @@ + + + + + + diff --git a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java index 8cef845b0bf..bf9a1a3fd2a 100644 --- a/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java +++ b/server/src/test/java/org/apache/seata/server/logging/AppenderTest.java @@ -18,39 +18,43 @@ import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.util.ContextSelectorStaticBinder; import ch.qos.logback.core.Appender; import com.github.danielwegener.logback.kafka.KafkaAppender; import net.logstash.logback.appender.LogstashTcpSocketAppender; import org.apache.seata.server.BaseSpringBootTest; import org.apache.seata.server.logging.logback.appender.MetricLogbackAppender; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.springframework.test.context.TestPropertySource; import java.lang.reflect.Field; import java.util.Iterator; +@TestPropertySource( + properties = { + "logging.extend.logstash-appender.enabled=true", + "logging.extend.kafka-appender.enabled=true", + "logging.extend.kafka-appender.topic=test", + "logging.extend.metric-appender.enabled=true" + }) public class AppenderTest extends BaseSpringBootTest { - @BeforeAll - public static void init() { - System.setProperty("logging.extend.logstash-appender.enabled", "true"); - System.setProperty("logging.extend.kafka-appender.enabled", "true"); - System.setProperty("logging.extend.kafka-appender.topic", "test"); - System.setProperty("logging.extend.metric-appender.enabled", "true"); - } - - // @Test + @Test public void testAppenderEnabled() { - LoggerContext lc = - (LoggerContext) ContextSelectorStaticBinder.getSingleton().getContextSelector(); + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); Iterator> appenderIterator = lc.getLogger("ROOT").iteratorForAppenders(); + boolean kafkaFound = false; + boolean metricFound = false; + boolean logstashFound = false; + while (appenderIterator.hasNext()) { Appender appender = appenderIterator.next(); if (appender.getName().equals("KAFKA")) { KafkaAppender kafkaAppender = (KafkaAppender) appender; + kafkaFound = true; try { // use reflection to obtain the "protect topic" fields of the abstract class inherited by the @@ -69,12 +73,18 @@ public void testAppenderEnabled() { if (appender.getName().equals("METRIC")) { Assertions.assertInstanceOf(MetricLogbackAppender.class, appender); + metricFound = true; } if (appender.getName().equals("LOGSTASH")) { Assertions.assertInstanceOf(LogstashTcpSocketAppender.class, appender); + logstashFound = true; } } + + Assertions.assertTrue(kafkaFound); + Assertions.assertTrue(metricFound); + Assertions.assertTrue(logstashFound); } private static Field getDeclaredFieldRecursive(Class clazz, String fieldName) throws NoSuchFieldException { From 00f911fde3778be1c9a0291e3ff20615622e0a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Fri, 8 May 2026 10:06:48 +0800 Subject: [PATCH 14/22] =?UTF-8?q?optimize:=20console/namingserver/server?= =?UTF-8?q?=20modules=EF=BC=9Aspring-boot=20upgrade=20to=204.0.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index a0dc518bc77..508ab6d0b4e 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -62,7 +62,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#8031](https://github.com/apache/incubator-seata/pull/8031)] upgrade some dependencies versions - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] add the dependency jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] simplify jackson related dependencies -- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server modules:spring-boot upgrade to 4.0.5 +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server modules:spring-boot upgrade to 4.0.6 - [[#8057](https://github.com/apache/incubator-seata/pull/8057)] remove p3c, use maven-checkstyle-plugin, only check PR changes - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)] remove p3c, use maven-checkstyle-plugin, only check PR changes - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)]/[[#8087](https://github.com/apache/incubator-seata/pull/8087)] remove p3c, use maven-checkstyle-plugin, only check PR changes diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 03ed7aae3d0..530ad993dcc 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -63,7 +63,7 @@ - [[#8031](https://github.com/apache/incubator-seata/pull/8031)] 升级一些依赖版本 - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] 添加依赖 jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] 简化 jackson 相关依赖 -- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server 模块:spring-boot 升级到 4.0.5 +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server 模块:spring-boot 升级到 4.0.6 - [[#8057](https://github.com/apache/incubator-seata/pull/8057)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)]/[[#8087](https://github.com/apache/incubator-seata/pull/8087)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 From 22585c230f97b6ec1d365196928423b3e8ed2f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Tue, 12 May 2026 20:27:01 +0800 Subject: [PATCH 15/22] chore: remove duplicate changelog entries --- changes/en-us/2.x.md | 2 -- changes/zh-cn/2.x.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index 50d36e8cd89..fdf0227849f 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -64,8 +64,6 @@ Add changes here for all PR submitted to the 2.x branch. - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] add the dependency jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] simplify jackson related dependencies - [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server modules:spring-boot upgrade to 4.0.6 -- [[#8057](https://github.com/apache/incubator-seata/pull/8057)] remove p3c, use maven-checkstyle-plugin, only check PR changes -- [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)] remove p3c, use maven-checkstyle-plugin, only check PR changes - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)]/[[#8087](https://github.com/apache/incubator-seata/pull/8087)] remove p3c, use maven-checkstyle-plugin, only check PR changes - [[#8063](https://github.com/apache/incubator-seata/pull/8063)] bump commons-io:commons-io from 2.8.0 to 2.21.0 - [[#8064](https://github.com/apache/incubator-seata/pull/8064)] bump org.apache.kafka:kafka-clients from 3.6.1 to 3.9.2 diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 0833fcffdd0..1a19d087fd8 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -65,8 +65,6 @@ - [[#8030](https://github.com/apache/incubator-seata/pull/8030)] 添加依赖 jackson-datatype-jsr310 - [[#8043](https://github.com/apache/incubator-seata/pull/8043)] 简化 jackson 相关依赖 - [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server 模块:spring-boot 升级到 4.0.6 -- [[#8057](https://github.com/apache/incubator-seata/pull/8057)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 -- [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 - [[#8057](https://github.com/apache/incubator-seata/pull/8057)]/[[#8085](https://github.com/apache/incubator-seata/pull/8085)]/[[#8087](https://github.com/apache/incubator-seata/pull/8087)] 删除 p3c, 使用 maven-checkstyle-plugin, 仅检查 PR 变更 - [[#8063](https://github.com/apache/incubator-seata/pull/8063)] 将 commons-io:commons-io 从 2.8.0 版本升级到 2.21.0 版本 - [[#8064](https://github.com/apache/incubator-seata/pull/8064)] 将 org.apache.kafka:kafka-clients 从 3.6.1 版本升级到 3.9.2 版本 From c8d20de437704453626561ded7b73dc55045ad05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Mon, 8 Jun 2026 12:26:06 +0800 Subject: [PATCH 16/22] adapt: update AutoConfigureMockMvc import for Spring Boot 4.x webmvc test package --- .../org/apache/seata/namingserver/WebSecurityConfigTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java index 7539c0cde15..7bb33560423 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java @@ -19,8 +19,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.test.web.servlet.MockMvc; import static org.junit.jupiter.api.Assertions.assertTrue; From f128f2a32c4dcb2b8a912d6a31d20d9e51e37299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Tue, 9 Jun 2026 11:56:49 +0800 Subject: [PATCH 17/22] feature: server: spring-boot upgrade to 4.0.6 --- console/pom.xml | 4 +- .../seata/console/config/JacksonConfig.java | 39 ++++++++++--------- .../console/config/WebSecurityConfig.java | 24 ++---------- .../apache/seata/mcp/core/utils/UrlUtils.java | 4 +- .../impl/ConsoleRemoteServiceImpl.java | 2 +- .../seata/mcp/tools/GlobalLockTools.java | 8 ++-- .../seata/mcp/tools/GlobalSessionTools.java | 8 ++-- .../seata/mcp/tools/NameSpaceTools.java | 8 ++-- .../impl/ConsoleRemoteServiceImplTest.java | 2 +- namingserver/pom.xml | 18 +-------- .../service/ConsoleLocalServiceImpl.java | 6 +-- ...uthControllerWithCustomPropertiesTest.java | 4 +- .../AuthControllerWithRandomPasswordTest.java | 4 +- .../namingserver/WebSecurityConfigTest.java | 2 +- .../service/ConsoleLocalServiceImplTest.java | 2 +- 15 files changed, 53 insertions(+), 82 deletions(-) diff --git a/console/pom.xml b/console/pom.xml index 2ff2f2f0b32..594de337913 100644 --- a/console/pom.xml +++ b/console/pom.xml @@ -32,8 +32,8 @@ console for Seata built with Maven - 4.0.6 - 7.0.7 + 3.5.2 + 6.2.8 2.0 11.0.22 1.1.0 diff --git a/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java b/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java index 88ab6452f1e..cda691a133e 100644 --- a/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java +++ b/console/src/main/java/org/apache/seata/console/config/JacksonConfig.java @@ -16,13 +16,14 @@ */ package org.apache.seata.console.config; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import tools.jackson.core.JacksonException; -import tools.jackson.core.JsonGenerator; -import tools.jackson.databind.SerializationContext; -import tools.jackson.databind.ValueSerializer; -import tools.jackson.databind.module.SimpleModule; + +import java.io.IOException; @Configuration(proxyBeanMethods = false) public class JacksonConfig { @@ -31,19 +32,19 @@ public class JacksonConfig { * convert long to string for return to the front end */ @Bean - public SimpleModule customModule() { - SimpleModule module = new SimpleModule(); - module.addSerializer(Long.class, new ValueSerializer() { - @Override - public void serialize(Long value, JsonGenerator jsonGenerator, SerializationContext ctxt) - throws JacksonException { - if (value == null) { - jsonGenerator.writeString(""); - } else { - jsonGenerator.writeString(value.toString()); - } - } - }); - return module; + public Jackson2ObjectMapperBuilderCustomizer longToStringCustomizer() { + return jacksonObjectMapperBuilder -> + jacksonObjectMapperBuilder.serializerByType(Long.class, new JsonSerializer() { + @Override + public void serialize( + Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (value == null) { + jsonGenerator.writeString(""); + } else { + jsonGenerator.writeString(value.toString()); + } + } + }); } } diff --git a/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java b/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java index 5db35019f50..dc773eeabb0 100644 --- a/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java +++ b/console/src/main/java/org/apache/seata/console/config/WebSecurityConfig.java @@ -16,14 +16,12 @@ */ package org.apache.seata.console.config; -import jakarta.servlet.http.HttpServletRequest; import org.apache.seata.common.util.StringUtils; import org.apache.seata.console.filter.JwtAuthenticationTokenFilter; import org.apache.seata.console.security.CustomUserDetailsServiceImpl; import org.apache.seata.console.security.JwtAuthenticationEntryPoint; import org.apache.seata.console.utils.JwtTokenUtils; import org.apache.seata.mcp.core.props.MCPProperties; -import org.jspecify.annotations.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -41,8 +39,8 @@ import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher; -import org.springframework.util.AntPathMatcher; import java.util.Arrays; import java.util.List; @@ -100,9 +98,9 @@ public PasswordEncoder passwordEncoder() { } @Bean - public AuthenticationManager authenticationManager(PasswordEncoder passwordEncoder) { + public AuthenticationManager authenticationManager() { DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(userDetailsService); - authenticationProvider.setPasswordEncoder(passwordEncoder); + authenticationProvider.setPasswordEncoder(passwordEncoder()); return new ProviderManager(authenticationProvider); } @@ -152,21 +150,7 @@ private RequestMatcher[] buildAntMatchers(String patterns) { .filter(StringUtils::isNotBlank) // PathPatternParser using the new version of Security cannot directly achieve the same matching effect // as the deprecated Ant style mode /**/*.css - .map(pattern -> new RequestMatcher() { - private final AntPathMatcher matcher = new AntPathMatcher(); - - @Override - public boolean matches(@NonNull HttpServletRequest request) { - String path = request.getServletPath(); - if (request.getPathInfo() != null) { - path += request.getPathInfo(); - } - if (path == null || path.isEmpty()) { - path = "/"; - } - return matcher.match(pattern, path); - } - }) + .map(AntPathRequestMatcher::new) .toArray(RequestMatcher[]::new); } } diff --git a/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java b/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java index a8e2bf0fe1a..6820c8f9064 100644 --- a/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java +++ b/console/src/main/java/org/apache/seata/mcp/core/utils/UrlUtils.java @@ -16,11 +16,11 @@ */ package org.apache.seata.mcp.core.utils; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.util.UriComponentsBuilder; -import tools.jackson.core.type.TypeReference; -import tools.jackson.databind.ObjectMapper; import java.util.Collections; import java.util.HashMap; diff --git a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java index 10e766eaa5f..8586acb3f50 100644 --- a/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java +++ b/console/src/main/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImpl.java @@ -16,6 +16,7 @@ */ package org.apache.seata.mcp.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.exception.AuthenticationFailedException; import org.apache.seata.common.util.StringUtils; import org.apache.seata.console.config.WebSecurityConfig; @@ -38,7 +39,6 @@ import org.springframework.util.StreamUtils; import org.springframework.web.client.RestClient; import org.springframework.web.client.RestClientException; -import tools.jackson.databind.ObjectMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java index 782e901f241..ca6e034ea6f 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalLockTools.java @@ -16,6 +16,9 @@ */ package org.apache.seata.mcp.tools; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.util.StringUtils; import org.apache.seata.mcp.core.constant.RPCConstant; @@ -33,9 +36,6 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; -import tools.jackson.core.JacksonException; -import tools.jackson.core.type.TypeReference; -import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -94,7 +94,7 @@ public PageResult queryGlobalLock( nameSpaceDetail, RPCConstant.GLOBAL_LOCK_BASE_URL + "/query", param, null, null); try { result = objectMapper.readValue(response, new TypeReference>() {}); - } catch (JacksonException e) { + } catch (JsonProcessingException e) { logger.error(e.getMessage()); } if (result == null) { diff --git a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java index f60d9eb6eff..b3697e5ddeb 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/GlobalSessionTools.java @@ -16,6 +16,9 @@ */ package org.apache.seata.mcp.tools; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.PageResult; import org.apache.seata.common.util.StringUtils; import org.apache.seata.core.model.GlobalStatus; @@ -34,9 +37,6 @@ import org.springaicommunity.mcp.annotation.McpTool; import org.springaicommunity.mcp.annotation.McpToolParam; import org.springframework.stereotype.Service; -import tools.jackson.core.JacksonException; -import tools.jackson.core.type.TypeReference; -import tools.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.HashMap; @@ -104,7 +104,7 @@ public PageResult queryGlobalSession( nameSpaceDetail, RPCConstant.GLOBAL_SESSION_BASE_URL + "/query", param, null, null); try { pageResult = objectMapper.readValue(result, new TypeReference>() {}); - } catch (JacksonException e) { + } catch (JsonProcessingException e) { logger.error(e.getMessage()); } if (pageResult == null) { diff --git a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java index 2a20824da34..1decea87730 100644 --- a/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java +++ b/console/src/main/java/org/apache/seata/mcp/tools/NameSpaceTools.java @@ -16,14 +16,14 @@ */ package org.apache.seata.mcp.tools; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.SingleResult; import org.apache.seata.mcp.core.constant.RPCConstant; import org.apache.seata.mcp.service.ConsoleApiService; import org.springaicommunity.mcp.annotation.McpTool; import org.springframework.stereotype.Service; -import tools.jackson.core.JacksonException; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -50,7 +50,7 @@ public SingleResult getTCNameSpaces() { if (dataNode != null && !dataNode.isNull()) { nameSpacesVo.put("namespaces", dataNode.toString()); } - } catch (JacksonException e) { + } catch (JsonProcessingException e) { return SingleResult.failure("Get namespace failed:" + e.getMessage()); } return SingleResult.success(nameSpacesVo); diff --git a/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java b/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java index e399d869ddc..821dc8e418f 100644 --- a/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java +++ b/console/src/test/java/org/apache/seata/mcp/service/impl/ConsoleRemoteServiceImplTest.java @@ -16,6 +16,7 @@ */ package org.apache.seata.mcp.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.utils.JwtTokenUtils; import org.apache.seata.mcp.core.props.NameSpaceDetail; @@ -31,7 +32,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.RestClient; -import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.List; diff --git a/namingserver/pom.xml b/namingserver/pom.xml index 705fdce08af..7359e004c36 100644 --- a/namingserver/pom.xml +++ b/namingserver/pom.xml @@ -32,8 +32,8 @@ 25 - 4.0.6 - 7.0.7 + 3.5.2 + 6.2.8 2.0 11.0.22 @@ -169,20 +169,6 @@ org.apache.commons commons-lang3 - - org.springframework.boot - spring-boot-starter-restclient - - - org.springframework.boot - spring-boot-starter-restclient-test - test - - - org.springframework.boot - spring-boot-starter-webmvc-test - test - diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java index f556b81f4fc..3dcbc943313 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImpl.java @@ -16,6 +16,8 @@ */ package org.apache.seata.namingserver.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.metadata.ClusterRole; import org.apache.seata.common.metadata.Node; import org.apache.seata.common.metadata.namingserver.NamingServerNode; @@ -37,8 +39,6 @@ import org.springframework.util.StreamUtils; import org.springframework.web.client.RestClient; import org.springframework.web.client.RestClientException; -import tools.jackson.core.JacksonException; -import tools.jackson.databind.ObjectMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -179,7 +179,7 @@ public String getCallNameSpace(String path) { String namespace; try { namespace = objectMapper.writeValueAsString(namingManager.namespace()); - } catch (JacksonException e) { + } catch (JsonProcessingException e) { LOGGER.error("Get NameSpace failed: {}", e.getMessage()); return "Failed to get namespace"; } diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java index 8623f6ba460..26f7689daee 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithCustomPropertiesTest.java @@ -16,18 +16,18 @@ */ package org.apache.seata.namingserver; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.Code; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.security.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import tools.jackson.databind.ObjectMapper; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java index db9446cabbd..c9279f4d2e5 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/AuthControllerWithRandomPasswordTest.java @@ -16,20 +16,20 @@ */ package org.apache.seata.namingserver; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.result.Code; import org.apache.seata.console.config.WebSecurityConfig; import org.apache.seata.console.security.User; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.system.CapturedOutput; import org.springframework.boot.test.system.OutputCaptureExtension; -import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import tools.jackson.databind.ObjectMapper; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java index 7bb33560423..7539c0cde15 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/WebSecurityConfigTest.java @@ -19,8 +19,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.test.web.servlet.MockMvc; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java b/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java index 3202d76bdca..4a6d71c8476 100644 --- a/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java +++ b/namingserver/src/test/java/org/apache/seata/namingserver/service/ConsoleLocalServiceImplTest.java @@ -16,6 +16,7 @@ */ package org.apache.seata.namingserver.service; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.seata.common.metadata.ClusterRole; import org.apache.seata.common.metadata.Node; import org.apache.seata.common.metadata.namingserver.NamingServerNode; @@ -29,7 +30,6 @@ import org.springframework.http.HttpStatus; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.RestClient; -import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.List; From 49af9033a0f62bf7a6b2312ce0e45175ce534a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Tue, 9 Jun 2026 11:58:11 +0800 Subject: [PATCH 18/22] feature: server: spring-boot upgrade to 4.0.6 --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index ec04b98b57f..6cf034d4eac 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -25,7 +25,7 @@ Add changes here for all PR submitted to the 2.x branch. ### optimize: -- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server modules:spring-boot upgrade to 4.0.6 +- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server modules:spring-boot upgrade to 4.0.6 ### security: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index 0b75c29655e..533677d4b79 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -25,7 +25,7 @@ ### optimize: -- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver/server 模块:spring-boot 升级到 4.0.6 +- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server 模块:spring-boot 升级到 4.0.6 ### security: From 922045f1f65da0751141047757e4c06c9ec0892f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Mon, 22 Jun 2026 22:47:12 +0800 Subject: [PATCH 19/22] style: apply spotless formatting to LockStoreDataBaseDAOBatchAcquireTest --- .../LockStoreDataBaseDAOBatchAcquireTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/server/src/test/java/org/apache/seata/server/storage/db/lock/LockStoreDataBaseDAOBatchAcquireTest.java b/server/src/test/java/org/apache/seata/server/storage/db/lock/LockStoreDataBaseDAOBatchAcquireTest.java index cfe18a5f94e..b294c626a12 100644 --- a/server/src/test/java/org/apache/seata/server/storage/db/lock/LockStoreDataBaseDAOBatchAcquireTest.java +++ b/server/src/test/java/org/apache/seata/server/storage/db/lock/LockStoreDataBaseDAOBatchAcquireTest.java @@ -16,14 +16,6 @@ */ package org.apache.seata.server.storage.db.lock; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; -import javax.sql.DataSource; - import org.apache.seata.common.ConfigurationKeys; import org.apache.seata.config.ConfigurationFactory; import org.apache.seata.core.model.LockStatus; @@ -33,6 +25,14 @@ import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.anyString; From 324b02321549b96eb20eb5c65536b9c32bd65d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Thu, 25 Jun 2026 11:44:15 +0800 Subject: [PATCH 20/22] style: fix full-width colon to half-width colon in changelog --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index 226d2ecd809..e8ffacf603b 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -30,7 +30,7 @@ Add changes here for all PR submitted to the 2.x branch. ### optimize: -- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server modules:spring-boot upgrade to 4.0.6 +- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server modules: spring-boot upgrade to 4.0.6 ### security: diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index be46be431c6..77a68bc3fae 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -29,7 +29,7 @@ ### optimize: -- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server 模块:spring-boot 升级到 4.0.6 +- [[#8137](https://github.com/apache/incubator-seata/pull/8137)] server 模块: spring-boot 升级到 4.0.6 ### security: From 55a45ddbcf92e6ded6f1c0c014b08e4b83efe80f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Thu, 25 Jun 2026 13:46:29 +0800 Subject: [PATCH 21/22] optimize: move JDK 17+ modules into Maven profile with auto-activation - Move server, test-suite/test-new-version modules to JDK17Plus profile in root pom.xml, activated automatically on JDK 17+ - Move apm-seata-skywalking-plugin to JDK17Plus profile in extensions/apm/pom.xml - Remove manual module exclusions in CI build.yml for Java 8, since Maven profiles now handle this automatically --- .github/workflows/build.yml | 1 - extensions/apm/pom.xml | 16 ++++++++++++++-- pom.xml | 15 +++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1f5957688d..2d0b8749077 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -106,7 +106,6 @@ jobs: if: matrix.java == '8' run: | ./mvnw -T 4C clean test \ - -pl '!server,!test-suite/test-new-version,!extensions/apm/apm-seata-skywalking-plugin' \ -Dlicense.skip=false -DredisCaseEnabled=true -DnacosCaseEnabled=true \ -e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn # step 6.3 diff --git a/extensions/apm/pom.xml b/extensions/apm/pom.xml index 8778b913ad6..94b5a2a230c 100644 --- a/extensions/apm/pom.xml +++ b/extensions/apm/pom.xml @@ -33,6 +33,18 @@ APM extensions for Seata built with Maven - apm-seata-skywalking-plugin + - \ No newline at end of file + + + + JDK17Plus + + [17,) + + + apm-seata-skywalking-plugin + + + + diff --git a/pom.xml b/pom.xml index 05129717f49..412ddfd2693 100644 --- a/pom.xml +++ b/pom.xml @@ -57,10 +57,10 @@ compressor saga sqlparser - server + integration-tx-api - test-suite/test-new-version + test-suite/test-old-version test-suite/seata-benchmark-cli json-common @@ -129,6 +129,17 @@ + + + JDK17Plus + + [17,) + + + server + test-suite/test-new-version + + JDK21Plus From 1c9b82968f21d1c7a36d15105cc9855794c0bb31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Thu, 25 Jun 2026 14:03:25 +0800 Subject: [PATCH 22/22] optimize: remove test-suite/test-new-version from include-test-modules profile - test-suite/test-new-version depends on server module which requires JDK 17+, keeping it in include-test-modules would cause build failure on JDK < 17 - The module is already declared in JDK17Plus profile for JDK 17+ activation --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 412ddfd2693..47dfb4bc7d3 100644 --- a/pom.xml +++ b/pom.xml @@ -383,7 +383,7 @@ distribution - test-suite/test-new-version + test-suite/test-old-version