Issue #5828 - allow HttpClient to be used with JavaxWebSocketClientContainerProvider
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
parent
06df421b56
commit
7a72a6ac64
|
@ -64,6 +64,7 @@ public class WebSocketCoreClient extends ContainerLifeCycle
|
|||
this.httpClient = httpClient;
|
||||
this.components = webSocketComponents;
|
||||
addBean(httpClient);
|
||||
addBean(webSocketComponents);
|
||||
}
|
||||
|
||||
public CompletableFuture<CoreSession> connect(FrameHandler frameHandler, URI wsUri) throws IOException
|
||||
|
|
|
@ -20,9 +20,9 @@ module org.eclipse.jetty.websocket.javax.client
|
|||
exports org.eclipse.jetty.websocket.javax.client;
|
||||
exports org.eclipse.jetty.websocket.javax.client.internal to org.eclipse.jetty.websocket.javax.server;
|
||||
|
||||
requires org.eclipse.jetty.client;
|
||||
requires org.eclipse.jetty.websocket.core.client;
|
||||
requires org.eclipse.jetty.websocket.javax.common;
|
||||
requires transitive org.eclipse.jetty.client;
|
||||
requires transitive jetty.websocket.api;
|
||||
|
||||
provides ContainerProvider with JavaxWebSocketClientContainerProvider;
|
||||
|
|
|
@ -16,6 +16,7 @@ package org.eclipse.jetty.websocket.javax.client;
|
|||
import javax.websocket.ContainerProvider;
|
||||
import javax.websocket.WebSocketContainer;
|
||||
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.eclipse.jetty.util.component.LifeCycle;
|
||||
import org.eclipse.jetty.util.thread.ShutdownThread;
|
||||
import org.eclipse.jetty.websocket.javax.client.internal.JavaxWebSocketClientContainer;
|
||||
|
@ -50,24 +51,36 @@ public class JavaxWebSocketClientContainerProvider extends ContainerProvider
|
|||
* </p>
|
||||
*/
|
||||
@Override
|
||||
protected WebSocketContainer getContainer()
|
||||
public WebSocketContainer getContainer()
|
||||
{
|
||||
// See: https://github.com/javaee/websocket-spec/issues/212
|
||||
// TODO: on multiple executions, do we warn?
|
||||
// TODO: do we care?
|
||||
// TODO: on multiple executions, do we share bufferPool/executors/etc?
|
||||
// TODO: do we want to provide a non-standard way to configure to always return the same clientContainer based on a config somewhere? (system.property?)
|
||||
|
||||
JavaxWebSocketClientContainer clientContainer = new JavaxWebSocketClientContainer();
|
||||
registerShutdown(clientContainer);
|
||||
return clientContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new instance of a client {@link WebSocketContainer} which uses a supplied {@link HttpClient}.
|
||||
* @param httpClient a pre-configured {@link HttpClient} to be used by the implementation.
|
||||
* @see #getContainer()
|
||||
*/
|
||||
public WebSocketContainer getContainer(HttpClient httpClient)
|
||||
{
|
||||
JavaxWebSocketClientContainer clientContainer = new JavaxWebSocketClientContainer(httpClient);
|
||||
registerShutdown(clientContainer);
|
||||
return clientContainer;
|
||||
}
|
||||
|
||||
// See: https://github.com/eclipse-ee4j/websocket-api/issues/212
|
||||
private WebSocketContainer registerShutdown(JavaxWebSocketClientContainer container)
|
||||
{
|
||||
// Register as JVM runtime shutdown hook?
|
||||
ShutdownThread.register(clientContainer);
|
||||
ShutdownThread.register(container);
|
||||
|
||||
if (!clientContainer.isStarted())
|
||||
if (!container.isStarted())
|
||||
{
|
||||
try
|
||||
{
|
||||
clientContainer.start();
|
||||
container.start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -75,6 +88,6 @@ public class JavaxWebSocketClientContainerProvider extends ContainerProvider
|
|||
}
|
||||
}
|
||||
|
||||
return clientContainer;
|
||||
return container;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,12 +70,7 @@ public class JavaxWebSocketClientContainer extends JavaxWebSocketContainer imple
|
|||
*/
|
||||
public JavaxWebSocketClientContainer(final HttpClient httpClient)
|
||||
{
|
||||
this(new WebSocketComponents(), (wsComponents) ->
|
||||
{
|
||||
WebSocketCoreClient coreClient = new WebSocketCoreClient(httpClient, wsComponents);
|
||||
coreClient.getHttpClient().setName("Javax-WebSocketClient@" + Integer.toHexString(coreClient.getHttpClient().hashCode()));
|
||||
return coreClient;
|
||||
});
|
||||
this(new WebSocketComponents(), (wsComponents) -> new WebSocketCoreClient(httpClient, wsComponents));
|
||||
}
|
||||
|
||||
public JavaxWebSocketClientContainer(WebSocketComponents components)
|
||||
|
|
Loading…
Reference in New Issue