S-JIS[2023-10-06/2024-08-21]
TsurugiのTsubakuro(Java通信ライブラリー)のSessionクラスのメモ。
|
|
TsubakuroのSessionは、Tsurugiサーバーに接続するクラス。
SQL実行やKVSアクセス等の他のクラスも、Sessionを利用する。
Sessionはtsubakuro-sessionに含まれている。
SessionインスタンスはSessionBuilderクラスを使って生成する。
生成したSessionインスタンスは、Tsubakuroのクライアント系クラス(SqlClientやKvsClient等)にアタッチして使用する。
import java.util.concurrent.TimeUnit;
import com.tsurugidb.tsubakuro.common.Session;
import com.tsurugidb.tsubakuro.common.SessionBuilder;
try (Session session = SessionBuilder.connect("tcp://localhost:12345").create(3, TimeUnit.SECONDS)) { 〜 }
SessionBuilderのconnectメソッドでエンドポイントを指定する。
そしてcreateメソッドでSessionインスタンスを生成する。
Sessionインスタンスは最終的にクローズする必要がある。
メソッド | 説明 | 例 |
---|---|---|
connect | エンドポイントを指定してSessionBuilderインスタンスを生成する。 | var builder = SessionBuilder.connect("tcp://localhost:12345"); |
import java.net.URI; |
||
withCredential | 認証情報を指定する。 | import
com.tsurugidb.tsubakuro.channel.common.connection.NullCredential; |
withLabel | セッションラベルを指定する。[2024-07-11] ラベルはコロン「 : 」で始まってはいけない。(tgctl sessionコマンドではセッションIDはコロンで始まる為) |
builder.withLabel("session label"); |
withApplicationName | アプリケーション名を指定する。[2024-07-11] tgctl sessionコマンドで照会できる。 |
builder.withApplicationName("application name"); |
withKeepAlive | Keep Aliveを有効にする。[2024-08-21] Keep AliveはTsubakuro 1.5.0・Tsurugi 1.0.0-BETA6で追加された機能。 |
builder.withKeepAlive(true); |
create | Sessionインスタンスを生成する。 引数としてタイムアウト時間をセットする。 |
import java.util.concurrent.TimeUnit; |
createAsync | Sessionインスタンスを生成する為のFutureResponseを返す。 | try (FutureResponse<? extends Session> future =
builder.createAsync()) { |
SessionインスタンスはTsubakuroの他のモジュールで使用する。
例えばSQLを実行する場合は、SqlClientに対してSessionインスタンスをアタッチして使用する。
try (var sqlClient = SqlClient.attach(session)) { 〜 }
SqlClinet等のクライアント系のクラスはクローズする必要があるが、クライアントをクローズしてもアタッチされたSessionはクローズされない。
Tsubakuro 1.4.0(Tsurugi 1.0.0-BETA5)で、セッションのシャットダウン機能が追加された。
セッションをシャットダウンせずにクローズした場合、DBサーバー内部でしばらく(タイムアウトするまで)セッションリソースは残り続ける。
セッションをシャットダウンすることにより、DBサーバー内部のセッションリソースをきちんと解放する。
import com.tsurugidb.tsubakuro.common.ShutdownType;
try (Session session = SessionBuilder.〜.create(3, TimeUnit.SECONDS)) { 〜 session.shutdown(ShutdownType.GRACEFUL).await(3, TimeUnit.SECONDS); }
ShutdownType | 説明 |
---|---|
GRACEFUL | 実行中のリクエストがある場合、それらが終了するのを待ってからシャットダウンする。 |
FORCEFUL | 実行中のリクエストがある場合、それらをキャンセルしてからシャットダウンする。 |