Skip to content

Commit 1d59de7

Browse files
authored
Fix auto configuration to use operation's default execution strategy delegate (#411)
1 parent f2fc163 commit 1d59de7

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

autoconfigure/src/main/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaBuilderAutoConfiguration.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.introproventures.graphql.jpa.query.schema.RestrictedKeysProvider;
77
import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder;
88
import graphql.GraphQL;
9+
import graphql.execution.AsyncExecutionStrategy;
10+
import graphql.execution.SubscriptionExecutionStrategy;
911
import jakarta.persistence.EntityManager;
1012
import jakarta.persistence.EntityManagerFactory;
1113
import org.slf4j.Logger;
@@ -52,7 +54,8 @@ QueryExecutionStrategyProvider queryExecutionStrategy(
5254
var transactionTemplate = graphQLSchemaTransactionTemplate.get();
5355
transactionTemplate.setReadOnly(true);
5456

55-
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate);
57+
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate)
58+
.delegate(new AsyncExecutionStrategy());
5659

5760
executionStrategyCustomizer.ifAvailable(customizer -> customizer.accept(executionStrategy));
5861

@@ -69,7 +72,8 @@ MutationExecutionStrategyProvider mutationExecutionStrategy(
6972
var transactionTemplate = graphQLSchemaTransactionTemplate.get();
7073
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
7174

72-
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate);
75+
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate)
76+
.delegate(new AsyncExecutionStrategy());
7377

7478
executionStrategyCustomizer.ifAvailable(customizer -> customizer.accept(executionStrategy));
7579

@@ -85,8 +89,10 @@ SubscriptionExecutionStrategyProvider subscriptionExecutionStrategy(
8589
) {
8690
var transactionTemplate = graphQLSchemaTransactionTemplate.get();
8791
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
92+
transactionTemplate.setReadOnly(true);
8893

89-
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate);
94+
var executionStrategy = newTransactionalExecutionStrategy(transactionTemplate)
95+
.delegate(new SubscriptionExecutionStrategy());
9096

9197
executionStrategyCustomizer.ifAvailable(customizer -> customizer.accept(executionStrategy));
9298

autoconfigure/src/test/java/com/introproventures/graphql/jpa/query/autoconfigure/GraphQLSchemaAutoConfigurationTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import graphql.annotations.annotationTypes.GraphQLName;
2929
import graphql.annotations.annotationTypes.directives.definition.GraphQLDirectiveDefinition;
3030
import graphql.execution.AsyncSerialExecutionStrategy;
31+
import graphql.execution.SubscriptionExecutionStrategy;
3132
import graphql.scalars.ExtendedScalars;
3233
import graphql.schema.DataFetcher;
3334
import graphql.schema.GraphQLCodeRegistry;
@@ -141,9 +142,7 @@ TransactionalExecutionStrategyCustomizer<SubscriptionExecutionStrategyProvider>
141142
return builder ->
142143
builder
143144
.executor(threadPoolTaskExecutor)
144-
.delegate(new AsyncSerialExecutionStrategy())
145-
.transactionTemplate(transactionTemplate -> transactionTemplate.setTimeout(999))
146-
.transactionTemplate(transactionTemplate -> transactionTemplate.setReadOnly(true));
145+
.transactionTemplate(transactionTemplate -> transactionTemplate.setTimeout(999));
147146
}
148147

149148
@Configuration
@@ -508,7 +507,7 @@ void configuresSubscriptionTransactionalExecutionStrategyCustomizer() {
508507
.extracting(Supplier::get)
509508
.asInstanceOf(InstanceOfAssertFactories.type(TransactionalDelegateExecutionStrategy.class))
510509
.satisfies(result -> {
511-
assertThat(result.getDelegate()).isInstanceOf(AsyncSerialExecutionStrategy.class);
510+
assertThat(result.getDelegate()).isInstanceOf(SubscriptionExecutionStrategy.class);
512511
assertThat(result.getExecutor()).extracting(Supplier::get).isInstanceOf(ThreadPoolTaskExecutor.class);
513512
assertThat(result.getTransactionTemplate())
514513
.extracting(DefaultTransactionDefinition::getTimeout)

tests/boot-starter/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,17 @@
2525
</dependency>
2626
<dependency>
2727
<groupId>org.springframework.boot</groupId>
28-
<artifactId>spring-boot-starter-web</artifactId>
28+
<artifactId>spring-boot-starter-webflux</artifactId>
2929
</dependency>
3030
<dependency>
3131
<groupId>org.springframework.boot</groupId>
3232
<artifactId>spring-boot-starter-data-jpa</artifactId>
3333
</dependency>
34+
<dependency>
35+
<groupId>com.h2database</groupId>
36+
<artifactId>h2</artifactId>
37+
<scope>runtime</scope>
38+
</dependency>
3439
<dependency>
3540
<groupId>org.springframework.boot</groupId>
3641
<artifactId>spring-boot-starter-test</artifactId>

tests/boot-starter/src/main/resources/application.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ spring:
1414
name: GraphQLBooks
1515
description: GraphQL Books Schema Description
1616
enabled: true
17+
websocket:
18+
path: /graphql/ws
1719
sql:
1820
init:
1921
data-locations:

0 commit comments

Comments
 (0)