環境ロックとは?
同じ処理を他プロセスやランタイムリソース(以下RR)で行うと都合が悪い場合に、並列で実行させないための機能です。
例えば、同一ファイルへの書き込み処理を複数のRRで行う場合、1RRごとに「ファイルを開く→書き込み→保存して閉じる」を順番に行いたい場合などに用いると良さそうです。
使い方の例
今回は、
Excelファイルを開く→10秒待つ→ファイルを閉じる
処理において、最初にロック取得、最後にロック解除を行う例で説明します。
「環境ロックを取得」アクションの中身は以下のとおり。
- 名前:環境ロックの名前。プロセス名と一致させると良いでしょう。
- コメント:そのまま。「ロックを照会」アクションで取得できます。
- タイムアウト:別プロセス・オブジェクトもしくはRRからロック解除を待機する最大時間。この時間を過ぎるとセッションタイムアウトします。
0秒の場合、このステージに来た時にロック解除されていなければ処理終了です。データ型が「時間間隔」になっているので注意。 - 優先トークン:指定したトークンのロックを優先的に取得します。
※別の記事で説明します。
「環境ロックを取得」アクション実行=ロック開始です。
同じ名前のロックが既にかかっている場合は、解除されるまで待機します。
待機時間は「タイムアウト」で設定した時間となります。未設定の場合はずっと待ちます。たぶん。
試しにデバッグ実行してみます。
「環境ロックを取得」アクション後、システムタブ→ワークフロー→環境ロックで、ロックがかかっているか確認できます。
「環境ロックテスト」という名前でロックがかかっているのが分かるかと思います。
「環境ロックを解除」アクションで、ロックが解除されます。
- 名前:環境ロックの名前
- トークン:「環境ロックを取得」アクションで発行されたトークン。これを設定することで、自プロセスで取得したロックのみ解除、といったことができます。
- コメント:そのまま。コメントの内容が合致しているロックのみ解除、といった使い方ができる?(未確認)
- すべてのセッション:Trueにすると他の名前のロックも解除できます。
- 環境ロックを維持:※別の記事で説明します。
「環境ロックテスト」というロックがリストが消えるはずです。
これを実際にどう使うのか?
試しに
「Excelファイルを開く→10秒待つ→ファイルを閉じる」処理を呼び出すプロセスを作って、複数RRで実行してみます。
プロセス
先ほどの処理をオブジェクト化して、それを呼び出すだけのプロセスです。
複数RRで実行してみる
複数RRでセッション実行してみます。
セッション実行完了後のログを比較してみます。
まず、最初に開始したセッション(セッション1とする)のログです。
ロックを解除したのは15:58:01です。
次に開始したセッション(セッション2とする)のログです。
ロックを取得したのは15:57:50ですが、次のアクション「Create Instance」が開始された時刻は15:58:01です。
セッション1でロックを解除した時刻と同じですね。
つまり、セッション1のロックが解除されるまで、セッション2でロックの取得を待機していたことがわかります。
このように、同じ処理を他のプロセス、RRで実行されることを回避できているのが分かるかと思います。
別の記事で、より高度な(?)環境ロックの使い方を検証してみることにします。