keycloak
公開メンバ関数 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator クラス
org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator の継承関係図
Inheritance graph
org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator 連携図
Collaboration graph

公開メンバ関数

int getPriority ()
 
Sql [] generateSql (LockDatabaseChangeLogStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain)
 

非公開メンバ関数

Sql generateSelectForUpdate (Database database)
 

静的非公開変数類

static final Logger logger = Logger.getLogger(CustomLockDatabaseChangeLogGenerator.class)
 

詳解

We use "SELECT FOR UPDATE" pessimistic locking (Same algorithm like Hibernate LockMode.PESSIMISTIC_WRITE )

著者
Marek Posolda

関数詳解

◆ generateSelectForUpdate()

Sql org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator.generateSelectForUpdate ( Database  database)
inlineprivate
57  {
58  String catalog = database.getLiquibaseCatalogName();
59  String schema = database.getLiquibaseSchemaName();
60  String rawLockTableName = database.getDatabaseChangeLogLockTableName();
61 
62  String lockTableName = database.escapeTableName(catalog, schema, rawLockTableName);
63  String idColumnName = database.escapeColumnName(catalog, schema, rawLockTableName, "ID");
64 
65  String sqlBase = "SELECT " + idColumnName + " FROM " + lockTableName;
66  String sqlWhere = " WHERE " + idColumnName + "=1";
67 
68  String sql;
69  if (database instanceof MySQLDatabase || database instanceof PostgresDatabase || database instanceof H2Database ||
70  database instanceof OracleDatabase) {
71  sql = sqlBase + sqlWhere + " FOR UPDATE";
72  } else if (database instanceof MSSQLDatabase) {
73  sql = sqlBase + " WITH (UPDLOCK, ROWLOCK)" + sqlWhere;
74  } else if (database instanceof DB2Database) {
75  sql = sqlBase + sqlWhere + " FOR READ ONLY WITH RS USE AND KEEP UPDATE LOCKS";
76  } else {
77  sql = sqlBase + sqlWhere;
78  logger.warnf("No direct support for database %s . Database lock may not work correctly", database.getClass().getName());
79  }
80 
81  logger.debugf("SQL command for pessimistic lock: %s", sql);
82 
83  return new UnparsedSql(sql);
84  }
static final Logger logger
Definition: CustomLockDatabaseChangeLogGenerator.java:41

◆ generateSql()

Sql [] org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator.generateSql ( LockDatabaseChangeLogStatement  statement,
Database  database,
SqlGeneratorChain  sqlGeneratorChain 
)
inline
49  {
50 
51  Sql selectForUpdateSql = generateSelectForUpdate(database);
52 
53  return new Sql[] { selectForUpdateSql };
54  }
Sql generateSelectForUpdate(Database database)
Definition: CustomLockDatabaseChangeLogGenerator.java:57

◆ getPriority()

int org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator.getPriority ( )
inline
44  {
45  return super.getPriority() + 1; // Ensure bigger priority than LockDatabaseChangeLogGenerator
46  }

メンバ詳解

◆ logger

final Logger org.keycloak.connections.jpa.updater.liquibase.lock.CustomLockDatabaseChangeLogGenerator.logger = Logger.getLogger(CustomLockDatabaseChangeLogGenerator.class)
staticprivate

このクラス詳解は次のファイルから抽出されました: