Issue #1528 - pull preconfigured HttpClient from attributes
+ Search ServletContext attributes first + Search Server attributes next
This commit is contained in:
parent
7b2a0e380d
commit
e001fe0355
|
@ -38,6 +38,7 @@ import javax.websocket.Extension;
|
|||
import javax.websocket.Session;
|
||||
import javax.websocket.WebSocketContainer;
|
||||
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.eclipse.jetty.io.ByteBufferPool;
|
||||
import org.eclipse.jetty.util.DecoratedObjectFactory;
|
||||
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
||||
|
@ -103,6 +104,17 @@ public class ClientContainer extends ContainerLifeCycle implements WebSocketCont
|
|||
* @param scope the scope of the ServerContainer
|
||||
*/
|
||||
public ClientContainer(final WebSocketContainerScope scope)
|
||||
{
|
||||
this(scope, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the entry point for ServerContainer, via ServletContext.getAttribute(ServerContainer.class.getName())
|
||||
*
|
||||
* @param scope the scope of the ServerContainer
|
||||
* @param httpClient the HttpClient instance to use
|
||||
*/
|
||||
protected ClientContainer(final WebSocketContainerScope scope, final HttpClient httpClient)
|
||||
{
|
||||
String jsr356TrustAll = System.getProperty("org.eclipse.jetty.websocket.jsr356.ssl-trust-all");
|
||||
|
||||
|
@ -120,8 +132,9 @@ public class ClientContainer extends ContainerLifeCycle implements WebSocketCont
|
|||
this.scopeDelegate = clientScope;
|
||||
this.client = new WebSocketClient(scopeDelegate,
|
||||
new JsrEventDriverFactory(scopeDelegate),
|
||||
new JsrSessionFactory(this));
|
||||
this.internalClient = true;
|
||||
new JsrSessionFactory(this),
|
||||
httpClient);
|
||||
this.client.addBean(httpClient);
|
||||
|
||||
if(jsr356TrustAll != null)
|
||||
{
|
||||
|
@ -129,6 +142,8 @@ public class ClientContainer extends ContainerLifeCycle implements WebSocketCont
|
|||
client.getSslContextFactory().setTrustAll(trustAll);
|
||||
}
|
||||
|
||||
this.internalClient = true;
|
||||
|
||||
this.endpointClientMetadataCache = new ConcurrentHashMap<>();
|
||||
this.decoderFactory = new DecoderFactory(this,PrimitiveDecoderMetadataSet.INSTANCE);
|
||||
this.encoderFactory = new EncoderFactory(this,PrimitiveEncoderMetadataSet.INSTANCE);
|
||||
|
|
|
@ -27,9 +27,13 @@ import java.util.concurrent.Executor;
|
|||
import javax.websocket.DeploymentException;
|
||||
import javax.websocket.Endpoint;
|
||||
import javax.websocket.Session;
|
||||
import javax.websocket.WebSocketContainer;
|
||||
import javax.websocket.server.ServerEndpoint;
|
||||
import javax.websocket.server.ServerEndpointConfig;
|
||||
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.util.log.Log;
|
||||
import org.eclipse.jetty.util.log.Logger;
|
||||
import org.eclipse.jetty.websocket.common.WebSocketSession;
|
||||
|
@ -50,9 +54,18 @@ public class ServerContainer extends ClientContainer implements javax.websocket.
|
|||
private List<Class<?>> deferredEndpointClasses;
|
||||
private List<ServerEndpointConfig> deferredEndpointConfigs;
|
||||
|
||||
/**
|
||||
* @deprecated use {@code ServerContainer(NativeWebSocketConfiguration, HttpClient)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public ServerContainer(NativeWebSocketConfiguration configuration, Executor executor)
|
||||
{
|
||||
super(configuration.getFactory());
|
||||
this(configuration, (HttpClient) null);
|
||||
}
|
||||
|
||||
public ServerContainer(NativeWebSocketConfiguration configuration, HttpClient httpClient)
|
||||
{
|
||||
super(configuration.getFactory(), httpClient);
|
||||
this.configuration = configuration;
|
||||
EventDriverFactory eventDriverFactory = this.configuration.getFactory().getEventDriverFactory();
|
||||
eventDriverFactory.addImplementation(new JsrServerEndpointImpl());
|
||||
|
|
|
@ -33,6 +33,7 @@ import javax.websocket.server.ServerApplicationConfig;
|
|||
import javax.websocket.server.ServerEndpoint;
|
||||
import javax.websocket.server.ServerEndpointConfig;
|
||||
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.util.TypeUtil;
|
||||
|
@ -51,6 +52,7 @@ public class WebSocketServerContainerInitializer implements ServletContainerInit
|
|||
public static final String ENABLE_KEY = "org.eclipse.jetty.websocket.jsr356";
|
||||
public static final String ADD_DYNAMIC_FILTER_KEY = "org.eclipse.jetty.websocket.jsr356.addDynamicFilter";
|
||||
private static final Logger LOG = Log.getLogger(WebSocketServerContainerInitializer.class);
|
||||
public static final String HTTPCLIENT_ATTRIBUTE = "org.eclipse.jetty.websocket.jsr356.HttpClient";
|
||||
|
||||
/**
|
||||
* DestroyListener
|
||||
|
@ -136,8 +138,15 @@ public class WebSocketServerContainerInitializer implements ServletContainerInit
|
|||
// Create Basic components
|
||||
NativeWebSocketConfiguration nativeWebSocketConfiguration = NativeWebSocketServletContainerInitializer.getDefaultFrom(context.getServletContext());
|
||||
|
||||
// Build HttpClient
|
||||
HttpClient httpClient = (HttpClient) context.getServletContext().getAttribute(HTTPCLIENT_ATTRIBUTE);
|
||||
if(httpClient == null)
|
||||
{
|
||||
httpClient = (HttpClient) context.getServer().getAttribute(HTTPCLIENT_ATTRIBUTE);
|
||||
}
|
||||
|
||||
// Create the Jetty ServerContainer implementation
|
||||
ServerContainer jettyContainer = new ServerContainer(nativeWebSocketConfiguration, context.getServer().getThreadPool());
|
||||
ServerContainer jettyContainer = new ServerContainer(nativeWebSocketConfiguration, httpClient);
|
||||
context.addBean(jettyContainer);
|
||||
|
||||
// Store a reference to the ServerContainer per javax.websocket spec 1.0 final section 6.4 Programmatic Server Deployment
|
||||
|
|
|
@ -248,6 +248,22 @@ public class WebSocketClient extends ContainerLifeCycle implements WebSocketCont
|
|||
* the SessionFactory to use
|
||||
*/
|
||||
public WebSocketClient(final WebSocketContainerScope scope, EventDriverFactory eventDriverFactory, SessionFactory sessionFactory)
|
||||
{
|
||||
this(scope, eventDriverFactory, sessionFactory, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create WebSocketClient based on pre-existing Container Scope, to allow sharing of
|
||||
* internal features like Executor, ByteBufferPool, SSLContextFactory, etc.
|
||||
*
|
||||
* @param scope
|
||||
* the Container Scope
|
||||
* @param eventDriverFactory
|
||||
* the EventDriver Factory to use
|
||||
* @param sessionFactory
|
||||
* the SessionFactory to use
|
||||
*/
|
||||
public WebSocketClient(final WebSocketContainerScope scope, EventDriverFactory eventDriverFactory, SessionFactory sessionFactory, HttpClient httpClient)
|
||||
{
|
||||
WebSocketContainerScope clientScope;
|
||||
if (scope.getPolicy().getBehavior() == WebSocketBehavior.CLIENT)
|
||||
|
@ -262,8 +278,15 @@ public class WebSocketClient extends ContainerLifeCycle implements WebSocketCont
|
|||
|
||||
this.containerScope = clientScope;
|
||||
|
||||
if(httpClient == null)
|
||||
{
|
||||
this.httpClient = HttpClientProvider.get(scope);
|
||||
addBean(this.httpClient);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.httpClient = httpClient;
|
||||
}
|
||||
|
||||
this.extensionRegistry = new WebSocketExtensionFactory(containerScope);
|
||||
|
||||
|
|
Loading…
Reference in New Issue