Class ClientManager

All Implemented Interfaces:
WebSocketContainer

public class ClientManager extends BaseContainer implements WebSocketContainer
ClientManager implementation.
Author:
Stepan Kopriva, Pavel Bucek
  • Field Details

    • HANDSHAKE_TIMEOUT

      public static final String HANDSHAKE_TIMEOUT
      Deprecated.
      Property usable in getProperties().

      Value must be int and represents handshake timeout in milliseconds. Default value is 30000 (30 seconds).

      See Also:
    • RECONNECT_HANDLER

      public static final String RECONNECT_HANDLER
      Deprecated.
      Property usable in getProperties().

      Value must be ClientManager.ReconnectHandler instance.

      See Also:
    • PROXY_URI

      public static final String PROXY_URI
      Deprecated.
      Client-side user property to set proxy URI.

      Value is expected to be String and represent proxy URI. Protocol part is currently ignored but must be present (URI(String) is used for parsing).

           client.getProperties().put(ClientManager.PROXY_URI, "http://my.proxy.com:80");
           client.connectToServer(...);
       
      See Also:
    • PROXY_HEADERS

      public static final String PROXY_HEADERS
      Deprecated.
      Client-side user property to set additional proxy headers.

      Value is expected to be Map<String, String> and represent raw http headers to be added to initial request which is sent to proxy. Key corresponds to header name, value is header value.

      Sample below demonstrates use of this feature to set preemptive basic proxy authentication:

           final HashMap<String, String> proxyHeaders = new HashMap<String, String>();
           proxyHeaders.put("Proxy-Authorization", "Basic " +
               Base64.getEncoder().encodeToString("username:password".getBytes(Charset.forName("UTF-8"))));
      
           client.getProperties().put(GrizzlyClientSocket.PROXY_HEADERS, proxyHeaders);
           client.connectToServer(...);
       
      Please note that these headers will be used only when establishing proxy connection, for modifying WebSocket handshake headers, see ClientEndpointConfig.Configurator.beforeRequest(java.util.Map).
      See Also:
    • SSL_ENGINE_CONFIGURATOR

      public static final String SSL_ENGINE_CONFIGURATOR
      Property usable in getProperties() as a key for SSL configuration.

      Value is expected to be either org.glassfish.grizzly.ssl.SSLEngineConfigurator when configuring Grizzly client or SslEngineConfigurator when configuring JDK client.

      Example configuration for JDK client:

            SslContextConfigurator sslContextConfigurator = new SslContextConfigurator();
            sslContextConfigurator.setTrustStoreFile("...");
            sslContextConfigurator.setTrustStorePassword("...");
            sslContextConfigurator.setTrustStoreType("...");
            sslContextConfigurator.setKeyStoreFile("...");
            sslContextConfigurator.setKeyStorePassword("...");
            sslContextConfigurator.setKeyStoreType("...");
            SslEngineConfigurator sslEngineConfigurator = new SslEngineConfigurator(sslContextConfigurator, true,
       false,
       false);
            client.getProperties().put(ClientManager.SSL_ENGINE_CONFIGURATOR, sslEngineConfigurator);
       
      See Also:
    • WLS_PROXY_HOST

      public static final String WLS_PROXY_HOST
      See Also:
    • WLS_PROXY_PORT

      public static final String WLS_PROXY_PORT
      See Also:
    • WLS_PROXY_USERNAME

      public static final String WLS_PROXY_USERNAME
      See Also:
    • WLS_PROXY_PASSWORD

      public static final String WLS_PROXY_PASSWORD
      See Also:
    • WLS_SSL_PROTOCOLS_PROPERTY

      public static final String WLS_SSL_PROTOCOLS_PROPERTY
      See Also:
    • WLS_SSL_TRUSTSTORE_PROPERTY

      public static final String WLS_SSL_TRUSTSTORE_PROPERTY
      See Also:
    • WLS_SSL_TRUSTSTORE_PWD_PROPERTY

      public static final String WLS_SSL_TRUSTSTORE_PWD_PROPERTY
      See Also:
    • WLS_MAX_THREADS

      public static final String WLS_MAX_THREADS
      See Also:
    • WLS_IGNORE_HOSTNAME_VERIFICATION

      public static final String WLS_IGNORE_HOSTNAME_VERIFICATION
      See Also:
    • WLS_HOSTNAME_VERIFIER_CLASS

      public static final String WLS_HOSTNAME_VERIFIER_CLASS
      See Also:
  • Constructor Details

    • ClientManager

      public ClientManager()
      Create new ClientManager instance.

      Uses CONTAINER_PROVIDER_CLASSNAME as container implementation, thus relevant module needs to be on classpath. Setting different container is possible via createClient(String)}.

      See Also:
  • Method Details

    • createClient

      public static ClientManager createClient()
      Create new ClientManager instance.

      Uses CONTAINER_PROVIDER_CLASSNAME as container implementation, thus relevant module needs to be on classpath. Setting different container is possible via createClient(String).

      Returns:
      created client manager.
      See Also:
    • createClient

      public static ClientManager createClient(WebSocketContainer webSocketContainer)
      Create new ClientManager instance on top of provided WebSocketContainer instance.

      Uses CONTAINER_PROVIDER_CLASSNAME as container implementation, thus relevant module needs to be on classpath. Setting different container is possible via createClient(String).

      Parameters:
      webSocketContainer - websocket container.
      Returns:
      created client manager.
      See Also:
    • createClient

      public static ClientManager createClient(String containerProviderClassName)
      Create new ClientManager instance.
      Parameters:
      containerProviderClassName - classname of container provider. It will be loaded using context class loader.
      Returns:
      new ClientManager instance.
    • createClient

      public static ClientManager createClient(String containerProviderClassName, WebSocketContainer webSocketContainer)
      Create new ClientManager instance on top of provided WebSocketContainer instance.
      Parameters:
      containerProviderClassName - classname of container provider. It will be loaded using context class loader.
      webSocketContainer - websocket container.
      Returns:
      new ClientManager instance.
    • connectToServer

      public Session connectToServer(Class annotatedEndpointClass, URI path) throws DeploymentException, IOException
      Description copied from interface: WebSocketContainer
      Connect the supplied annotated endpoint to its server. The supplied object must be a class decorated with the class level ClientEndpoint annotation. This method blocks until the connection is established, or throws an error if either the connection could not be made or there was a problem with the supplied endpoint class.
      Specified by:
      connectToServer in interface WebSocketContainer
      Parameters:
      annotatedEndpointClass - the annotated websocket client endpoint.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the class is not a valid annotated endpoint class.
      IOException - if there was a network or protocol problem that prevented the client endpoint being connected to its server.
    • connectToServer

      public Session connectToServer(Class<? extends Endpoint> endpointClass, ClientEndpointConfig cec, URI path) throws DeploymentException, IOException
      Description copied from interface: WebSocketContainer
      Connect the supplied programmatic endpoint to its server with the given configuration. This method blocks until the connection is established, or throws an error if the connection could not be made.
      Specified by:
      connectToServer in interface WebSocketContainer
      Parameters:
      endpointClass - the programmatic client endpoint class Endpoint.
      cec - the configuration used to configure the programmatic endpoint.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the configuration is not valid
      IOException - if there was a network or protocol problem that prevented the client endpoint being connected to its server
    • connectToServer

      public Session connectToServer(Endpoint endpointInstance, ClientEndpointConfig cec, URI path) throws DeploymentException, IOException
      Description copied from interface: WebSocketContainer
      Connect the supplied programmatic client endpoint instance to its server with the given configuration. This method blocks until the connection is established, or throws an error if the connection could not be made. If the developer uses this method to deploy the client endpoint, services like dependency injection that are supported, for example, when the implementation is part of the Java EE platform may not be available. If the client endpoint uses dependency injection, use WebSocketContainer.connectToServer(java.lang.Class, jakarta.websocket.ClientEndpointConfig, java.net.URI) instead.
      Specified by:
      connectToServer in interface WebSocketContainer
      Parameters:
      endpointInstance - the programmatic client endpoint instance Endpoint.
      cec - the configuration used to configure the programmatic endpoint.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the configuration is not valid
      IOException - if there was a network or protocol problem that prevented the client endpoint being connected to its server
    • connectToServer

      public Session connectToServer(Object obj, URI path) throws DeploymentException, IOException
      Description copied from interface: WebSocketContainer
      Connect the supplied annotated endpoint instance to its server. The supplied object must be a class decorated with the class level ClientEndpoint annotation. This method blocks until the connection is established, or throws an error if either the connection could not be made or there was a problem with the supplied endpoint class. If the developer uses this method to deploy the client endpoint, services like dependency injection that are supported, for example, when the implementation is part of the Java EE platform may not be available. If the client endpoint uses dependency injection, use WebSocketContainer.connectToServer(java.lang.Class, java.net.URI) instead.
      Specified by:
      connectToServer in interface WebSocketContainer
      Parameters:
      obj - the annotated websocket client endpoint instance.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the annotated endpoint instance is not valid.
      IOException - if there was a network or protocol problem that prevented the client endpoint being connected to its server.
    • asyncConnectToServer

      public Future<Session> asyncConnectToServer(Class<?> annotatedEndpointClass, URI path) throws DeploymentException
      Non-blocking version of WebSocketContainer.connectToServer(Class, java.net.URI).

      Only simple checks are performed in the main thread; client container is created in different thread, same applies to connecting etc.

      Parameters:
      annotatedEndpointClass - the annotated websocket client endpoint.
      path - the complete path to the server endpoint.
      Returns:
      Future for the Session created if the connection is successful.
      Throws:
      DeploymentException - if the class is not a valid annotated endpoint class.
    • asyncConnectToServer

      public Future<Session> asyncConnectToServer(Class<? extends Endpoint> endpointClass, ClientEndpointConfig cec, URI path) throws DeploymentException
      Non-blocking version of WebSocketContainer.connectToServer(Class, jakarta.websocket.ClientEndpointConfig, java.net.URI).

      Only simple checks are performed in the main thread; client container is created in different thread, same applies to connecting etc.

      Parameters:
      endpointClass - the programmatic client endpoint class Endpoint.
      cec - the configuration used to configure the programmatic endpoint.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the configuration is not valid
      See Also:
    • asyncConnectToServer

      public Future<Session> asyncConnectToServer(Endpoint endpointInstance, ClientEndpointConfig cec, URI path) throws DeploymentException
      Non-blocking version of WebSocketContainer.connectToServer(jakarta.websocket.Endpoint, jakarta.websocket.ClientEndpointConfig, java.net.URI).

      Only simple checks are performed in the main thread; client container is created in different thread, same applies to connecting etc.

      Parameters:
      endpointInstance - the programmatic client endpoint instance Endpoint.
      cec - the configuration used to configure the programmatic endpoint.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the configuration is not valid
      See Also:
    • asyncConnectToServer

      public Future<Session> asyncConnectToServer(Object obj, URI path) throws DeploymentException
      Non-blocking version of WebSocketContainer.connectToServer(Object, java.net.URI).

      Only simple checks are performed in the main thread; client container is created in different thread, same applies to connecting etc.

      Parameters:
      obj - the annotated websocket client endpoint instance.
      path - the complete path to the server endpoint.
      Returns:
      the Session created if the connection is successful.
      Throws:
      DeploymentException - if the annotated endpoint instance is not valid.
      See Also:
    • getDefaultMaxBinaryMessageBufferSize

      public int getDefaultMaxBinaryMessageBufferSize()
      Description copied from interface: WebSocketContainer
      Returns the default maximum size of incoming binary message that this container will buffer. This default may be overridden on a per session basis using Session.setMaxBinaryMessageBufferSize(int)
      Specified by:
      getDefaultMaxBinaryMessageBufferSize in interface WebSocketContainer
      Returns:
      the maximum size of incoming binary message in number of bytes.
    • setDefaultMaxBinaryMessageBufferSize

      public void setDefaultMaxBinaryMessageBufferSize(int i)
      Description copied from interface: WebSocketContainer
      Sets the default maximum size of incoming binary message that this container will buffer.
      Specified by:
      setDefaultMaxBinaryMessageBufferSize in interface WebSocketContainer
      Parameters:
      i - the maximum size of binary message in number of bytes.
    • getDefaultMaxTextMessageBufferSize

      public int getDefaultMaxTextMessageBufferSize()
      Description copied from interface: WebSocketContainer
      Returns the default maximum size of incoming text message that this container will buffer. This default may be overridden on a per session basis using Session.setMaxTextMessageBufferSize(int)
      Specified by:
      getDefaultMaxTextMessageBufferSize in interface WebSocketContainer
      Returns:
      the maximum size of incoming text message in number of bytes.
    • setDefaultMaxTextMessageBufferSize

      public void setDefaultMaxTextMessageBufferSize(int i)
      Description copied from interface: WebSocketContainer
      Sets the maximum size of incoming text message that this container will buffer.
      Specified by:
      setDefaultMaxTextMessageBufferSize in interface WebSocketContainer
      Parameters:
      i - the maximum size of text message in number of bytes.
    • getInstalledExtensions

      public Set<Extension> getInstalledExtensions()
      Description copied from interface: WebSocketContainer
      Return the set of Extensions installed in the container.
      Specified by:
      getInstalledExtensions in interface WebSocketContainer
      Returns:
      the set of extensions.
    • getDefaultAsyncSendTimeout

      public long getDefaultAsyncSendTimeout()
      Description copied from interface: WebSocketContainer
      Return the number of milliseconds the implementation will timeout attempting to send a websocket message for all RemoteEndpoints associated with this container. A zero or negative value indicates the implementation will not timeout attempting to send a websocket message asynchronously. Note this default may be overridden in each RemoteEndpoint.
      Specified by:
      getDefaultAsyncSendTimeout in interface WebSocketContainer
      Returns:
      the timeout time in milliseconds.
    • setAsyncSendTimeout

      public void setAsyncSendTimeout(long timeoutmillis)
      Description copied from interface: WebSocketContainer
      Sets the number of milliseconds the implementation will timeout attempting to send a websocket message for all RemoteEndpoints associated with this container. A zero or negative value indicates the implementation will not timeout attempting to send a websocket message asynchronously. Note this default may be overridden in each RemoteEndpoint.
      Specified by:
      setAsyncSendTimeout in interface WebSocketContainer
      Parameters:
      timeoutmillis - the timeout in milliseconds; use zero or negative value for no timeout
    • getDefaultMaxSessionIdleTimeout

      public long getDefaultMaxSessionIdleTimeout()
      Description copied from interface: WebSocketContainer
      Return the default time in milliseconds after which any web socket sessions in this container will be closed if it has been inactive. A value that is zero or negative indicates the sessions will never timeout due to inactivity. The value may be overridden on a per session basis using Session.setMaxIdleTimeout(long)
      Specified by:
      getDefaultMaxSessionIdleTimeout in interface WebSocketContainer
      Returns:
      the default number of milliseconds after which an idle session in this container will be closed
    • setDefaultMaxSessionIdleTimeout

      public void setDefaultMaxSessionIdleTimeout(long defaultMaxSessionIdleTimeout)
      Description copied from interface: WebSocketContainer
      Sets the default time in milliseconds after which any web socket sessions in this container will be closed if it has been inactive. A value that is zero or negative indicates the sessions will never timeout due to inactivity. The value may be overridden on a per session basis using Session.setMaxIdleTimeout(long)
      Specified by:
      setDefaultMaxSessionIdleTimeout in interface WebSocketContainer
      Parameters:
      defaultMaxSessionIdleTimeout - the maximum time in milliseconds; use zero or negative value for no timeout
    • getProperties

      public Map<String,Object> getProperties()
      Container properties.

      Used to set container specific configuration as SSL truststore and keystore, HTTP Proxy configuration and maximum incoming buffer size. These properties cannot be shared among various containers due to constraints in WebSocket API, so if you need to have multiple configurations, you will need to create multiple ClientManager instances or synchronize connectToServer method invocations.

      Returns:
      map containing container properties.
      See Also: