Skip to content

Commit abd50be

Browse files
authored
Make execution strategies configurable (#281)
1 parent 1e8f034 commit abd50be

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

graphql-jpa-query-boot-starter/src/main/java/com/introproventures/graphql/jpa/query/boot/autoconfigure/GraphQLJpaQueryAutoConfiguration.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
import graphql.GraphQL;
4343
import graphql.GraphQLContext;
44+
import graphql.execution.ExecutionStrategy;
4445
import graphql.execution.instrumentation.Instrumentation;
4546
import graphql.schema.GraphQLSchema;
4647
import graphql.schema.visibility.GraphqlFieldVisibility;
@@ -80,13 +81,19 @@ public GraphQLSchemaConfigurer graphQLJpaQuerySchemaConfigurer(GraphQLSchemaBuil
8081
public GraphQLExecutorContextFactory graphQLJpaExecutorContextFactory(ObjectProvider<GraphQLExecutionInputFactory> graphQLExecutionInputFactory,
8182
ObjectProvider<Supplier<GraphqlFieldVisibility>> graphqlFieldVisibility,
8283
ObjectProvider<Supplier<Instrumentation>> instrumentation,
83-
ObjectProvider<Supplier<GraphQLContext>> graphqlContext) {
84+
ObjectProvider<Supplier<GraphQLContext>> graphqlContext,
85+
ObjectProvider<Supplier<ExecutionStrategy>> queryExecutionStrategy,
86+
ObjectProvider<Supplier<ExecutionStrategy>> mutationExecutionStrategy,
87+
ObjectProvider<Supplier<ExecutionStrategy>> subscriptionExecutionStrategy) {
8488
GraphQLJpaExecutorContextFactory bean = new GraphQLJpaExecutorContextFactory();
8589

8690
graphQLExecutionInputFactory.ifAvailable(bean::withExecutionInputFactory);
8791
graphqlFieldVisibility.ifAvailable(bean::withGraphqlFieldVisibility);
8892
instrumentation.ifAvailable(bean::withInstrumentation);
8993
graphqlContext.ifAvailable(bean::withGraphqlContext);
94+
queryExecutionStrategy.ifAvailable(bean::withQueryExecutionStrategy);
95+
mutationExecutionStrategy.ifAvailable(bean::withMutationExecutionStrategy);
96+
subscriptionExecutionStrategy.ifAvailable(bean::withSubscriptionExecutionStrategy);
9097

9198
return bean;
9299
}

graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaExecutorContext.java

+41-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import graphql.ExecutionInput;
3030
import graphql.GraphQL;
3131
import graphql.GraphQLContext;
32+
import graphql.execution.ExecutionStrategy;
3233
import graphql.execution.instrumentation.ChainedInstrumentation;
3334
import graphql.execution.instrumentation.Instrumentation;
3435
import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation;
@@ -48,6 +49,9 @@ public class GraphQLJpaExecutorContext implements GraphQLExecutorContext {
4849
private final Supplier<GraphQLContext> graphqlContext;
4950
private final Supplier<DataLoaderDispatcherInstrumentationOptions> dataLoaderDispatcherInstrumentationOptions;
5051
private final Supplier<DataLoaderRegistry> dataLoaderRegistry;
52+
private final Supplier<ExecutionStrategy> queryExecutionStrategy;
53+
private final Supplier<ExecutionStrategy> mutationExecutionStrategy;
54+
private final Supplier<ExecutionStrategy> subscriptionExecutionStrategy;
5155

5256
private GraphQLJpaExecutorContext(Builder builder) {
5357
this.graphQLSchema = builder.graphQLSchema;
@@ -57,6 +61,9 @@ private GraphQLJpaExecutorContext(Builder builder) {
5761
this.graphqlContext = builder.graphqlContext;
5862
this.dataLoaderDispatcherInstrumentationOptions = builder.dataLoaderDispatcherInstrumentationOptions;
5963
this.dataLoaderRegistry = builder.dataLoaderRegistry;
64+
this.queryExecutionStrategy = builder.queryExecutionStrategy;
65+
this.mutationExecutionStrategy = builder.mutationExecutionStrategy;
66+
this.subscriptionExecutionStrategy = builder.subscriptionExecutionStrategy;
6067
}
6168

6269
@Override
@@ -74,7 +81,10 @@ public GraphQL.Builder newGraphQL() {
7481
Instrumentation instrumentation = newIstrumentation();
7582

7683
return GraphQL.newGraphQL(getGraphQLSchema())
77-
.instrumentation(instrumentation);
84+
.instrumentation(instrumentation)
85+
.queryExecutionStrategy(queryExecutionStrategy.get())
86+
.mutationExecutionStrategy(mutationExecutionStrategy.get())
87+
.subscriptionExecutionStrategy(subscriptionExecutionStrategy.get());
7888
}
7989

8090
public GraphQLContext newGraphQLContext(DataLoaderRegistry dataLoaderRegistry) {
@@ -135,6 +145,12 @@ public interface IBuildStage {
135145

136146
public IBuildStage dataLoaderRegistry(Supplier<DataLoaderRegistry> dataLoaderRegistry);
137147

148+
public IBuildStage queryExecutionStrategy(Supplier<ExecutionStrategy> queryExecutionStrategy);
149+
150+
public IBuildStage mutationExecutionStrategy(Supplier<ExecutionStrategy> mutationExecutionStrategy);
151+
152+
public IBuildStage subscriptionExecutionStrategy(Supplier<ExecutionStrategy> subscriptionExecutionStrategy);
153+
138154
public GraphQLJpaExecutorContext build();
139155
}
140156

@@ -150,6 +166,9 @@ public static final class Builder implements IGraphQLSchemaStage, IBuildStage {
150166
private Supplier<GraphQLContext> graphqlContext;
151167
private Supplier<DataLoaderDispatcherInstrumentationOptions> dataLoaderDispatcherInstrumentationOptions;
152168
private Supplier<DataLoaderRegistry> dataLoaderRegistry;
169+
private Supplier<ExecutionStrategy> queryExecutionStrategy;
170+
private Supplier<ExecutionStrategy> mutationExecutionStrategy;
171+
private Supplier<ExecutionStrategy> subscriptionExecutionStrategy;
153172

154173
private Builder() {
155174
}
@@ -198,6 +217,27 @@ public IBuildStage dataLoaderRegistry(Supplier<DataLoaderRegistry> dataLoaderReg
198217
return this;
199218
}
200219

220+
@Override
221+
public IBuildStage queryExecutionStrategy(Supplier<ExecutionStrategy> queryExecutionStrategy) {
222+
this.queryExecutionStrategy = queryExecutionStrategy;
223+
224+
return this;
225+
}
226+
227+
@Override
228+
public IBuildStage mutationExecutionStrategy(Supplier<ExecutionStrategy> mutationExecutionStrategy) {
229+
this.mutationExecutionStrategy = mutationExecutionStrategy;
230+
231+
return this;
232+
}
233+
234+
@Override
235+
public IBuildStage subscriptionExecutionStrategy(Supplier<ExecutionStrategy> subscriptionExecutionStrategy) {
236+
this.subscriptionExecutionStrategy = subscriptionExecutionStrategy;
237+
238+
return this;
239+
}
240+
201241
@Override
202242
public GraphQLJpaExecutorContext build() {
203243
return new GraphQLJpaExecutorContext(this);

graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaExecutorContextFactory.java

+27
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
import com.introproventures.graphql.jpa.query.schema.GraphQLExecutorContext;
2828
import com.introproventures.graphql.jpa.query.schema.GraphQLExecutorContextFactory;
2929
import graphql.GraphQLContext;
30+
import graphql.execution.AsyncExecutionStrategy;
31+
import graphql.execution.AsyncSerialExecutionStrategy;
32+
import graphql.execution.ExecutionStrategy;
33+
import graphql.execution.SubscriptionExecutionStrategy;
3034
import graphql.execution.instrumentation.Instrumentation;
3135
import graphql.execution.instrumentation.SimpleInstrumentation;
3236
import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentationOptions;
@@ -57,6 +61,10 @@ public class GraphQLJpaExecutorContextFactory implements GraphQLExecutorContextF
5761
return BatchLoaderRegistry.newDataLoaderRegistry(options);
5862
};
5963

64+
private Supplier<ExecutionStrategy> queryExecutionStrategy = AsyncExecutionStrategy::new;
65+
private Supplier<ExecutionStrategy> mutationExecutionStrategy = AsyncSerialExecutionStrategy::new;
66+
private Supplier<ExecutionStrategy> subscriptionExecutionStrategy = SubscriptionExecutionStrategy::new;
67+
6068

6169
public GraphQLJpaExecutorContextFactory() {
6270
}
@@ -71,6 +79,9 @@ public GraphQLExecutorContext newExecutorContext(GraphQLSchema graphQLSchema) {
7179
.graphqlContext(graphqlContext)
7280
.dataLoaderDispatcherInstrumentationOptions(dataLoaderDispatcherInstrumentationOptions)
7381
.dataLoaderRegistry(dataLoaderRegistry)
82+
.queryExecutionStrategy(queryExecutionStrategy)
83+
.mutationExecutionStrategy(mutationExecutionStrategy)
84+
.subscriptionExecutionStrategy(subscriptionExecutionStrategy)
7485
.build();
7586
}
7687

@@ -101,6 +112,22 @@ public GraphQLJpaExecutorContextFactory withDataLoaderDispatcherInstrumentationO
101112
return this;
102113
}
103114

115+
public GraphQLJpaExecutorContextFactory withQueryExecutionStrategy(Supplier<ExecutionStrategy> queryExecutionStrategy) {
116+
this.queryExecutionStrategy = queryExecutionStrategy;
117+
return this;
118+
}
119+
120+
public GraphQLJpaExecutorContextFactory withMutationExecutionStrategy(Supplier<ExecutionStrategy> mutationExecutionStrategy) {
121+
this.mutationExecutionStrategy = mutationExecutionStrategy;
122+
return this;
123+
}
124+
125+
public GraphQLJpaExecutorContextFactory withSubscriptionExecutionStrategy(Supplier<ExecutionStrategy> subscriptionExecutionStrategy) {
126+
this.subscriptionExecutionStrategy = subscriptionExecutionStrategy;
127+
return this;
128+
}
129+
130+
104131
public GraphQLExecutionInputFactory getExecutionInputFactory() {
105132
return executionInputFactory;
106133
}

0 commit comments

Comments
 (0)