intra-mart Accel Platform SAStruts+S2JDBC プログラミングガイド 第15版 2018-08-01

Lockサービス

Lockとは

Lockサービスはintra-martシステム全体で一意のロックを行う機能です。
特定の機能を使用不可能にしたい場合や処理の直列化を行いたい場合等に利用します。

コラム

ロックの利用状況は[システム管理者] - [アプリケーションロック一覧]画面より確認できます。
詳細は、システム管理者 操作ガイドを参照してください。

サンプルプログラム

ロックを開始した後、処理ロジックを実行して、最後にロックを開放する場合は以下のように実装します。
(このサンプルでは5秒間ロックが開始できなかった場合は例外をスローします。)
// ロックの開始
NewLock lock = new NewLock("lock_key");
if(!lock.tryLock(5, TimeUnit.SECONDS)) {
    // ロックの開始に失敗
    throw new Exception();
}
try {
    // 処理ロジック
    
} finally {
    // ロックの開放処理
    lock.unlock();
}

コラム

バーチャルテナントによる複数テナント 環境でテナント毎にロックを行いたい場合は「lockId」にテナントIDを含める等、テナント毎に一意のIDでロックを行うようにしてください。

リクエストに紐付けたロック

リクエストに紐付けたロックを開始する場合は、以下のメソッドを利用してください。
NewLock lock = new NewLock("lock_key");
boolean result = lock.tryLockRequestScope(5, TimeUnit.SECONDS);
この関数を利用して開始されたロックは、レスポンスを返却する際に自動的に開放されます。
また、unlock()関数を使用して任意のタイミングで開放することもできます。
ロックの解放漏れを防ぎたい場合などは、この関数を利用してロックを開始してください。

注意

この関数はリクエストにロックを紐付けて自動開放を行うものなので、非同期タスクや
ジョブスケジューラで実行されるジョブの処理内で利用することはできません。