採番処理マネージャ。
採番処理を行い、採番された値を取得するためのAPI提供します。
採番処理を利用することで、連続した番号を取得することができます。
採番処理は、プラグインで指定されているクラスを実行して、採番処理を行います。
拡張ポイント ID |
jp.co.intra_mart.workflow.plugin.numbering |
実装インタフェース |
IWorkflowNumberingListener |
採番処理マネージャで提供している採番処理は以下の通りです。
ファイル採番処理の詳細
パブリックストレージからカウンターファイルやタイムアウト設定ファイルを読み込み、読み込んだカウンター値に+1 した値をカウンターファイルに上書きし、返却します。
カウンターファイル、タイムアウト設定ファイルは、テナント毎に保存されます。
- カウンターファイル :
[%PUBLIC_STORAGE_PATH%]/im_workflow/data/[%テナントID%]/[%テナント単位の設定値(master-file-dir)%]/numbering/simpleNumberCounter
- タイムアウト設定ファイル :
[%PUBLIC_STORAGE_PATH%]/im_workflow/data/[%テナントID%]/[%テナント単位の設定値(master-file-dir)%]/numbering/lockTimeOut
また、実行時に上記の各ファイル、または格納ディレクトリが存在しない場合は新規作成します。
新規作成される場合、カウンターファイルは 0、タイムアウト設定ファイルは 3 秒に設定されます。
タイムアウト時間が短い状態で多数ユーザが同時にアクセスした場合、採番処理が失敗する可能性があります。
その場合は、タイムアウト設定ファイルの秒数を増やして下さい。
DB シーケンスオブジェクト採番処理の詳細
DB シーケンスオブジェクト採番処理は、各
DB で提供しているシーケンスオブジェクトを利用します。
シーケンスオブジェクトの仕様は以下の通りです。
- カウンターは昇順のみ
- 採番される番号の初期値:1
- 増分間隔:1
- 増分の最大値:各データベースで設定可能な最大数
ただし、
SQL Server の場合は、
SQL Server 2012 から使用することが可能となります。
また、各
DB 共通として、増分の最大値に到達した場合は、データベースでエラーが発生し、採番処理に失敗します。
各
DB に設定される増分の最大値
DB |
DBシーケンス最大値 |
Oracle |
9999999999999999999999999999 (※1) |
PostgreSQL |
9223372036854775807 |
SQL Server |
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(カウンターファイルの現在値));
SQL Server 2012
- ファイル採番のカウンターファイルから採番されている現在値を確認します。
- シーケンスオブジェクトの現在値を更新します。
alter sequence imw_seq_matter_number restart with n(カウンターファイルの現在値);
select next value for imw_seq_matter_number from sys.sequences where type = 'SO' and name = 'imw_seq_matter_number';
DB2
- ファイル採番のカウンターファイルから採番されている現在値を確認します。
- シーケンスオブジェクトの現在値を更新します。
alter sequence imw_seq_matter_number restart with n(カウンターファイルの現在値);
values nextval for imw_seq_matter_number;
DB の値をカウンターファイルに移行する場合は、以下の
SQL で採番されている値を取得し、カウンターファイルの現在値を更新します。
-- Oracle
select last_number from user_sequences where lower(sequence_name) = 'imw_seq_matter_number';
-- PostgreSQL
select last_value from imw_seq_matter_number;
-- SQL Server 2012
select cast(current_value as integer) from sys.sequences where type = 'SO' and name = 'imw_seq_matter_number';
-- DB2
select nextcachefirstvalue from syscat.sequences where lower(seqname) = 'imw_seq_matter_number';