Skip to content

Commit

Permalink
Merge pull request #103 from apollographql/sachin/upgrade-graphql-spr…
Browse files Browse the repository at this point in the history
…ing-boot-to-11.0.0

spring-example: Upgrade graphql-spring-boot-starter to 11.0.0
  • Loading branch information
sachindshinde committed Apr 20, 2021
2 parents e466409 + 9489327 commit 0ab7204
Show file tree
Hide file tree
Showing 21 changed files with 361 additions and 108 deletions.
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));
}
}

0 comments on commit 0ab7204

Please sign in to comment.