Skip to content

Commit d577dee

Browse files
committedMay 25, 2018
WIP: Proof-of-Concept Java SE Bootstrap API
1 parent 191d3ff commit d577dee

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed
 

‎core-server/pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@
169169
<dependency>
170170
<groupId>javax.ws.rs</groupId>
171171
<artifactId>javax.ws.rs-api</artifactId>
172+
<version>2.2-SNAPSHOT</version>
172173
</dependency>
173174

174175
<dependency>

‎core-server/src/main/java/org/glassfish/jersey/server/ServerProperties.java

+4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
@PropertiesClass
3838
public final class ServerProperties {
3939

40+
public static final String HTTP_SERVER_PROVIDER = "jersey.config.server.HttpServerProvider";
41+
42+
public static final String HTTP_SERVER_ANNIHILATOR = "jersey.config.server.HttpServerAnnihilator";
43+
4044
/**
4145
* Defines one or more packages that contain application-specific resources and
4246
* providers.

‎core-server/src/main/java/org/glassfish/jersey/server/internal/RuntimeDelegateImpl.java

+69
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,23 @@
1616

1717
package org.glassfish.jersey.server.internal;
1818

19+
import java.net.URI;
20+
import java.util.HashMap;
21+
import java.util.Map;
22+
import java.util.concurrent.CompletableFuture;
23+
import java.util.concurrent.CompletionStage;
24+
import java.util.function.BiFunction;
25+
import java.util.function.Consumer;
26+
27+
import javax.ws.rs.JAXRS;
1928
import javax.ws.rs.core.Application;
29+
import javax.ws.rs.core.UriBuilder;
2030

2131
import org.glassfish.jersey.internal.AbstractRuntimeDelegate;
2232
import org.glassfish.jersey.message.internal.MessagingBinders;
2333
import org.glassfish.jersey.server.ContainerFactory;
34+
import org.glassfish.jersey.server.ResourceConfig;
35+
import org.glassfish.jersey.server.ServerProperties;
2436

2537
/**
2638
* Server-side implementation of JAX-RS {@link javax.ws.rs.ext.RuntimeDelegate}.
@@ -46,4 +58,61 @@ public <T> T createEndpoint(Application application, Class<T> endpointType)
4658
}
4759
return ContainerFactory.createContainer(endpointType, application);
4860
}
61+
62+
@Override
63+
public JAXRS.Configuration.Builder createConfigurationBuilder() {
64+
return new JAXRS.Configuration.Builder() {
65+
private final Map<String, Object> properties = new HashMap<>();
66+
67+
{
68+
this.properties.put(JAXRS.Configuration.PROTOCOL, "HTTP");
69+
this.properties.put(JAXRS.Configuration.HOST, "localhost");
70+
this.properties.put(JAXRS.Configuration.PORT, 80);
71+
this.properties.put(JAXRS.Configuration.ROOT_PATH, "/");
72+
}
73+
74+
@Override
75+
public final JAXRS.Configuration.Builder property(final String name, final Object value) {
76+
this.properties.put(name, value);
77+
return this;
78+
}
79+
80+
@Override
81+
public final JAXRS.Configuration build() {
82+
return new JAXRS.Configuration() {
83+
@Override
84+
public final Object getProperty(final String name) {
85+
return properties.get(name);
86+
}
87+
};
88+
}
89+
};
90+
}
91+
92+
@SuppressWarnings("unchecked")
93+
@Override
94+
public CompletionStage<JAXRS.Instance> bootstrap(final Application application, final JAXRS.Configuration configuration) {
95+
return CompletableFuture.supplyAsync(() -> {
96+
final String protocol = (String) configuration.getProperty(JAXRS.Configuration.PROTOCOL);
97+
final String host = (String) configuration.getProperty(JAXRS.Configuration.HOST);
98+
final int port = (int) configuration.getProperty(JAXRS.Configuration.PORT);
99+
final String rootPath = (String) configuration.getProperty(JAXRS.Configuration.ROOT_PATH);
100+
final BiFunction<URI, ResourceConfig, ?> httpServerProvider = (BiFunction<URI, ResourceConfig, ?>) configuration
101+
.getProperty(ServerProperties.HTTP_SERVER_PROVIDER);
102+
final Consumer<Object> httpServerAnnihilator = (Consumer<Object>) configuration
103+
.getProperty(ServerProperties.HTTP_SERVER_ANNIHILATOR);
104+
105+
final URI uri = UriBuilder.fromUri(protocol.toLowerCase() + "://" + host).port(port).path(rootPath).build();
106+
final ResourceConfig rc = ResourceConfig.forApplication(application);
107+
final Object httpServer = httpServerProvider.apply(uri, rc);
108+
109+
return new JAXRS.Instance() {
110+
@Override
111+
public final CompletionStage<Void> stop() {
112+
return CompletableFuture.runAsync(() -> httpServerAnnihilator.accept(httpServer));
113+
}
114+
};
115+
});
116+
}
117+
49118
}

0 commit comments

Comments
 (0)