パッケージ jakarta.websocket

インターフェース Session

  • すべてのスーパーインターフェース:
    AutoCloseableSECloseableSE

    public interface Session
    extends CloseableSE
    Web ソケットセッションは、2 つの Web ソケットエンドポイント間の会話を表します。WebSocket ハンドシェイクが正常に完了すると、Web ソケット実装はエンドポイントにオープン Websocket セッションを提供します。エンドポイントは、セッションに MessageHandler を提供することにより、この新しく作成されたセッションの一部である受信メッセージに関心を登録し、このセッションから取得した RemoteEndpoint オブジェクトを使用してメッセージを会話のもう一方の端に送信できます。

    セッションが閉じられると、アプリケーションによる使用は無効になります。セッションが閉じられた後、そのメソッドのいずれか(close() メソッドを除く)を呼び出すと、IllegalStateExceptionSE がスローされます。開発者は、Endpoint.onClose(jakarta.websocket.Session, jakarta.websocket.CloseReason) メソッドの実行中にセッションから情報を取得する必要があります。セッションが閉じられた後にセッション close() メソッドを呼び出す CloseableSE の規則に従うことは効果がありません。

    セッションオブジェクトは、複数のスレッドによって呼び出される場合があります。このような状況では、実装はセッションの可変プロパティの整合性を確保する必要があります。

    作成者:
    dannycoward
    • メソッドのサマリー

      すべてのメソッド   インスタンスメソッド   抽象メソッド  
      修飾子と型 メソッド 説明
      voidaddMessageHandler​(MessageHandler handler)
      この会話の受信メッセージを処理するために登録します。
      <T> voidaddMessageHandler​(ClassSE<T> clazz, MessageHandler.Partial<T> handler)
      この会話の受信メッセージを処理するために登録します。
      <T> voidaddMessageHandler​(ClassSE<T> clazz, MessageHandler.Whole<T> handler)
      この会話の受信メッセージを処理するために登録します。
      voidclose()
      現在の会話を通常のステータスコードで閉じ、理由句は付けません。
      voidclose​(CloseReason closeReason)
      現在の会話を閉じて、閉鎖の理由を示します。
      RemoteEndpoint.AsyncgetAsyncRemote()
      非同期にメッセージをピアに送信できるこの会話のピアを表す RemoteEndpoint オブジェクトの参照を返します。
      RemoteEndpoint.BasicgetBasicRemote()
      メッセージをピアに同期的に送信できるこの会話のピアを表す RemoteEndpoint オブジェクトへの参照を返します。
      WebSocketContainergetContainer()
      このセッションが属するコンテナーを返します。
      StringSEgetId()
      このセッションに割り当てられた一意の識別子を含む文字列を返します。
      intgetMaxBinaryMessageBufferSize()
      このセッションがバッファリングできる受信バイナリメッセージの最大長。
      longgetMaxIdleTimeout()
      コンテナーが非アクティブな場合、つまり、コンテナーによってこのセッションが閉じられるまでのミリ秒数を返します。
      intgetMaxTextMessageBufferSize()
      このセッションがバッファリングできる受信テキストメッセージの最大長。
      SetSE<MessageHandler>getMessageHandlers()
      このセッションの MessageHandlers のセットの変更不可能なコピーを返します。
      ListSE<Extension>getNegotiatedExtensions()
      この会話に現在使用されている拡張機能のリストを返します。
      StringSEgetNegotiatedSubprotocol()
      この会話の websocket ハンドシェイク中に合意したサブプロトコルを返します。
      SetSE<Session>getOpenSessions()
      このセッションが接続を表す同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。
      MapSE<StringSE,​StringSE>getPathParameters()
      このセッションが開かれたリクエストに関連して使用されるパスパラメーター名と値のマップを返します。
      StringSEgetProtocolVersion()
      現在使用されている websocket プロトコルのバージョンを返します。
      StringSEgetQueryString()
      このセッションが開かれたリクエストに関連付けられたクエリ文字列を返します。
      MapSE<StringSE,​ListSE<StringSE>>getRequestParameterMap()
      このセッションが開かれたリクエストに関連付けられたリクエストパラメーターを返します。
      URISEgetRequestURI()
      プロトコルからクエリ文字列 (存在する場合) まで、このセッションが開かれた完全な URI を返します。
      PrincipalSEgetUserPrincipal()
      このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合は null を返します。
      MapSE<StringSE,​ObjectSE>getUserProperties()
      セッションが開いている間、このメソッドは、このセッションインスタンスに関連するアプリケーション固有の情報を保存するために開発者が使用できるマップを返します。
      booleanisOpen()
      基になるソケットが開いている場合にのみ true を返します。
      booleanisSecure()
      基になるソケットが安全なトランスポートを使用している場合にのみ true を返します。
      voidremoveMessageHandler​(MessageHandler handler)
      このセッションに属するセットから指定された MessageHandler を削除します。
      voidsetMaxBinaryMessageBufferSize​(int length)
      このセッションがバッファリングできる受信バイナリメッセージの最大長を設定します。
      voidsetMaxIdleTimeout​(long milliseconds)
      コンテナーが非アクティブの場合、つまりコンテナーによってこのセッションが閉じられるまでのミリ秒数を設定します。
      voidsetMaxTextMessageBufferSize​(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
        現在の会話を通常のステータスコードで閉じ、理由句は付けません。
        次で指定:
        インターフェース AutoCloseableSEclose 
        次で指定:
        インターフェース CloseableSEclose 
        例外:
        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) に渡された ClientEndpointConfigEndpointConfig.getUserProperties() から返されたユーザープロパティマップの浅いコピーである必要があります。

        戻り値:
        アプリケーションデータの編集可能なマップ。
      • getUserPrincipal

        PrincipalSE getUserPrincipal()
        このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合は null を返します。
        戻り値:
        ユーザープリンシパル。
      • getOpenSessions

        SetSE<Session> getOpenSessions()
        このセッションが接続を表すのと同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。セットには、このメソッドが呼び出されるセッションが含まれます。これらのセッションは、このメソッドが戻った後のどの時点でもまだ開いていない可能性があります。例: 後でセットを反復処理すると、1 つ以上の閉じたセッションが生成される場合があります。開発者は session.isOpen() を使用して確認する必要があります。
        戻り値:
        復帰時に開いているセッションのセット。