onOpen method, the programmatic
endpoint gains access to the Session object, to which the developer may add MessageHandler
implementations in order to intercept incoming websocket messages. Each instance of a websocket endpoint is
guaranteed not to be called by more than one thread at a time per active connection.
If deployed as a client endpoint, it will be instantiated once for the single connection to the server.
When deployed as a server endpoint, the implementation uses the
jakarta.websocket.server.ServerEndpointConfig.Configurator#getEndpointInstance method to obtain the endpoint
instance it will use for each new client connection. If the developer uses the default
jakarta.websocket.server.ServerEndpointConfig.Configurator, there will be precisely one endpoint instance per
active client connection. Consequently, in this typical case, when implementing/overriding the methods of Endpoint,
the developer is guaranteed that there will be at most one thread calling each endpoint instance at a time.
If the developer provides a custom jakarta.websocket.server.ServerEndpointConfig.Configurator which overrides
the default policy for endpoint instance creation, for example, using a single Endpoint instance for multiple client
connections, the developer may need to write code that can execute concurrently.
Here is an example of a simple endpoint that echoes any incoming text message back to the sender.
public class EchoServer extends Endpoint {
@Override
public void onOpen(Session session, EndpointConfig config) {
final RemoteEndpoint.Basic remote = session.getBasicRemote();
session.addMessageHandler(String.class, new MessageHandler.Whole<String>() {
public void onMessage(String text) {
try {
remote.sendText("Got your message (" + text + "). Thanks !");
} catch (IOException ioe) {
// handle send failure here
}
}
});
}
}
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public void | onClose(Session
the session about to be closed. session, CloseReason the reason the session was closed. closeReason)This method is called immediately prior to the session with the remote peer being closed. |
| public void | |
| public abstract void | onOpen(Session
the session that has just been activated. session, EndpointConfig the configuration used to configure this endpoint. config)Developers must implement this method to be notified when a new conversation has just begun. |
| Endpoint | back to summary |
|---|---|
| public Endpoint() | |
| onClose | back to summary |
|---|---|
| public void onClose(Session session, CloseReason closeReason) This method is called immediately prior to the session with the remote peer being closed. It is called whether the session is being closed because the remote peer initiated a close and sent a close frame, or whether the local websocket container or this endpoint requests to close the session. The developer may take this last opportunity to retrieve session attributes such as the ID, or any application data it holds before it becomes unavailable after the completion of the method. Developers should not attempt to modify the session from within this method, or send new messages from this call as the underlying connection will not be able to send them at this stage.
| |
| onError | back to summary |
|---|---|
| public void onError(Session session, Throwable thr) Developers may implement this method when the web socket session creates some kind of error that is not modeled in the web socket protocol. This may for example be a notification that an incoming message is too big to handle, or that the incoming message could not be encoded. There are a number of categories of exception that this method is (currently) defined to handle:
| |
| onOpen | back to summary |
|---|---|
| public abstract void onOpen(Session session, EndpointConfig config) Developers must implement this method to be notified when a new conversation has just begun. Note:
| |