Skip to content

Commit 73b4025

Browse files
author
Ben Fortuna
committed
Added OSGi support for multiple configurable GraphQL servlets
1 parent 7d643d8 commit 73b4025

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

graphql-java-servlet/build.gradle

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ dependencies {
2424
compileOnly 'org.osgi:org.osgi.core:6.0.0'
2525
compileOnly 'org.osgi:org.osgi.service.cm:1.5.0'
2626
compileOnly 'org.osgi:org.osgi.service.component:1.3.0'
27-
compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:4.3.1'
27+
compileOnly 'org.osgi:org.osgi.service.component.annotations:1.3.0'
28+
compileOnly 'org.osgi:org.osgi.service.metatype.annotations:1.3.0'
29+
compileOnly 'org.osgi:org.osgi.annotation:6.0.0'
2830

2931
testCompile 'io.github.graphql-java:graphql-java-annotations:5.2'
3032

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import static graphql.schema.GraphQLObjectType.newObject;
44
import static graphql.schema.GraphQLSchema.newSchema;
55

6-
import aQute.bnd.component.annotations.Activate;
7-
import aQute.bnd.component.annotations.Component;
8-
import aQute.bnd.component.annotations.Deactivate;
9-
import aQute.bnd.component.annotations.Reference;
10-
import aQute.bnd.component.annotations.ReferenceCardinality;
11-
import aQute.bnd.component.annotations.ReferencePolicy;
12-
import aQute.bnd.component.annotations.ReferencePolicyOption;
6+
import org.osgi.service.component.annotations.Activate;
7+
import org.osgi.service.component.annotations.Component;
8+
import org.osgi.service.component.annotations.Deactivate;
9+
import org.osgi.service.component.annotations.Reference;
10+
import org.osgi.service.component.annotations.ReferenceCardinality;
11+
import org.osgi.service.component.annotations.ReferencePolicy;
12+
import org.osgi.service.component.annotations.ReferencePolicyOption;
1313
import graphql.execution.preparsed.NoOpPreparsedDocumentProvider;
1414
import graphql.execution.preparsed.PreparsedDocumentProvider;
1515
import graphql.kickstart.servlet.config.DefaultGraphQLSchemaServletProvider;
@@ -38,6 +38,8 @@
3838
import graphql.kickstart.servlet.core.GraphQLServletListener;
3939
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
4040
import graphql.kickstart.execution.instrumentation.NoOpInstrumentationProvider;
41+
import org.osgi.service.metatype.annotations.Designate;
42+
4143
import java.util.ArrayList;
4244
import java.util.HashSet;
4345
import java.util.List;
@@ -49,8 +51,9 @@
4951

5052
@Component(
5153
service = {javax.servlet.http.HttpServlet.class, javax.servlet.Servlet.class},
52-
property = {"alias=/graphql", "jmx.objectname=graphql.servlet:type=graphql"}
54+
property = {"service.description=GraphQL HTTP Servlet"}
5355
)
56+
@Designate(ocd = OsgiGraphQLHttpServletConfiguration.class, factory = true)
5457
public class OsgiGraphQLHttpServlet extends AbstractGraphQLHttpServlet {
5558

5659
private final List<GraphQLQueryProvider> queryProviders = new ArrayList<>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package graphql.kickstart.servlet;
2+
3+
import org.osgi.service.metatype.annotations.AttributeDefinition;
4+
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
5+
6+
@ObjectClassDefinition(name = "GraphQL HTTP Servlet", description = "GraphQL HTTP Servlet Configuration")
7+
@interface OsgiGraphQLHttpServletConfiguration {
8+
9+
@AttributeDefinition(name = "alias", description = "Servlet alias")
10+
String alias() default "/graphql";
11+
12+
@AttributeDefinition(name = "jmx.objectname", description = "JMX object name")
13+
String jmx_objectname() default "graphql.servlet:type=graphql";
14+
}

0 commit comments

Comments
 (0)