diff --git a/server-spi/src/main/java/org/keycloak/models/UserFederationManager.java b/server-spi/src/main/java/org/keycloak/models/UserFederationManager.java
index 3169ea4..c58278b 100755
--- a/server-spi/src/main/java/org/keycloak/models/UserFederationManager.java
+++ b/server-spi/src/main/java/org/keycloak/models/UserFederationManager.java
@@ -1,6 +1,7 @@
package org.keycloak.models;
import org.jboss.logging.Logger;
+import org.keycloak.models.utils.KeycloakModelUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -104,19 +105,19 @@ public class UserFederationManager implements UserProvider {
}
- protected void deleteInvalidUser(RealmModel realm, UserModel user) {
- KeycloakSession tx = session.getKeycloakSessionFactory().create();
- try {
- tx.getTransaction().begin();
- RealmModel realmModel = tx.realms().getRealm(realm.getId());
- if (realmModel == null) return;
- UserModel deletedUser = tx.userStorage().getUserById(user.getId(), realmModel);
- tx.userStorage().removeUser(realmModel, deletedUser);
- logger.debugf("Removed invalid user '%s'", user.getUsername());
- tx.getTransaction().commit();
- } finally {
- tx.close();
- }
+ protected void deleteInvalidUser(final RealmModel realm, final UserModel user) {
+ KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), new KeycloakSessionTask() {
+
+ @Override
+ public void run(KeycloakSession session) {
+ RealmModel realmModel = session.realms().getRealm(realm.getId());
+ if (realmModel == null) return;
+ UserModel deletedUser = session.userStorage().getUserById(user.getId(), realmModel);
+ session.userStorage().removeUser(realmModel, deletedUser);
+ logger.debugf("Removed invalid user '%s'", user.getUsername());
+ }
+
+ });
}
diff --git a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
index 38cc097..ff99c0b 100644
--- a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
+++ b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
@@ -258,28 +258,33 @@ public class KeycloakApplication extends Application {
public void importRealm(RealmRepresentation rep, String from) {
KeycloakSession session = sessionFactory.create();
+ boolean exists = false;
try {
session.getTransaction().begin();
- RealmManager manager = new RealmManager(session);
- manager.setContextPath(getContextPath());
- if (rep.getId() != null && manager.getRealm(rep.getId()) != null) {
- logger.realmExists(rep.getRealm(), from);
- return;
- }
+ try {
+ RealmManager manager = new RealmManager(session);
+ manager.setContextPath(getContextPath());
- if (manager.getRealmByName(rep.getRealm()) != null) {
- logger.realmExists(rep.getRealm(), from);
- return;
- }
+ if (rep.getId() != null && manager.getRealm(rep.getId()) != null) {
+ logger.realmExists(rep.getRealm(), from);
+ exists = true;
+ }
- try {
- RealmModel realm = manager.importRealm(rep);
+ if (manager.getRealmByName(rep.getRealm()) != null) {
+ logger.realmExists(rep.getRealm(), from);
+ exists = true;
+ }
+ if (!exists) {
+ RealmModel realm = manager.importRealm(rep);
+ logger.importedRealm(realm.getName(), from);
+ }
session.getTransaction().commit();
- logger.importedRealm(realm.getName(), from);
} catch (Throwable t) {
session.getTransaction().rollback();
- logger.unableToImportRealm(t, rep.getRealm(), from);
+ if (!exists) {
+ logger.unableToImportRealm(t, rep.getRealm(), from);
+ }
}
} finally {
session.close();