S-JIS[2023-10-06/2024-08-21]

Tsubakuro Session

TsurugiTsubakuro(Java通信ライブラリー)のSessionクラスのメモ。


概要

TsubakuroのSessionは、Tsurugiサーバーに接続するクラス。
SQL実行やKVSアクセス等の他のクラスも、Sessionを利用する。

Sessionはtsubakuro-sessionに含まれている。

SessionインスタンスはSessionBuilderクラスを使って生成する。
生成したSessionインスタンスは、Tsubakuroのクライアント系クラス(SqlClientやKvsClient等)にアタッチして使用する。


Sessionを生成する例

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インスタンスは最終的にクローズする必要がある


SessionBuilderのメソッド

メソッド 説明
connect エンドポイントを指定してSessionBuilderインスタンスを生成する。 var builder = SessionBuilder.connect("tcp://localhost:12345");
import java.net.URI;
var builder = SessionBuilder.connect(URI.create("tcp://localhost:12345"));
withCredential 認証情報を指定する。 import com.tsurugidb.tsubakuro.channel.common.connection.NullCredential;
builder.withCredential(NullCredential.INSTANCE);
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;
try (var session = builder.create(30, TimeUnit.SECONDS)) {
}
createAsync Sessionインスタンスを生成する為のFutureResponseを返す。 try (FutureResponse<? extends Session> future = builder.createAsync()) {
  try (var session = future.get(30, TimeUnit.SECONDS)) {
  }
}

Sessionを使用する例

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 実行中のリクエストがある場合、それらをキャンセルしてからシャットダウンする。

Tsubakuroへ戻る / Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま