Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spring-example: Upgrade graphql-spring-boot-starter to 11.0.0 #103

Merged
merged 7 commits into from
Apr 20, 2021
6 changes: 1 addition & 5 deletions graphql-java-support/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<artifactId>junit-jupiter</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Expand Down
26 changes: 13 additions & 13 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,38 +61,44 @@
<maven.compiler.target>${java.version}</maven.compiler.target>
<cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version>
<graphql-java.version>16.1</graphql-java.version>
<graphql-spring-boot.version>5.10.0</graphql-spring-boot.version>
<graphql-java-kickstart.version>11.0.0</graphql-java-kickstart.version>
<java.version>1.8</java.version>
<jetbrains-annotations.version>17.0.0</jetbrains-annotations.version>
<junit.version>5.4.2</junit.version>
<junit.version>5.7.1</junit.version>
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
<maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
<maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
<maven-source-plugin.version>3.1.0</maven-source-plugin.version>
<maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
<nexus-staging-maven-plugin.version>1.6.8</nexus-staging-maven-plugin.version>
<slf4j.version>1.7.30</slf4j.version>
<spring-boot.version>2.1.6.RELEASE</spring-boot.version>
<spring-boot.version>2.3.6.RELEASE</spring-boot.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>${graphql-spring-boot.version}</version>
<version>${graphql-java-kickstart.version}</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>${graphql-spring-boot.version}</version>
<version>${graphql-java-kickstart.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter-test</artifactId>
<version>${graphql-spring-boot.version}</version>
<version>${graphql-java-kickstart.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>${graphql-java-kickstart.version}</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
Expand All @@ -106,13 +112,7 @@
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
Expand Down
7 changes: 6 additions & 1 deletion spring-example/README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
This Spring Boot application contains examples for both a microservice using standard `graphql-java` and a microservice using `graphql-java-tools`; their code is separated under different subpackages and Spring profiles.

To run the example, cd to the root of this project, then...
To run the standard `graphql-java` example, `cd` to the root of this project, then...
```
## compile and install project including example and dependencies
mvn install -Dgpg.skip
## start local webserver on 9000
mvn -pl spring-example spring-boot:run
```
To run the `graphql-java-tools` example, for the last step instead run:
```
mvn -pl spring-example spring-boot:run -Dspring-boot.run.profiles=graphql-java-tools
```
Now you can query your local graph:
```
## e.g.
Expand Down
6 changes: 5 additions & 1 deletion spring-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<artifactId>junit-jupiter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
Expand All @@ -49,6 +49,10 @@
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
package com.apollographql.federation.springexample;

import com.apollographql.federation.graphqljava.tracing.FederatedTracingInstrumentation;
import graphql.execution.instrumentation.Instrumentation;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}

@Bean
public Instrumentation addFederatedTracing() {
return new FederatedTracingInstrumentation(new FederatedTracingInstrumentation.Options(true));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.apollographql.federation.springexample.graphqljava;

import com.apollographql.federation.graphqljava.Federation;
import com.apollographql.federation.graphqljava._Entity;
import com.apollographql.federation.graphqljava.tracing.FederatedTracingInstrumentation;
import graphql.schema.GraphQLSchema;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Configuration
@Profile("graphql-java")
public class AppConfiguration {
@Bean
public GraphQLSchema graphQLSchema(@Value("classpath:schemas/graphql-java/inventory.graphql") Resource sdl) throws IOException {
return Federation.transform(sdl.getFile())
.fetchEntities(env -> env.<List<Map<String, Object>>>getArgument(_Entity.argumentName)
.stream()
.map(reference -> {
if ("Product".equals(reference.get("__typename"))) {
return Product.resolveReference(reference);
}
return null;
})
.collect(Collectors.toList()))
.resolveEntityType(env -> {
final Object src = env.getObject();
if (src instanceof Product) {
return env.getSchema().getObjectType("Product");
}
return null;
})
.build();
}

@Bean
public FederatedTracingInstrumentation federatedTracingInstrumentation() {
return new FederatedTracingInstrumentation(new FederatedTracingInstrumentation.Options(true));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.apollographql.federation.springexample.graphqljava;

import org.jetbrains.annotations.NotNull;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;

public class Product {
private final String upc;
private final int quantity;

public Product(String upc, int quantity) {
this.upc = upc;
this.quantity = quantity;
}

public String getUpc() {
return upc;
}

public int getQuantity() {
return quantity;
}

public boolean isInStock() {
return this.quantity > 0;
}

public static Product resolveReference(@NotNull Map<String, Object> reference) {
if (!(reference.get("upc") instanceof String)) {
return null;
}
final String upc = (String) reference.get("upc");
try {
// Why not?
int quantity = Math.floorMod(
new BigInteger(1,
MessageDigest.getInstance("SHA1").digest(upc.getBytes())
).intValue(),
10_000);

return new Product(upc, quantity);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.apollographql.federation.springexample.graphqljavatools;

import com.apollographql.federation.graphqljava.SchemaTransformer;
import com.apollographql.federation.graphqljava._Entity;
import com.apollographql.federation.graphqljava.tracing.FederatedTracingInstrumentation;
import graphql.schema.GraphQLSchema;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Configuration
@Profile("graphql-java-tools")
public class AppConfiguration {
@Bean
public GraphQLSchema graphQLSchema(SchemaTransformer schemaTransformer) {
return schemaTransformer
.fetchEntities(env -> env.<List<Map<String, Object>>>getArgument(_Entity.argumentName)
.stream()
.map(reference -> {
if ("Product".equals(reference.get("__typename"))) {
return ProductReferenceResolver.resolveReference(reference);
}
return null;
})
.collect(Collectors.toList()))
.resolveEntityType(env -> {
final Object src = env.getObject();
if (src instanceof Product) {
return env.getSchema().getObjectType("Product");
}
return null;
})
.build();
}

@Bean
public FederatedTracingInstrumentation federatedTracingInstrumentation() {
return new FederatedTracingInstrumentation(new FederatedTracingInstrumentation.Options(true));
}
}