Class TyrusServerContainer

All Implemented Interfaces:
ServerContainer, WebSocketContainer, ServerContainer

public abstract class TyrusServerContainer extends BaseContainer implements ServerContainer
Server Container Implementation.
Author:
Martin Matula, Pavel Bucek, Stepan Kopriva
  • Constructor Details

  • Method Details

    • start

      public void start(String rootPath, int port) throws IOException, DeploymentException
      Start the container.
      Specified by:
      start in interface ServerContainer
      Parameters:
      rootPath - context path of the deployed websocket application.
      port - TCP port
      Throws:
      IOException - when any IO related issues emerge during ServerContainer.start(String, int).
      DeploymentException - when any deployment related error is found; should contain list of all found issues.
    • stop

      public void stop()
      Undeploy all endpoints and stop underlying ServerContainer.

      Release all created threadpools / executor services.

      Specified by:
      stop in interface ServerContainer
    • register

      public abstract void register(Class<?> endpointClass) throws DeploymentException
      Throws:
      DeploymentException
    • register

      public abstract void register(ServerEndpointConfig serverEndpointConfig) throws DeploymentException
      Throws:
      DeploymentException
    • addEndpoint

      public void addEndpoint(Class<?> endpointClass) throws DeploymentException
      Description copied from interface: ServerContainer
      Deploys the given annotated endpoint into this ServerContainer.
      Specified by:
      addEndpoint in interface ServerContainer
      Parameters:
      endpointClass - the class of the annotated endpoint
      Throws:
      DeploymentException - if the annotated endpoint was badly formed.
    • addEndpoint

      public void addEndpoint(ServerEndpointConfig serverEndpointConfig) throws DeploymentException
      Description copied from interface: ServerContainer
      Deploys the given endpoint described by the provided configuration into this ServerContainer.
      Specified by:
      addEndpoint in interface ServerContainer
      Parameters:
      serverEndpointConfig - the configuration instance representing the logical endpoint that will be registered.
      Throws:
      DeploymentException - if the endpoint was badly formed.
    • getPort

      public int getPort()
      Get port of the started container.
      Returns:
      the port of the started container or -1, when the container is not started or the container does not provide the port.
    • getClientManager

      protected ClientManager getClientManager()
      Can be overridden to provide own ClientManager implementation or instance.
      Returns:
      ClientManager associated with this server container.
    • 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(Object annotatedEndpointInstance, 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:
      annotatedEndpointInstance - 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.
    • 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
    • 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 max)
      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:
      max - 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 max)
      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:
      max - 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
    • doneDeployment

      public void doneDeployment()
      Container is no longer required to accept addEndpoint(jakarta.websocket.server.ServerEndpointConfig) and addEndpoint(Class) calls.
    • upgradeHttpToWebSocket

      public void upgradeHttpToWebSocket(Object httpServletRequest, Object httpServletResponse, ServerEndpointConfig sec, Map<String,String> pathParameters) throws IOException, DeploymentException
      Description copied from interface: ServerContainer
      Upgrade the HTTP connection represented by the HttpServletRequest and HttpServletResponse to the WebSocket protocol and establish a WebSocket connection as per the provided ServerEndpointConfig.

      This method is primarily intended to be used by frameworks that implement the front-controller pattern. It does not deploy the provided endpoint.

      If the WebSocket implementation is not deployed as part of a Jakarta Servlet container, this method will throw an UnsupportedOperationException.

      Specified by:
      upgradeHttpToWebSocket in interface ServerContainer
      Parameters:
      httpServletRequest - The HttpServletRequest to be processed as a WebSocket handshake as per section 4.0 of RFC 6455.
      httpServletResponse - The HttpServletResponse to be used when processing the httpServletRequest as a WebSocket handshake as per section 4.0 of RFC 6455.
      sec - The server endpoint configuration to use to configure the WebSocket endpoint
      pathParameters - Provides a mapping of path parameter names and values, if any, to be used for the WebSocket connection established by the call to this method. If no such mapping is defined, an empty Map must be passed.
      Throws:
      IOException - if an I/O error occurs during the establishment of a WebSocket connection
      DeploymentException - if a configuration error prevents the establishment of a WebSocket connection