KEYCLOAK-2235 Fix transaction leaks

This commit is contained in:
mposolda committed 2016-02-01 18:21:27 +01:00
1 parent 77a7b5a130
commit 732256eceb
2 files changed
+34 -28

No files matched your search

@@ -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;
}
if (manager.getRealmByName(rep.getRealm()) != null) {
logger.realmExists(rep.getRealm(), from);
return;
}
try {
RealmModel realm = manager.importRealm(rep);
RealmManager manager = new RealmManager(session);
manager.setContextPath(getContextPath());
if (rep.getId() != null && manager.getRealm(rep.getId()) != null) {
logger.realmExists(rep.getRealm(), from);
exists = true;
}
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();