keycloak-memoizeit

Details

diff --git a/bundled-war-example/pom.xml b/bundled-war-example/pom.xml
index 5812399..0ca04a7 100755
--- a/bundled-war-example/pom.xml
+++ b/bundled-war-example/pom.xml
@@ -152,11 +152,6 @@
         </dependency>
         <dependency>
             <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-admin-ui</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.keycloak</groupId>
             <artifactId>keycloak-js-adapter</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/bundled-war-example/src/main/webapp/WEB-INF/web.xml b/bundled-war-example/src/main/webapp/WEB-INF/web.xml
old mode 100755
new mode 100644
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
index 6960001..85a24ca 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
@@ -125,6 +125,7 @@ public class ApplicationAdapter extends ClientAdapter implements ApplicationMode
         applicationEntity.getRoles().remove(role);
         applicationEntity.getDefaultRoles().remove(role);
 
+        em.createNativeQuery("delete from CompositeRole where role = :role").setParameter("role", role).executeUpdate();
         em.createQuery("delete from " + ScopeMappingEntity.class.getSimpleName() + " where role = :role").setParameter("role", role).executeUpdate();
         em.createQuery("delete from " + UserRoleMappingEntity.class.getSimpleName() + " where role = :role").setParameter("role", role).executeUpdate();
         role.setApplication(null);
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
index 7e43cea..1bebe56 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
@@ -6,6 +6,8 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -27,7 +29,7 @@ public abstract class RoleEntity {
     private String name;
     private String description;
     @ManyToMany(fetch = FetchType.LAZY, cascade = {})
-    //@JoinTable(name = "COMPOSITE_ROLE")
+    @JoinTable(name = "CompositeRole", joinColumns = @JoinColumn(name = "composite"), inverseJoinColumns = @JoinColumn(name = "role"))
     private Collection<RoleEntity> compositeRoles = new ArrayList<RoleEntity>();
 
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index 4cbda3c..54559ab 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -974,6 +974,7 @@ public class RealmAdapter implements RealmModel {
         realm.getRoles().remove(role);
         realm.getDefaultRoles().remove(role);
 
+        em.createNativeQuery("delete from CompositeRole where role = :role").setParameter("role", roleEntity).executeUpdate();
         em.createQuery("delete from " + UserRoleMappingEntity.class.getSimpleName() + " where role = :role").setParameter("role", roleEntity).executeUpdate();
         em.createQuery("delete from " + ScopeMappingEntity.class.getSimpleName() + " where role = :role").setParameter("role", roleEntity).executeUpdate();
 
diff --git a/model/tests/src/test/java/org/keycloak/model/test/AdapterTest.java b/model/tests/src/test/java/org/keycloak/model/test/AdapterTest.java
index 9ea7b1e..9ea3163 100755
--- a/model/tests/src/test/java/org/keycloak/model/test/AdapterTest.java
+++ b/model/tests/src/test/java/org/keycloak/model/test/AdapterTest.java
@@ -212,6 +212,10 @@ public class AdapterTest extends AbstractModelTest {
         realmModel.addScopeMapping(client, appRole);
 
         RoleModel realmRole = realmModel.addRole("test");
+        RoleModel realmRole2 = realmModel.addRole("test2");
+        realmRole.addCompositeRole(realmRole2);
+        realmRole.addCompositeRole(appRole);
+
         realmModel.addScopeMapping(app, realmRole);
 
         Assert.assertTrue(identitySession.removeRealm(realmModel.getId()));
diff --git a/services/src/main/java/org/keycloak/services/managers/RealmManager.java b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
index 14c22d3..4f7b9e0 100755
--- a/services/src/main/java/org/keycloak/services/managers/RealmManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
@@ -105,15 +105,7 @@ public class RealmManager {
     public boolean removeRealm(RealmModel realm) {
         boolean removed = identitySession.removeRealm(realm.getId());
 
-        RealmModel adminRealm = getKeycloakAdminstrationRealm();
-        RoleModel adminRole = adminRealm.getRole(AdminRoles.ADMIN);
-
-        ApplicationModel realmAdminApp = realm.getAdminApp();
-        for (RoleModel r : realmAdminApp.getRoles()) {
-            adminRole.removeCompositeRole(r);
-        }
-
-        adminRealm.removeApplication(realmAdminApp.getId());
+        getKeycloakAdminstrationRealm().removeApplication(realm.getAdminApp().getId());
 
         return removed;
     }
diff --git a/services/src/main/resources/welcome-content/index.html b/services/src/main/resources/welcome-content/index.html
index 7819a9d..dd0b909 100755
--- a/services/src/main/resources/welcome-content/index.html
+++ b/services/src/main/resources/welcome-content/index.html
@@ -38,7 +38,7 @@
 
         <h3>Your Keycloak is running.</h3>
 
-        <p><a href="http://www.keycloak.org/docs">Documentation</a> | <a href="/auth/admin/">Administration Console</a> </p>
+        <p><a href="http://www.keycloak.org/docs">Documentation</a> | <a href="admin/">Administration Console</a> </p>
 
         <p><a href="http://www.keycloak.org">Keycloak Project</a> |
             <a href="https://lists.jboss.org/mailman/listinfo/keycloak-user">Mailing List</a> |