String currentVersion = null; try { ResultSet resultSet = connection.createStatement().executeQuery(updater.getCurrentVersionSql(schema)); if (resultSet.next()) { currentVersion = resultSet.getString(1); updater.update(session, connection, schema); } else { logger.debug("Database is up to date"); updater.validate(connection, schema); } else { throw new RuntimeException("Invalid value for databaseSchema: " + databaseSchema);
void migration(MigrationStrategy strategy, boolean initializeEmpty, String schema, File databaseUpdateFile, Connection connection, KeycloakSession session) { JpaUpdaterProvider updater = session.getProvider(JpaUpdaterProvider.class); JpaUpdaterProvider.Status status = updater.validate(connection, schema); if (status == JpaUpdaterProvider.Status.VALID) { logger.debug("Database is up-to-date");
protected void update(Connection connection, String schema, KeycloakSession session, JpaUpdaterProvider updater) { DBLockProvider dbLock = new DBLockManager(session).getDBLock(); if (dbLock.hasLock()) { updater.update(connection, schema); } else { KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), new KeycloakSessionTask() { @Override public void run(KeycloakSession lockSession) { DBLockManager dbLockManager = new DBLockManager(lockSession); DBLockProvider dbLock2 = dbLockManager.getDBLock(); dbLock2.waitForLock(); try { updater.update(connection, schema); } finally { dbLock2.releaseLock(); } } }); } }
protected void export(Connection connection, String schema, File databaseUpdateFile, KeycloakSession session, JpaUpdaterProvider updater) { DBLockProvider dbLock = new DBLockManager(session).getDBLock(); if (dbLock.hasLock()) { updater.export(connection, schema, databaseUpdateFile); } else { KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), new KeycloakSessionTask() { @Override public void run(KeycloakSession lockSession) { DBLockManager dbLockManager = new DBLockManager(lockSession); DBLockProvider dbLock2 = dbLockManager.getDBLock(); dbLock2.waitForLock(); try { updater.export(connection, schema, databaseUpdateFile); } finally { dbLock2.releaseLock(); } } }); } }