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 72bea95b798983be48159ed21249cd76b4a4d552 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:35:33 +0800 Subject: [PATCH 17/22] feature: console/namingserver: spring-boot upgrade to 4.0.6 --- .github/workflows/build.yml | 1 - changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- 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 +- server/src/main/resources/logback-spring.xml | 6 ---- .../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 | 32 +++++++------------ .../session/FileSessionManagerTest.java | 2 +- .../session/redis/RedisQueryConsolTest.java | 3 +- .../storage/redis/JedisPooledFactoryTest.java | 12 +++---- .../RedisTransactionStoreManagerTest.java | 5 +-- 30 files changed, 68 insertions(+), 83 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b7195d9c233..3ab798ef012 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -102,7 +102,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/changes/en-us/2.x.md b/changes/en-us/2.x.md index ec04b98b57f..e283ccf9544 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 +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver 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..cf34396573c 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 +- [[#8054](https://github.com/apache/incubator-seata/pull/8054)] console/namingserver 模块:spring-boot 升级到 4.0.6 ### security: diff --git a/server/pom.xml b/server/pom.xml index b7cd48a58cb..9de1f407868 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -32,10 +32,9 @@ server for Seata built with Maven - 4.0.6 - 7.0.7 + 2.7.18 + 5.3.39 2.0 - 6.0.3 @@ -98,10 +97,6 @@ - - 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 279ec87f5dc..9c2a579495a 100644 --- a/server/src/main/java/org/apache/seata/server/Server.java +++ b/server/src/main/java/org/apache/seata/server/Server.java @@ -16,7 +16,6 @@ */ 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.ThreadPoolExecutorFactory; @@ -36,6 +35,7 @@ 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 a363a726e78..94545399a56 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.server.context.WebServerInitializedEvent; +import org.springframework.boot.web.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 1ad8ae0e833..9d1ac984ab7 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,7 +31,6 @@ 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; @@ -52,6 +51,7 @@ 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 a9825707937..0f783a1b1bd 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,13 +16,14 @@ */ 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 9cc7e309d7e..067666e1d81 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.web.server.autoconfigure.ServerProperties; +import org.springframework.boot.autoconfigure.web.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 1510551dd19..5b82b605a13 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,7 +16,6 @@ */ 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; @@ -26,6 +25,8 @@ 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 ec37b3b2104..fb7e3054f0c 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,7 +16,6 @@ */ 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; @@ -30,6 +29,8 @@ 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 48c5531c47b..a7703bc4100 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,7 +16,6 @@ */ 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; @@ -31,6 +30,8 @@ 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 1acaf087917..16e772e7d14 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,7 +16,6 @@ */ 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; @@ -37,6 +36,7 @@ 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 ef875f0eca6..b3f124bebc3 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,7 +18,6 @@ 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; @@ -32,6 +31,7 @@ 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 48dc7ef50c0..fd739519013 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,9 +16,6 @@ */ 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.ThreadPoolExecutorFactory; import org.apache.seata.core.protocol.Version; @@ -28,9 +25,12 @@ import org.apache.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.boot.web.server.autoconfigure.ServerProperties; +import org.springframework.boot.autoconfigure.web.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 a231e648306..230933baa4d 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,7 +17,6 @@ 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; @@ -37,6 +36,8 @@ 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 e9ce9a004ef..583f30275e6 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 Pool jedisPool = null; + private static volatile JedisPoolAbstract jedisPool = null; private static final String HOST = "127.0.0.1"; @@ -63,11 +63,11 @@ public class JedisPooledFactory { * * @return redisPool */ - public static Pool getJedisPoolInstance(Pool... jedisPools) { + public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisPools) { if (jedisPool == null) { synchronized (JedisPooledFactory.class) { if (jedisPool == null) { - Pool tempJedisPool = null; + JedisPoolAbstract 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 c27ebc1dae3..f5d14070943 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,6 +54,7 @@ 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; @@ -499,7 +500,7 @@ public List readSortByTimeoutBeginSessions(boolean withBranchSess // queryCount final long queryCount = Math.min(logQueryLimit, countGlobalSessions); try (Jedis jedis = JedisPooledFactory.getJedisInstance()) { - List values = jedis.zrangeByScore( + Set 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/main/resources/logback-spring.xml b/server/src/main/resources/logback-spring.xml index a303251e67e..880cb910115 100644 --- a/server/src/main/resources/logback-spring.xml +++ b/server/src/main/resources/logback-spring.xml @@ -155,12 +155,6 @@ - - - - - - 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 1125715a825..811615dcf00 100644 --- a/server/src/test/java/org/apache/seata/server/LoaderConfTest.java +++ b/server/src/test/java/org/apache/seata/server/LoaderConfTest.java @@ -16,13 +16,12 @@ */ 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; - /** * */ @@ -43,10 +42,10 @@ public static void initSessionManager(ApplicationContext context) throws Excepti @Test public void checkConf() { String nacosServerAddr = environment.resolveRequiredPlaceholders("${seata.config.nacos.serverAddr:localhost}"); - assertEquals("127.0.0.1:8848", nacosServerAddr); + Assertions.assertEquals(nacosServerAddr, "127.0.0.1:8848"); String nacosNamespace = environment.resolveRequiredPlaceholders("${seata.config.nacos.namespace:seata-group}"); - assertEquals("seata-test", nacosNamespace); + Assertions.assertEquals(nacosNamespace, "seata-test"); String undologSaveDays = environment.resolveRequiredPlaceholders("${seata.server.undo.log-save-days:7}"); - assertEquals("2", undologSaveDays); + Assertions.assertEquals(undologSaveDays, "2"); } } 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 b8d2ef935f6..7d34b978acb 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; - @MockitoBean + @MockBean 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 03e8fb675d1..6c60f7aac9e 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; - @MockitoBean + @MockBean 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 3b29ea43110..c91abfcdf4d 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; - @MockitoBean + @MockBean private DataSource dataSource; - @MockitoBean + @MockBean 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 07d9f63603c..d5d59d94fbf 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.web.server.autoconfigure.ServerProperties; +import org.springframework.boot.autoconfigure.web.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 568d56dad53..e045d0437ed 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,7 +16,6 @@ */ 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; @@ -39,6 +38,7 @@ 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 bf9a1a3fd2a..894959e499a 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 @@ -24,37 +24,33 @@ 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 org.slf4j.impl.StaticLoggerBinder; 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 public void testAppenderEnabled() { - LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + LoggerContext lc = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory(); 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 @@ -73,18 +69,12 @@ 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 { 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 77de755c649..f4c22f7b448 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,7 +16,6 @@ */ 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; @@ -44,6 +43,7 @@ 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 19602acecd7..b21babacd0c 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,7 +17,6 @@ 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; @@ -29,6 +28,8 @@ 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 e794766bd8b..2f82489552b 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); - Pool existingPool = (Pool) jedisPoolField.get(null); + JedisPoolAbstract existingPool = (JedisPoolAbstract) 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); - Pool pool = (Pool) jedisPoolField.get(null); + JedisPoolAbstract pool = (JedisPoolAbstract) 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); - Pool poolInstance = JedisPooledFactory.getJedisPoolInstance(jedisPool); + JedisPoolAbstract 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); - Pool instance1 = JedisPooledFactory.getJedisPoolInstance(jedisPool); - Pool instance2 = JedisPooledFactory.getJedisPoolInstance(); + JedisPoolAbstract instance1 = JedisPooledFactory.getJedisPoolInstance(jedisPool); + JedisPoolAbstract 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 ed4c2961ceb..3ad93bfeee4 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,6 +29,7 @@ import java.util.List; import java.util.Map; +import java.util.Set; @EnabledIfSystemProperty(named = "redisCaseEnabled", matches = "true") public class RedisTransactionStoreManagerTest extends BaseSpringBootTest { @@ -253,7 +254,7 @@ public void testInsertGlobalTransactionDO() throws Exception { Assertions.assertTrue(statusList.contains("testGlobalXid:111")); // Verify timeout sorted set - List timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); + Set timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); Assertions.assertTrue(timeoutSet.contains(globalKey)); // Cleanup @@ -291,7 +292,7 @@ public void testDeleteGlobalTransactionDO() throws Exception { List statusList = jedis.lrange(statusKey, 0, -1); Assertions.assertFalse(statusList.contains("testGlobalXid:222")); - List timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); + Set timeoutSet = jedis.zrangeByScore("SEATA_BEGIN_TRANSACTIONS", 0, Double.MAX_VALUE); Assertions.assertFalse(timeoutSet.contains(globalKey)); } } From 3ce5cc34c926735052ce3727377534f8e92963b3 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:48:36 +0800 Subject: [PATCH 18/22] spotless: apply code 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 7f2f10d2f6151e09e215dbc41ba174c4c75b2d61 Mon Sep 17 00:00:00 2001 From: funkye <364176773@qq.com> Date: Thu, 2 Jul 2026 16:21:58 +0800 Subject: [PATCH 19/22] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../org/apache/seata/console/config/WebSecurityConfig.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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..26d381a4874 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 @@ -158,9 +158,8 @@ private RequestMatcher[] buildAntMatchers(String patterns) { @Override public boolean matches(@NonNull HttpServletRequest request) { String path = request.getServletPath(); - if (request.getPathInfo() != null) { - path += request.getPathInfo(); - } + String pathInfo = request.getPathInfo(); + path = (path == null ? "" : path) + (pathInfo == null ? "" : pathInfo); if (path == null || path.isEmpty()) { path = "/"; } From e4ddf763434d53832cd9ca15808485995c426aaa Mon Sep 17 00:00:00 2001 From: funkye <364176773@qq.com> Date: Fri, 3 Jul 2026 13:59:07 +0800 Subject: [PATCH 20/22] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../java/org/apache/seata/mcp/tools/GlobalSessionTools.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..5f797b17630 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 @@ -105,7 +105,7 @@ public PageResult queryGlobalSession( try { pageResult = objectMapper.readValue(result, new TypeReference>() {}); } catch (JacksonException e) { - logger.error(e.getMessage()); + logger.error("Failed to parse global session response", e); } if (pageResult == null) { return PageResult.failure("", "query global session failed"); From b173ecf718b9ebd1027045e43a656e6a8642820a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Mon, 6 Jul 2026 15:45:16 +0800 Subject: [PATCH 21/22] fix: log exception with stack trace instead of just message --- .../main/java/org/apache/seata/mcp/tools/GlobalLockTools.java | 2 +- .../seata/namingserver/service/ConsoleLocalServiceImpl.java | 2 +- 2 files changed, 2 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 782e901f241..8ab9f58c160 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 @@ -95,7 +95,7 @@ public PageResult queryGlobalLock( try { result = objectMapper.readValue(response, new TypeReference>() {}); } catch (JacksonException e) { - logger.error(e.getMessage()); + logger.error("Failed to parse global lock query response", e); } if (result == null) { return PageResult.failure("", "query global lock failed"); 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..b2c08f9e747 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 @@ -180,7 +180,7 @@ public String getCallNameSpace(String path) { try { namespace = objectMapper.writeValueAsString(namingManager.namespace()); } catch (JacksonException e) { - LOGGER.error("Get NameSpace failed: {}", e.getMessage()); + LOGGER.error("Get NameSpace failed:", e); return "Failed to get namespace"; } return namespace; From 84ee326dd84c1fd788466cb0dbd7cf970cfaf176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Mon, 6 Jul 2026 16:46:36 +0800 Subject: [PATCH 22/22] fix: migrate MCP console Jackson 2 API to Jackson 3 for Spring Boot 4.x - Replace JsonDeserializer with ValueDeserializer - Replace com.fasterxml.jackson imports with tools.jackson - Replace IOException with JacksonException in deserialize method - Update @JsonDeserialize import in VO classes --- .../core/config/TimestampToStringDeserializer.java | 12 ++++++------ .../seata/mcp/entity/vo/McpBranchSessionVO.java | 2 +- .../apache/seata/mcp/entity/vo/McpGlobalLockVO.java | 2 +- .../seata/mcp/entity/vo/McpGlobalSessionVO.java | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/console/src/main/java/org/apache/seata/mcp/core/config/TimestampToStringDeserializer.java b/console/src/main/java/org/apache/seata/mcp/core/config/TimestampToStringDeserializer.java index c53baf2af09..a333d63d782 100644 --- a/console/src/main/java/org/apache/seata/mcp/core/config/TimestampToStringDeserializer.java +++ b/console/src/main/java/org/apache/seata/mcp/core/config/TimestampToStringDeserializer.java @@ -16,21 +16,21 @@ */ package org.apache.seata.mcp.core.config; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.ValueDeserializer; -import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -public class TimestampToStringDeserializer extends JsonDeserializer { +public class TimestampToStringDeserializer extends ValueDeserializer { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override - public String deserialize(JsonParser p, DeserializationContext cxt) throws IOException { + public String deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException { long timestamp = p.getLongValue(); LocalDateTime dateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDateTime(); diff --git a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpBranchSessionVO.java b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpBranchSessionVO.java index e753afa95f8..d49f9e57b46 100644 --- a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpBranchSessionVO.java +++ b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpBranchSessionVO.java @@ -18,9 +18,9 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.apache.seata.mcp.core.config.TimestampToStringDeserializer; import org.apache.seata.server.console.entity.vo.BranchSessionVO; +import tools.jackson.databind.annotation.JsonDeserialize; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; diff --git a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalLockVO.java b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalLockVO.java index eaa4562cfe6..99afe800d01 100644 --- a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalLockVO.java +++ b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalLockVO.java @@ -16,8 +16,8 @@ */ package org.apache.seata.mcp.entity.vo; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.apache.seata.mcp.core.config.TimestampToStringDeserializer; +import tools.jackson.databind.annotation.JsonDeserialize; public class McpGlobalLockVO { diff --git a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalSessionVO.java b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalSessionVO.java index 594b5577fbb..a21110a7541 100644 --- a/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalSessionVO.java +++ b/console/src/main/java/org/apache/seata/mcp/entity/vo/McpGlobalSessionVO.java @@ -18,9 +18,9 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.apache.seata.mcp.core.config.TimestampToStringDeserializer; import org.apache.seata.server.console.entity.vo.GlobalSessionVO; +import tools.jackson.databind.annotation.JsonDeserialize; import java.util.Set;