Package nablarch.common.exclusivecontrol
Class BasicExclusiveControlManager
java.lang.Object
nablarch.common.exclusivecontrol.BasicExclusiveControlManager
- All Implemented Interfaces:
- ExclusiveControlManager
ExclusiveControlManagerの基本実装クラス。- Author:
- Kiyohito Itoh
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddVersion(ExclusiveControlContext context) バージョン番号を追加する。voidcheckVersions(List<Version> versions) バージョン番号が更新されていないかチェックする。(楽観的ロック)protected ExclusiveControlTablecreateExclusiveControlTableSchemaAndSqlHolder(String tableName, String versionColumnName, String... primaryKeyColumnNames) 排他制御用テーブルのスキーマ情報からExclusiveControlTableを生成する。protected Stringバージョン番号を削除するSQL文のテンプレートを取得する。protected ExclusiveControlTablegetExclusiveControlTableHolder(String tableName, String versionColumnName, String... primaryKeyColumnNames) 排他制御用テーブルに対応したExclusiveControlTableを取得する。protected ExclusiveControlTable排他制御用テーブルに対応したExclusiveControlTableを取得する。protected ExclusiveControlTablegetExclusiveControlTableHolder(Version version) 排他制御用テーブルに対応したExclusiveControlTableを取得する。protected Long初期バージョン番号を取得する。protected StringgetInsertColumnsAndValues(String[] primaryKeyColumnNames, String versionColumnName) INSERT文のカラムと値を取得する。protected Stringバージョン番号を追加するSQL文のテンプレートを取得する。protected Message楽観的ロックエラー発生時のメッセージを取得する。protected StringgetPrimaryKeysCondition(String[] columnNames) 主キー条件を取得する。protected Stringバージョン番号を取得するSQL文(バージョン番号の更新チェックあり)のテンプレートを取得する。protected Stringバージョン番号を取得するSQL文(バージョン番号の更新チェックなし)のテンプレートを取得する。protected Stringバージョン番号を更新するSQL文(バージョン番号の更新チェックあり)のテンプレートを取得する。protected Stringバージョン番号を更新するSQL文(バージョン番号の更新チェックなし)のテンプレートを取得する。getVersion(ExclusiveControlContext context) バージョン番号を取得する。(楽観的ロック)voidremoveVersion(ExclusiveControlContext context) バージョン番号を削除する。voidsetOptimisticLockErrorMessageId(String optimisticLockErrorMessageId) 楽観ロックエラーメッセージIDを設定する。voidupdateVersion(ExclusiveControlContext context) バージョン番号を更新する。(悲観的ロック)voidupdateVersionsWithCheck(List<Version> versions) バージョン番号の更新チェックとバージョン番号の更新を行う。(楽観的ロック)
- 
Constructor Details- 
BasicExclusiveControlManagerpublic BasicExclusiveControlManager()
 
- 
- 
Method Details- 
setOptimisticLockErrorMessageId楽観ロックエラーメッセージIDを設定する。- Parameters:
- optimisticLockErrorMessageId- 楽観ロックエラーメッセージID
 
- 
getVersionバージョン番号を取得する。(楽観的ロック)- Specified by:
- getVersionin interface- ExclusiveControlManager
- Parameters:
- context- 排他制御コンテキスト
- Returns:
- バージョン番号。バージョン番号が存在しない場合はnull
 
- 
checkVersionsバージョン番号が更新されていないかチェックする。(楽観的ロック)- Specified by:
- checkVersionsin interface- ExclusiveControlManager
- Parameters:
- versions- バージョン番号
 
- 
getOptimisticLockErrorMessage楽観的ロックエラー発生時のメッセージを取得する。- Returns:
- 楽観的ロックエラー発生時のメッセージ。メッセージIDが設定されていない場合はnull
 
- 
updateVersionsWithCheckバージョン番号の更新チェックとバージョン番号の更新を行う。(楽観的ロック)- Specified by:
- updateVersionsWithCheckin interface- ExclusiveControlManager
- Parameters:
- versions- バージョン番号
 
- 
updateVersionバージョン番号を更新する。(悲観的ロック)- Specified by:
- updateVersionin interface- ExclusiveControlManager
- Parameters:
- context- 排他制御コンテキスト
 
- 
getInitialVersion初期バージョン番号を取得する。 このメソッドは、バージョン番号追加時に使用される。 デフォルト実装では、"1"を返す。- Returns:
- 初期バージョン番号
 
- 
addVersionバージョン番号を追加する。- Specified by:
- addVersionin interface- ExclusiveControlManager
- Parameters:
- context- 排他制御コンテキスト
 
- 
removeVersionバージョン番号を削除する。- Specified by:
- removeVersionin interface- ExclusiveControlManager
- Parameters:
- context- 排他制御コンテキスト
 
- 
getExclusiveControlTableHolder排他制御用テーブルに対応したExclusiveControlTableを取得する。getExclusiveControlTableHolder(String, String, String...)に処理を委譲する。- Parameters:
- context- 排他制御コンテキスト
- Returns:
- 排他制御用テーブルに対応したExclusiveControlTable
 
- 
getExclusiveControlTableHolder排他制御用テーブルに対応したExclusiveControlTableを取得する。getExclusiveControlTableHolder(String, String, String...)に処理を委譲する。- Parameters:
- version- バージョン番号
- Returns:
- 排他制御用テーブルに対応したExclusiveControlTable
 
- 
getExclusiveControlTableHolderprotected ExclusiveControlTable getExclusiveControlTableHolder(String tableName, String versionColumnName, String... primaryKeyColumnNames) 排他制御用テーブルに対応したExclusiveControlTableを取得する。 一度生成したExclusiveControlTableは、メモリ上にキャッシュしている。 このため、キャッシュに存在する場合は、キャッシュしているものを返し、 キャッシュに存在しない場合は、ExclusiveControlTableを生成し、キャッシュに追加したものを返す。ExclusiveControlTableの生成では、排他制御用テーブルのスキーマ情報からSQL文を作成する。- Parameters:
- tableName- 排他制御用テーブルのテーブル名
- versionColumnName- バージョン番号カラム名
- primaryKeyColumnNames- 主キーのカラム名
- Returns:
- 排他制御用テーブルに対応したExclusiveControlTable
- See Also:
 
- 
createExclusiveControlTableSchemaAndSqlHolderprotected ExclusiveControlTable createExclusiveControlTableSchemaAndSqlHolder(String tableName, String versionColumnName, String... primaryKeyColumnNames) 排他制御用テーブルのスキーマ情報からExclusiveControlTableを生成する。 下記のメソッドから各SQL文のテンプレートを取得し、プレースホルダを置換することでSQL文を作成する。 SQL文を変更したい場合は、下記メソッドをオーバライドして対応する。- getSelectSqlTemplate()
- getSelectAndCheckSqlTemplate()
- getInsertSqlTemplate()
- getUpdateSqlTemplate()
- getUpdateAndCheckSqlTemplate()
- getDeleteSqlTemplate()
 排他制御用テーブルのスキーマ情報を下記に示す。 排他制御用テーブルのテーブル名: USER_TBL バージョン番号カラム名 : VERSION 主キーのカラム名 : USER_ID, PK2, PK3 バージョン番号を取得するSQL文(バージョン番号の更新チェックなし) "SELECT VERSION FROM USER_TBL WHERE USER_ID = :user_id AND PK2 = :pk2 AND PK3 = :pk3" バージョン番号を取得するSQL文(バージョン番号の更新チェックあり) "SELECT VERSION FROM USER_TBL WHERE USER_ID = :user_id AND PK2 = :pk2 AND PK3 = :pk3 AND VERSION = :version" バージョン番号を追加するSQL文 "INSERT INTO USER_TBL (USER_ID, PK2, PK3) VALUES (:user_id, :pk2, :pk3)" バージョン番号を更新するSQL文(バージョン番号の更新チェックなし) "UPDATE USER_TBL SET VERSION = (VERSION + 1) WHERE USER_ID = :user_id AND PK2 = :pk2 AND PK3 = :pk3" バージョン番号を更新するSQL文(バージョン番号の更新チェックあり) "UPDATE USER_TBL SET VERSION = (VERSION + 1) WHERE USER_ID = :user_id AND PK2 = :pk2 AND PK3 = :pk3 AND VERSION = :version" バージョン番号を削除するSQL文 "DELETE FROM USER_TBL WHERE WHERE USER_ID = :user_id AND PK2 = :pk2 AND PK3 = :pk3"- Parameters:
- tableName- 排他制御用テーブルのテーブル名
- versionColumnName- バージョン番号カラム名
- primaryKeyColumnNames- 主キーのカラム名
- Returns:
- ExclusiveControlTable
 
- 
getSelectSqlTemplateバージョン番号を取得するSQL文(バージョン番号の更新チェックなし)のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $VERSION$: バージョン番号カラム名 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $PRIMARY_KEYS_CONDITION$: 主キーの条件(例: "PK1 = :pk1 AND PK2 = :pk2") デフォルト実装では、下記のテンプレートを返す。 "SELECT $VERSION$ FROM $TABLE_NAME$ WHERE $PRIMARY_KEYS_CONDITION$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "SELECT VERSION FROM EXCLUSIVE_USER WHERE USER_ID = :user_id"- Returns:
- バージョン番号を取得するSQL文(バージョン番号の更新チェックなし)のテンプレート
 
- 
getSelectAndCheckSqlTemplateバージョン番号を取得するSQL文(バージョン番号の更新チェックあり)のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $VERSION$: バージョン番号カラム名 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $PRIMARY_KEYS_CONDITION$: 主キーの条件(例: "PK1 = :pk1 AND PK2 = :pk2") $VERSION_CONDITION$: バージョン番号の条件(例: "VERSION = :version") デフォルト実装では、下記のテンプレートを返す。 "SELECT $VERSION$ FROM $TABLE_NAME$ WHERE $PRIMARY_KEYS_CONDITION$ AND $VERSION_CONDITION$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "SELECT VERSION FROM EXCLUSIVE_USER WHERE USER_ID = :user_id AND VERSION = :version"- Returns:
- バージョン番号を取得するSQL文(バージョン番号の更新チェックあり)のテンプレート
 
- 
getInsertSqlTemplateバージョン番号を追加するSQL文のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $COLUMNS_AND_VALUES$: INSERT文のカラム名と値(例: "(PK1, PK2, VERSION) VALUES (:pk1, :pk2, :version)") デフォルト実装では、下記のテンプレートを返す。 "INSERT INTO $TABLE_NAME$ $COLUMNS_AND_VALUES$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "INSERT INTO EXCLUSIVE_USER (USER_ID, VERSION) VALUES (:user_id, :version)"- Returns:
- バージョン番号を追加するSQL文のテンプレート
 
- 
getUpdateSqlTemplateバージョン番号を更新するSQL文(バージョン番号の更新チェックなし)のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $VERSION$: バージョン番号カラム名 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $PRIMARY_KEYS_CONDITION$: 主キーの条件(例: "PK1 = :pk1 AND PK2 = :pk2") デフォルト実装では、下記のテンプレートを返す。 "UPDATE $TABLE_NAME$ SET $VERSION$ = ($VERSION$ + 1) WHERE $PRIMARY_KEYS_CONDITION$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "UPDATE EXCLUSIVE_USER SET VERSION = (VERSION + 1) WHERE USER_ID = :user_id"- Returns:
- バージョン番号を更新するSQL文(バージョン番号の更新チェックなし)のテンプレート
 
- 
getUpdateAndCheckSqlTemplateバージョン番号を更新するSQL文(バージョン番号の更新チェックあり)のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $VERSION$: バージョン番号カラム名 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $PRIMARY_KEYS_CONDITION$: 主キーの条件(例: "PK1 = :pk1 AND PK2 = :pk2") $VERSION_CONDITION$: バージョン番号の条件(例: "VERSION = :version") デフォルト実装では、下記のテンプレートを返す。 "UPDATE $TABLE_NAME$ SET $VERSION$ = ($VERSION$ + 1) WHERE $PRIMARY_KEYS_CONDITION$ AND $VERSION_CONDITION$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "UPDATE EXCLUSIVE_USER SET VERSION = (VERSION + 1) WHERE USER_ID = :user_id AND VERSION = :version"- Returns:
- バージョン番号を更新するSQL文(バージョン番号の更新チェックあり)のテンプレート
 
- 
getDeleteSqlTemplateバージョン番号を削除するSQL文のテンプレートを取得する。下記のプレースホルダを使用してテンプレートを作成する。 $TABLE_NAME$: 排他制御用テーブルのテーブル名 $PRIMARY_KEYS_CONDITION$: 主キーの条件(例: "PK1 = :pk1 AND PK2 = :pk2") デフォルト実装では、下記のテンプレートを返す。 "DELETE FROM $TABLE_NAME$ WHERE $PRIMARY_KEYS_CONDITION$" 変換例を下記に示す。 テーブル定義 CREATE TABLE EXCLUSIVE_USER ( USER_ID CHAR(6) NOT NULL, VERSION NUMBER(10) NOT NULL, PRIMARY KEY(USER_ID) ) テンプレートから作成されるSQL文 "DELETE FROM EXCLUSIVE_USER WHERE USER_ID = :user_id"- Returns:
- バージョン番号を削除するSQL文のテンプレート
 
- 
getInsertColumnsAndValuesprotected String getInsertColumnsAndValues(String[] primaryKeyColumnNames, String versionColumnName) INSERT文のカラムと値を取得する。- Parameters:
- primaryKeyColumnNames- 主キーカラム名
- versionColumnName- バージョン番号カラム名
- Returns:
- INSERT文のカラムと値
 
- 
getPrimaryKeysCondition主キー条件を取得する。- Parameters:
- columnNames- カラム名
- Returns:
- 主キー条件
 
 
-