採番処理マネージャ。
採番処理を行い、採番された値を取得するためのAPIを提供します。
採番処理を利用することで、連続した番号を取得することができます。
採番処理は、プラグインで指定されているクラスを実行して、採番処理を行います。
拡張ポイント ID |
jp.co.intra_mart.workflow.plugin.numbering |
実装インタフェース |
IWorkflowNumberingListener |
採番処理マネージャで提供している採番処理は以下の通りです。
ファイル採番処理の詳細
Storage Service からカウンタファイルやタイムアウト設定ファイルを読み込み、読み込んだカウンタ値に+1 した値をカウンタファイルに上書きし、返却します。
カウンタファイル、タイムアウト設定ファイルは、ログイングループ毎に保存されます。
- カウンタファイル : [%Storage Service%]/workflow/data/[%ログイングループID%]/master/numbering/simpleNumberCounter
- タイムアウト設定ファイル : [%Storage Service%]/workflow/data/[%ログイングループID%]/master/numbering/lockTimeOut
また、実行時に上記の各ファイル、または格納ディレクトリが存在しない場合は新規作成します。
新規作成される場合、カウンタファイルは 0、タイムアウト設定ファイルは 3 秒に設定されます。
タイムアウト時間が短い状態で多数ユーザが同時にアクセスした場合、採番処理が失敗する可能性があります。
その場合は、タイムアウト設定ファイルの秒数を増やして下さい。
DB シーケンスオブジェクト採番処理の詳細
DB シーケンスオブジェクト採番処理は、各 DB で提供しているシーケンスオブジェクトを利用します。
シーケンスオブジェクトの仕様は以下の通りです。
- カウンタは昇順のみ
- 採番される番号の初期値:1
- 増分間隔:1
- 増分の最大値:各データベースで設定可能な最大数
ただし、SQL Server に関しては、シーケンスオブジェクトがないため、本機能を使用することができません。
また、各 DB 共通として、増分の最大値に到達した場合は、データベースでエラーが発生し、採番処理に失敗します。
各 DB に設定される増分の最大値
DB |
DBシーケンス最大値 |
Oracle |
9999999999999999999999999999 (※1) |
PostgreSQL |
9223372036854775807 |
DB2 |
2147483647 |
※1 採番処理で利用できる最大値は「9223372036854775807(Long.MAX_VALUE)」です。
採番処理マネージャでの採番処理は、デフォルトとしてファイル採番が利用されます。
利用される採番処理を切り替える場合は、プラグインの設定を以下のように変更する必要があります。
- ファイル採番プラグイン設定 jp.co.intra_mart.workflow.plugin.numbering.simpleNumberCounter(プラグイン ID) の
enable(有効無効フラグ) を false にします。
-
DB シーケンスオブジェクト採番プラグイン設定 jp.co.intra_mart.workflow.plugin.numbering.databaseSequence(プラグイン ID)
の enable(有効無効フラグ) を true にします。
また、採番処理を切り替えた後、採番されている値を移行する場合は、カウンタファイルまたは、各 DB シーケンスオブジェクトに対して現在値の更新を行います。
カウンタファイルの値を DB に移行する手順は、以下の通りです。
Oracle
- ファイル採番のカウンタファイルから採番されている現在値を確認します。
- シーケンスオブジェクトの増分間隔を更新します。
alter sequence imw_seq_matter_number increment by n(カウンタファイルの現在値);
- シーケンスオブジェクトの現在値を更新します。
select imw_seq_matter_number.nextval from dual;
- シーケンスオブジェクトの増分間隔を元に戻します。
alter sequence imw_seq_matter_number increment by 1;
PostgreSQL
- ファイル採番のカウンタファイルから採番されている現在値を確認します。
- シーケンスオブジェクトの現在値を更新します。
select setval('imw_seq_matter_number', n(カウンタファイルの現在値));
DB2
- ファイル採番のカウンタファイルから採番されている現在値を確認します。
- シーケンスオブジェクトの現在値を更新します。
alter sequence imw_seq_matter_number restart with n(カウンタファイルの現在値);
values nextval for imw_seq_matter_number;
DB の値をカウンタファイルに移行する場合は、以下の SQL で採番されている値を取得し、カウンタファイルの現在値を更新します。
※ Oracle と DB2 の場合、以下のSQLで取得した値から-1 した値が現在値となります。
-- Oracle
select last_number from user_sequences where lower(sequence_name) = 'imw_seq_matter_number';
-- PostgreSQL
select last_value from imw_seq_matter_number;
-- DB2
select nextcachefirstvalue from syscat.sequences where lower(seqname) = 'imw_seq_matter_number';