diff --git a/platform/build.gradle b/platform/build.gradle index f08d0bf4..6bbe3415 100644 --- a/platform/build.gradle +++ b/platform/build.gradle @@ -23,7 +23,7 @@ dependencies { constraints { api("com.graphql-java:graphql-java:${graphQlJavaVersion}") - api("io.micrometer:context-propagation:1.0.0-M4") + api("io.micrometer:context-propagation:1.0.0-SNAPSHOT") api("jakarta.annotation:jakarta.annotation-api:2.0.0") api("jakarta.servlet:jakarta.servlet-api:5.0.0") diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/InvocableHandlerMethodSupport.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/InvocableHandlerMethodSupport.java index 3d90c4d1..315e9aae 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/InvocableHandlerMethodSupport.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/InvocableHandlerMethodSupport.java @@ -114,7 +114,7 @@ public abstract class InvocableHandlerMethodSupport extends HandlerMethod { return CompletableFuture.supplyAsync( () -> { try { - return ContextSnapshot.capture(graphQLContext).wrap((Callable) result).call(); + return ContextSnapshot.captureFrom(graphQLContext).wrap((Callable) result).call(); } catch (Exception ex) { throw new IllegalStateException( diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java index cb10d8f6..21a7a026 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java @@ -70,7 +70,7 @@ final class ContextDataFetcherDecorator implements DataFetcher { @Override public Object get(DataFetchingEnvironment environment) throws Exception { - ContextSnapshot snapshot = ContextSnapshot.capture(environment.getGraphQlContext()); + ContextSnapshot snapshot = ContextSnapshot.captureFrom(environment.getGraphQlContext()); Object value = snapshot.wrap(() -> this.delegate.get(environment)).call(); if (this.subscription) { diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/DataFetcherExceptionResolverAdapter.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/DataFetcherExceptionResolverAdapter.java index 8d92921d..b8c6c471 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/DataFetcherExceptionResolverAdapter.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/DataFetcherExceptionResolverAdapter.java @@ -98,7 +98,7 @@ public abstract class DataFetcherExceptionResolverAdapter implements DataFetcher return resolveToMultipleErrors(exception, env); } try { - return ContextSnapshot.capture(env.getGraphQlContext()) + return ContextSnapshot.captureFrom(env.getGraphQlContext()) .wrap(() -> resolveToMultipleErrors(exception, env)) .call(); } diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultBatchLoaderRegistry.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultBatchLoaderRegistry.java index 0920b9fe..ad20e6da 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultBatchLoaderRegistry.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultBatchLoaderRegistry.java @@ -190,7 +190,7 @@ public class DefaultBatchLoaderRegistry implements BatchLoaderRegistry { @Override public CompletionStage> load(List keys, BatchLoaderEnvironment environment) { GraphQLContext graphQLContext = environment.getContext(); - ContextSnapshot snapshot = ContextSnapshot.capture(graphQLContext); + ContextSnapshot snapshot = ContextSnapshot.captureFrom(graphQLContext); try { return snapshot.wrap(() -> this.loader.apply(keys, environment) @@ -245,7 +245,7 @@ public class DefaultBatchLoaderRegistry implements BatchLoaderRegistry { @Override public CompletionStage> load(Set keys, BatchLoaderEnvironment environment) { GraphQLContext graphQLContext = environment.getContext(); - ContextSnapshot snapshot = ContextSnapshot.capture(graphQLContext); + ContextSnapshot snapshot = ContextSnapshot.captureFrom(graphQLContext); try { return snapshot.wrap(() -> this.loader.apply(keys, environment) diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java index 95c8339d..0b1352fd 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java @@ -77,7 +77,7 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService { request.configureExecutionInput(RESET_EXECUTION_ID_CONFIGURER); } ExecutionInput executionInput = request.toExecutionInput(); - ContextSnapshot.capture(contextView).updateContext(executionInput.getGraphQLContext()); + ContextSnapshot.captureFrom(contextView).updateContext(executionInput.getGraphQLContext()); ExecutionInput updatedExecutionInput = registerDataLoaders(executionInput); return Mono.fromFuture(this.graphQlSource.graphQl().executeAsync(updatedExecutionInput)) .map(result -> new DefaultExecutionGraphQlResponse(updatedExecutionInput, result)); diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandler.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandler.java index a7eb59fb..372003ba 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandler.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandler.java @@ -70,7 +70,7 @@ class ExceptionResolversExceptionHandler implements DataFetcherExceptionHandler public CompletableFuture handleException(DataFetcherExceptionHandlerParameters params) { Throwable exception = unwrapException(params); DataFetchingEnvironment env = params.getDataFetchingEnvironment(); - ContextSnapshot snapshot = ContextSnapshot.capture(env.getGraphQlContext()); + ContextSnapshot snapshot = ContextSnapshot.captureFrom(env.getGraphQlContext()); try { return Flux.fromIterable(this.resolvers) .flatMap(resolver -> resolver.resolveException(exception, env)) diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/SubscriptionExceptionResolverAdapter.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/SubscriptionExceptionResolverAdapter.java index c5ea78f9..836c00be 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/SubscriptionExceptionResolverAdapter.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/SubscriptionExceptionResolverAdapter.java @@ -83,7 +83,7 @@ public abstract class SubscriptionExceptionResolverAdapter implements Subscripti public final Mono> resolveException(Throwable exception) { if (this.threadLocalContextAware) { return Mono.deferContextual(contextView -> { - ContextSnapshot snapshot = ContextSnapshot.capture(contextView); + ContextSnapshot snapshot = ContextSnapshot.captureFrom(contextView); try { List errors = snapshot.wrap(() -> resolveToMultipleErrors(exception)).call(); return Mono.justOrEmpty(errors); diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/DefaultWebGraphQlHandlerBuilder.java b/spring-graphql/src/main/java/org/springframework/graphql/server/DefaultWebGraphQlHandlerBuilder.java index cef049cd..c965fbf0 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/DefaultWebGraphQlHandlerBuilder.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/DefaultWebGraphQlHandlerBuilder.java @@ -87,7 +87,7 @@ class DefaultWebGraphQlHandlerBuilder implements WebGraphQlHandler.Builder { @Override public Mono handleRequest(WebGraphQlRequest request) { - ContextSnapshot snapshot = ContextSnapshot.capture(); + ContextSnapshot snapshot = ContextSnapshot.captureAll(); return executionChain.next(request).contextWrite(snapshot::updateContext); } }; diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandler.java b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandler.java index 276cb12a..f9686793 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandler.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandler.java @@ -360,7 +360,7 @@ public class GraphQlWebSocketHandler extends TextWebSocketHandler implements Sub ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) { - attributes.put(KEY, ContextSnapshot.capture()); + attributes.put(KEY, ContextSnapshot.captureAll()); return true; } @@ -373,7 +373,7 @@ public class GraphQlWebSocketHandler extends TextWebSocketHandler implements Sub public static AutoCloseable setThreadLocals(WebSocketSession session) { ContextSnapshot snapshot = (ContextSnapshot) session.getAttributes().get(KEY); Assert.notNull(snapshot, "Expected ContextSnapshot in WebSocketSession attributes"); - return snapshot.setThreadLocalValues(); + return snapshot.setThreadLocals(); } } diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingPrincipalMethodArgumentResolverTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingPrincipalMethodArgumentResolverTests.java index 591e1304..76371721 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingPrincipalMethodArgumentResolverTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingPrincipalMethodArgumentResolverTests.java @@ -60,7 +60,7 @@ public class BatchMappingPrincipalMethodArgumentResolverTests extends BatchMappi ReactiveSecurityContextHolder.withAuthentication(this.authentication); private final Function threadLocalContextWriter = context -> - ContextSnapshot.capture().updateContext(context); + ContextSnapshot.captureAll().updateContext(context); private static Stream controllers() { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPrincipalMethodArgumentResolverTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPrincipalMethodArgumentResolverTests.java index 3ad30fb2..42a559b2 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPrincipalMethodArgumentResolverTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPrincipalMethodArgumentResolverTests.java @@ -65,7 +65,7 @@ public class SchemaMappingPrincipalMethodArgumentResolverTests { ReactiveSecurityContextHolder.withAuthentication(this.authentication); private final Function threadLocalContextWriter = context -> - ContextSnapshot.capture().updateContext(context); + ContextSnapshot.captureAll().updateContext(context); private final GreetingController greetingController = new GreetingController(); @@ -206,4 +206,4 @@ public class SchemaMappingPrincipalMethodArgumentResolverTests { } -} \ No newline at end of file +} diff --git a/spring-graphql/src/test/java/org/springframework/graphql/execution/CompositeSubscriptionExceptionResolverTests.java b/spring-graphql/src/test/java/org/springframework/graphql/execution/CompositeSubscriptionExceptionResolverTests.java index b9b46e43..17f232ab 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/execution/CompositeSubscriptionExceptionResolverTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/execution/CompositeSubscriptionExceptionResolverTests.java @@ -108,7 +108,7 @@ public class CompositeSubscriptionExceptionResolverTests { .toGraphQl(); ExecutionInput input = ExecutionInput.newExecutionInput(query).build(); - ContextSnapshot.capture().updateContext(input.getGraphQLContext()); + ContextSnapshot.captureAll().updateContext(input.getGraphQLContext()); Flux flux = Mono.defer(() -> Mono.fromFuture(graphQL.executeAsync(input))) .map(ResponseHelper::forSubscription) diff --git a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java index b3857329..fc57d465 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java @@ -163,7 +163,7 @@ public class ContextDataFetcherDecoratorTests { .toGraphQl(); ExecutionInput input = ExecutionInput.newExecutionInput().query("{ greeting }").build(); - ContextSnapshot.capture().updateContext(input.getGraphQLContext()); + ContextSnapshot.captureAll().updateContext(input.getGraphQLContext()); Mono resultMono = Mono.delay(Duration.ofMillis(10)) .flatMap((aLong) -> Mono.fromFuture(graphQl.executeAsync(input))); diff --git a/spring-graphql/src/test/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandlerTests.java b/spring-graphql/src/test/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandlerTests.java index 575dffa6..d9590881 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandlerTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/execution/ExceptionResolversExceptionHandlerTests.java @@ -101,7 +101,7 @@ public class ExceptionResolversExceptionHandlerTests { .build()); resolver.setThreadLocalContextAware(true); - ContextSnapshot.capture().updateContext(this.input.getGraphQLContext()); + ContextSnapshot.captureAll().updateContext(this.input.getGraphQLContext()); Mono result = Mono.delay(Duration.ofMillis(10)).flatMap((aLong) -> Mono.fromFuture(this.graphQlSetup.exceptionResolver(resolver).toGraphQl().executeAsync(this.input))); diff --git a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandlerTests.java b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandlerTests.java index 48f53d13..7cddbb04 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandlerTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlWebSocketHandlerTests.java @@ -379,7 +379,7 @@ public class GraphQlWebSocketHandlerTests extends WebSocketHandlerTestSupport { GraphQlWebSocketHandler handler = initWebSocketHandler(threadLocalInterceptor); // Ensure ContextSnapshot is present in WebSocketSession attributes - this.session.getAttributes().put(ContextSnapshot.class.getName(), ContextSnapshot.capture()); + this.session.getAttributes().put(ContextSnapshot.class.getName(), ContextSnapshot.captureAll()); // Context should propagate, if message is handled on different thread Thread thread = new Thread(() -> { @@ -411,7 +411,7 @@ public class GraphQlWebSocketHandlerTests extends WebSocketHandlerTestSupport { if (!this.session.getAttributes().containsKey(ContextSnapshot.class.getName())) { // Ensure ContextSnapshot is present in WebSocketSession attributes - this.session.getAttributes().put(ContextSnapshot.class.getName(), ContextSnapshot.capture()); + this.session.getAttributes().put(ContextSnapshot.class.getName(), ContextSnapshot.captureAll()); } for (TextMessage message : textMessages) {