インターフェース Session
- すべてのスーパーインターフェース:
AutoCloseableSE
,CloseableSE
public interface Session extends CloseableSE
Web ソケットセッションは、2 つの Web ソケットエンドポイント間の会話を表します。WebSocket ハンドシェイクが正常に完了すると、Web ソケット実装はエンドポイントにオープン Websocket セッションを提供します。エンドポイントは、セッションに MessageHandler を提供することにより、この新しく作成されたセッションの一部である受信メッセージに関心を登録し、このセッションから取得した RemoteEndpoint オブジェクトを使用してメッセージを会話のもう一方の端に送信できます。セッションが閉じられると、アプリケーションによる使用は無効になります。セッションが閉じられた後、そのメソッドのいずれか(close() メソッドを除く)を呼び出すと、
IllegalStateException
SE がスローされます。開発者は、Endpoint.onClose(jakarta.websocket.Session, jakarta.websocket.CloseReason)
メソッドの実行中にセッションから情報を取得する必要があります。セッションが閉じられた後にセッション close() メソッドを呼び出すCloseable
SE の規則に従うことは効果がありません。セッションオブジェクトは、複数のスレッドによって呼び出される場合があります。このような状況では、実装はセッションの可変プロパティの整合性を確保する必要があります。
- 作成者:
- dannycoward
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 void
addMessageHandler(MessageHandler handler)
この会話の受信メッセージを処理するために登録します。<T> void
addMessageHandler(ClassSE<T> clazz, MessageHandler.Partial<T> handler)
この会話の受信メッセージを処理するために登録します。<T> void
addMessageHandler(ClassSE<T> clazz, MessageHandler.Whole<T> handler)
この会話の受信メッセージを処理するために登録します。void
close()
現在の会話を通常のステータスコードで閉じ、理由句は付けません。void
close(CloseReason closeReason)
現在の会話を閉じて、閉鎖の理由を示します。RemoteEndpoint.Async
getAsyncRemote()
非同期にメッセージをピアに送信できるこの会話のピアを表す RemoteEndpoint オブジェクトの参照を返します。RemoteEndpoint.Basic
getBasicRemote()
メッセージをピアに同期的に送信できるこの会話のピアを表す RemoteEndpoint オブジェクトへの参照を返します。WebSocketContainer
getContainer()
このセッションが属するコンテナーを返します。StringSE
getId()
このセッションに割り当てられた一意の識別子を含む文字列を返します。int
getMaxBinaryMessageBufferSize()
このセッションがバッファリングできる受信バイナリメッセージの最大長。long
getMaxIdleTimeout()
コンテナーが非アクティブな場合、つまり、コンテナーによってこのセッションが閉じられるまでのミリ秒数を返します。int
getMaxTextMessageBufferSize()
このセッションがバッファリングできる受信テキストメッセージの最大長。SetSE<MessageHandler>
getMessageHandlers()
このセッションの MessageHandlers のセットの変更不可能なコピーを返します。ListSE<Extension>
getNegotiatedExtensions()
この会話に現在使用されている拡張機能のリストを返します。StringSE
getNegotiatedSubprotocol()
この会話の websocket ハンドシェイク中に合意したサブプロトコルを返します。SetSE<Session>
getOpenSessions()
このセッションが接続を表す同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。MapSE<StringSE,StringSE>
getPathParameters()
このセッションが開かれたリクエストに関連して使用されるパスパラメーター名と値のマップを返します。StringSE
getProtocolVersion()
現在使用されている websocket プロトコルのバージョンを返します。StringSE
getQueryString()
このセッションが開かれたリクエストに関連付けられたクエリ文字列を返します。MapSE<StringSE,ListSE<StringSE>>
getRequestParameterMap()
このセッションが開かれたリクエストに関連付けられたリクエストパラメーターを返します。URISE
getRequestURI()
プロトコルからクエリ文字列 (存在する場合) まで、このセッションが開かれた完全な URI を返します。PrincipalSE
getUserPrincipal()
このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合はnull
を返します。MapSE<StringSE,ObjectSE>
getUserProperties()
セッションが開いている間、このメソッドは、このセッションインスタンスに関連するアプリケーション固有の情報を保存するために開発者が使用できるマップを返します。boolean
isOpen()
基になるソケットが開いている場合にのみ true を返します。boolean
isSecure()
基になるソケットが安全なトランスポートを使用している場合にのみ true を返します。void
removeMessageHandler(MessageHandler handler)
このセッションに属するセットから指定された MessageHandler を削除します。void
setMaxBinaryMessageBufferSize(int length)
このセッションがバッファリングできる受信バイナリメッセージの最大長を設定します。void
setMaxIdleTimeout(long milliseconds)
コンテナーが非アクティブの場合、つまりコンテナーによってこのセッションが閉じられるまでのミリ秒数を設定します。void
setMaxTextMessageBufferSize(int length)
このセッションがバッファリングできる受信テキストメッセージの最大長を設定します。
メソッドの詳細
getContainer
WebSocketContainer getContainer()
このセッションが属するコンテナーを返します。- 戻り値:
- コンテナー。
addMessageHandler
void addMessageHandler(MessageHandler handler) throws IllegalStateExceptionSE
この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole
およびMessageHandler.Partial
を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。MessageHandler.Whole
またはMessageHandler.Partial
から直接派生した匿名クラスを提供しない限り、このメソッドを使用しても安全ではありません。その他すべての場合(ラムダ式、より複雑な継承、ジェネリクス型の配置)では、addMessageHandler(Class, jakarta.websocket.MessageHandler.Whole)
またはaddMessageHandler(Class, jakarta.websocket.MessageHandler.Partial)
のいずれかの方法を使用する必要があります。コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。
- パラメーター:
handler
- 追加する MessageHandler- 例外:
IllegalStateExceptionSE
- このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。
addMessageHandler
<T> void addMessageHandler(ClassSE<T> clazz, MessageHandler.Whole<T> handler)
この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole
およびMessageHandler.Partial
を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。
- 型パラメーター:
T
- 指定されたハンドラーが対象とするメッセージの型。- パラメーター:
clazz
- 登録するメッセージハンドラーによって処理されるメッセージの型。handler
- 追加するメッセージハンドラー全体。- 例外:
IllegalStateExceptionSE
- このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。- 導入:
- WebSocket 1.1
addMessageHandler
<T> void addMessageHandler(ClassSE<T> clazz, MessageHandler.Partial<T> handler)
この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole
およびMessageHandler.Partial
を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。
- 型パラメーター:
T
- 指定されたハンドラーが対象とするメッセージの型。- パラメーター:
clazz
- 登録するメッセージハンドラーによって処理されるメッセージの型。handler
- 追加する部分的なメッセージハンドラー。- 例外:
IllegalStateExceptionSE
- このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。- 導入:
- WebSocket 1.1
getMessageHandlers
SetSE<MessageHandler> getMessageHandlers()
このセッションの MessageHandlers のセットの変更不可能なコピーを返します。- 戻り値:
- メッセージハンドラーのセット。
removeMessageHandler
void removeMessageHandler(MessageHandler handler)
このセッションに属するセットから、指定された MessageHandler を削除します。このメソッドは、指定されたハンドラーがメッセージを処理している場合、使用されなくなるまでブロックする可能性があります。コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。
- パラメーター:
handler
- 削除するハンドラー。
getProtocolVersion
StringSE getProtocolVersion()
現在使用されている WebSocket プロトコルのバージョンを返します。これは、開始ハンドシェイクで使用される Sec-WebSocket-Version ヘッダーの値と見なされます。つまり、"13" です。- 戻り値:
- プロトコルのバージョン。
getNegotiatedSubprotocol
StringSE getNegotiatedSubprotocol()
この会話の websocket ハンドシェイク中に合意したサブプロトコルを返します。- 戻り値:
- ネゴシエートされたサブプロトコル。存在しない場合は空の文字列。
getNegotiatedExtensions
ListSE<Extension> getNegotiatedExtensions()
この会話に現在使用されている拡張機能のリストを返します。- 戻り値:
- 交渉された拡張。
isSecure
boolean isSecure()
基になるソケットが安全なトランスポートを使用している場合にのみ true を返します。- 戻り値:
- 安全なトランスポートを使用しているかどうか。
isOpen
boolean isOpen()
基になるソケットが開いている場合にのみ true を返します。- 戻り値:
- セッションがアクティブかどうか。
getMaxIdleTimeout
long getMaxIdleTimeout()
このセッションが非アクティブな場合、つまり、その間にメッセージが送受信されない場合、コンテナーによってこのセッションが閉じられるまでのミリ秒数を返します。ゼロまたは負の値は、このタイムアウトが使用されないことを示します。- 戻り値:
- ミリ秒単位のタイムアウト。
setMaxIdleTimeout
void setMaxIdleTimeout(long milliseconds)
このセッションが非アクティブな場合、つまり、その間にメッセージが送信または受信されない場合に、コンテナーによってこのセッションが閉じられるまでのミリ秒数を設定します。ゼロまたは負の値は、このタイムアウトが使用されないことを示します。- パラメーター:
milliseconds
- ミリ秒数。
setMaxBinaryMessageBufferSize
void setMaxBinaryMessageBufferSize(int length)
このセッションがバッファリングできる受信バイナリメッセージの最大長を設定します。- パラメーター:
length
- 最大長。
getMaxBinaryMessageBufferSize
int getMaxBinaryMessageBufferSize()
このセッションがバッファできる受信バイナリメッセージの最大長。実装が、大きすぎるためにバッファリングできないバイナリメッセージを受信した場合、CloseReason.CloseCodes.TOO_BIG
のクローズコードでセッションを閉じる必要があります。- 戻り値:
- バッファリングできるバイナリメッセージの最大サイズ。
setMaxTextMessageBufferSize
void setMaxTextMessageBufferSize(int length)
このセッションがバッファリングできる受信テキストメッセージの最大長を設定します。- パラメーター:
length
- 最大長。
getMaxTextMessageBufferSize
int getMaxTextMessageBufferSize()
このセッションがバッファリングできる受信テキストメッセージの最大長。実装が大きすぎるためにバッファリングできないテキストメッセージを受信した場合、CloseReason.CloseCodes.TOO_BIG
の終了コードでセッションを閉じる必要があります。- 戻り値:
- バッファできるテキストメッセージの最大サイズ。
getAsyncRemote
RemoteEndpoint.Async getAsyncRemote()
非同期にメッセージをピアに送信できるこの会話のピアを表す RemoteEndpoint オブジェクトの参照を返します。- 戻り値:
- リモートエンドポイント。
getBasicRemote
RemoteEndpoint.Basic getBasicRemote()
メッセージをピアに同期的に送信できるこの会話のピアを表す RemoteEndpoint オブジェクトへの参照を返します。- 戻り値:
- リモートエンドポイント。
getId
StringSE getId()
このセッションに割り当てられた一意の識別子を含む文字列を返します。識別子は Web ソケットの実装によって割り当てられ、実装に依存します。- 戻り値:
- このセッションインスタンスの一意の識別子。
close
void close() throws IOExceptionSE
現在の会話を通常のステータスコードで閉じ、理由句は付けません。- 次で指定:
- インターフェース
AutoCloseableSE
のclose
- 次で指定:
- インターフェース
CloseableSE
のclose
- 例外:
IOExceptionSE
- 接続を閉じるときに接続エラーが発生した場合。
close
void close(CloseReason closeReason) throws IOExceptionSE
現在の会話を終了し、終了の理由を示します。終了呼び出しにより、実装はできるだけ早くクライアントに終了を通知しようとします。これにより、終了通知の直前に未送信のメッセージが送信される可能性があります。終了通知が送信された後、実装はエンドポイントの onClose メソッドに通知します。Websocket 仕様では、ステータスコードと理由フレーズの許容される使用方法が定義されていることに注意してください。アプリケーションが closeReason に使用する適切な終了コードを決定できない場合は、CloseReason.CloseCodes.NO_STATUS_CODE
を使用することをお勧めします。- パラメーター:
closeReason
- 閉鎖の理由。- 例外:
IOExceptionSE
- 接続を閉じるときに接続エラーが発生した場合
getRequestURI
URISE getRequestURI()
プロトコルからクエリ文字列 (存在する場合) まで、このセッションが開かれた完全な URI を返します。URI は、必要に応じてws
またはwss
に変更する必要があるプロトコルを除いて、WebSocket にアップグレードされた HTTP リクエストに使用される完全な URI と同一である必要があります。この値のベースとして使用されるのは、101 Switching Protocols
レスポンスを受信した HTTP リクエストに関連付けられた URI であり、以前のリダイレクトされたリクエストではありません (存在する場合)。- 戻り値:
- リクエスト URI。
getRequestParameterMap
MapSE<StringSE,ListSE<StringSE>> getRequestParameterMap()
このセッションが開かれたリクエストに関連付けられたリクエストパラメーターを返します。リクエストパラメーターは、RFC 6455 によって HTTP GET メソッドのみを使用するように制限されている HTTP アップグレードリクエストの一部です。返された Map のパラメーターは、クエリ文字列に含まれるパラメーターの表現になります。- 戻り値:
- リクエストパラメーターの変更不可能なマップ。
getQueryString
StringSE getQueryString()
このセッションが開かれたリクエストに関連付けられたクエリ文字列を返します。- 戻り値:
- クエリ文字列
getPathParameters
MapSE<StringSE,StringSE> getPathParameters()
このセッションが開かれたリクエストに関連して使用されるパスパラメーター名と値のマップを返します。- 戻り値:
- パスパラメーターの変更不可能なマップ。マップのキーはパラメーター名であり、マップ内の値はパラメーター値です。
getUserProperties
MapSE<StringSE,ObjectSE> getUserProperties()
セッションが開いている間、このメソッドは、開発者がこのセッションインスタンスに関連するアプリケーション固有の情報を格納するために使用できるマップを返します。開発者は、セッションを開いてから onClose() メソッドを実行するまでの間、いつでもこのマップから情報を取得できます。ただし、それ以外の場合、このマップを使用して保存された情報はコンテナーによって保持されなくなる可能性があります。Web コンテナーの分散実装で実行されている Web ソケットアプリケーションは、アプリケーション固有のオブジェクトを java.io.Serializable に保存する必要があります。そうしないと、フェイルオーバー後にオブジェクトが再作成されない場合があります。サーバーセッションの場合、この Map の初期コンテンツは、
jakarta.websocket.server.ServerEndpointConfig.Configurator#modifyHandshake()
メソッドが終了した時点でjakarta.websocket.server.ServerEndpointConfig#getUserProperties()
から返されたユーザープロパティマップの浅いコピーでなければなりません。クライアントセッションの場合、この Map の初期コンテンツは、
WebSocketContainer.connectToServer(Class, ClientEndpointConfig, URI)
またはWebSocketContainer.connectToServer(Endpoint, ClientEndpointConfig, URI)
に渡されたClientEndpointConfig
のEndpointConfig.getUserProperties()
から返されたユーザープロパティマップの浅いコピーである必要があります。- 戻り値:
- アプリケーションデータの編集可能なマップ。
getUserPrincipal
PrincipalSE getUserPrincipal()
このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合はnull
を返します。- 戻り値:
- ユーザープリンシパル。
getOpenSessions
SetSE<Session> getOpenSessions()
このセッションが接続を表すのと同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。セットには、このメソッドが呼び出されるセッションが含まれます。これらのセッションは、このメソッドが戻った後のどの時点でもまだ開いていない可能性があります。例: 後でセットを反復処理すると、1 つ以上の閉じたセッションが生成される場合があります。開発者は session.isOpen() を使用して確認する必要があります。- 戻り値:
- 復帰時に開いているセッションのセット。