diff --git a/docbook/reference/en/en-US/modules/MigrationFromOlderVersions.xml b/docbook/reference/en/en-US/modules/MigrationFromOlderVersions.xml
index 68e48b4a1e..f4fdec29c8 100755
--- a/docbook/reference/en/en-US/modules/MigrationFromOlderVersions.xml
+++ b/docbook/reference/en/en-US/modules/MigrationFromOlderVersions.xml
@@ -102,6 +102,27 @@
to newer version and upgrade few methods, which has changed signature. Changes are really minor, but were needed to improve performance of federation.
+
+ WildFly 9.0.0.CR2
+
+ Following on from the distribution changes that was done in the last release the standalone download
+ of Keycloak is now based on WildFly 9.0.0.CR2. This als affects the overlay which can only be deployed
+ to WildFly 9.0.0.CR2 or JBoss EAP 6.4.0.GA. WildFly 8.2.0.Final is no longer supported for the server.
+
+
+
+ WildFly, JBoss EAP and JBoss AS7 adapters
+
+ There are now 3 separate adapter downloads for WildFly, JBoss EAP and JBoss AS7:
+
+ eap6 - for JBoss EAP 6.x
+ wf9 - for WildFly 9.x
+ wf8 - for WildFly 8.x
+ as7 - for JBoss AS 7.x
+
+ Make sure you grab the correct one.
+
+
Migrating from 1.2.0.Beta1 to 1.2.0.RC1
diff --git a/docbook/reference/en/en-US/modules/jboss-adapter.xml b/docbook/reference/en/en-US/modules/jboss-adapter.xml
index c89d9b1315..3995447e24 100755
--- a/docbook/reference/en/en-US/modules/jboss-adapter.xml
+++ b/docbook/reference/en/en-US/modules/jboss-adapter.xml
@@ -14,10 +14,17 @@
the Keycloak download site. They are also available as a maven artifact.
- Install on Wildfly:
+ Install on Wildfly 9:
$ cd $WILDFLY_HOME
-$ unzip keycloak-wildfly-adapter-dist.zip
+$ unzip keycloak-wf9-adapter-dist.zip
+
+
+
+ Install on Wildfly 8:
+
+$ cd $WILDFLY_HOME
+$ unzip keycloak-wf8-adapter-dist.zip
@@ -56,7 +63,6 @@ $ unzip keycloak-as7-adapter-dist.zip
]]>
-For AS7, the extension module is org.keycloak.keycloak-as7-subsystem.
Finally, you must specify a shared keycloak security domain.
diff --git a/docbook/reference/en/en-US/modules/server-installation.xml b/docbook/reference/en/en-US/modules/server-installation.xml
index 9c321a2e8b..214d88af49 100755
--- a/docbook/reference/en/en-US/modules/server-installation.xml
+++ b/docbook/reference/en/en-US/modules/server-installation.xml
@@ -43,9 +43,9 @@
- Install on existing WildFly 8.2.0.Final
+ Install on existing WildFly 9.0.0.CR2
- Keycloak can be installed into an existing WildFly 8.2.0.Final server. To do this download
+ Keycloak can be installed into an existing WildFly 9.0.0.CR2 server. To do this download
keycloak-overlay-&project.version;.zip or keycloak-overlay-&project.version;.tar.gz.
Once downloaded extract into the root directory of your WildFly installation. To start WildFly with Keycloak
run:
@@ -72,32 +72,9 @@
- Install on existing EAP 6.4.0.GA
+ Install on existing JBoss EAP 6.4.0.GA
- Keycloak can be installed into an existing EAP 6.4.0.GA server. To do this download
- keycloak-overlay-&project.version;.zip or keycloak-overlay-&project.version;.tar.gz.
- Once downloaded extract into the root directory of your EAP installation.
-
-
- To add Keycloak to the a EAP sever configurations (standalone.xml, standalone-ha.xml, etc.) open
- standalone/configuration/standalone-keycloak.xml and the configuration you want to add it
- to, for example standalone/configuration/standalone.xml. From standalone-keycloak.xml
- you need to copy 3 elements:
-
- <extension module="org.keycloak.keycloak-subsystem"/>
- <datasource jndi-name="java:jboss/datasources/KeycloakDS" ...>
- <subsystem xmlns="urn:jboss:domain:keycloak:1.0" ...>
-
-
- standalone-keycloak.xml is aimed at WildFly and won't work with EAP so you need to
- copy the required configuration
-
-
-
- Once the server is started log into the admin console at
- http://localhost:8080/auth/admin/index.html
- (username: admin and password: admin). Keycloak will then prompt you to
- enter in a new password.
+ Same procedure as JBoss EAP 6.4.0.GA, but download keycloak-overlay-eap6-&project.version;.zip or keycloak-overlay-eap6-&project.version;.tar.gz.
@@ -107,7 +84,7 @@
To install it first download keycloak-demo-&project.version;.zip or
keycloak-demo-&project.version;.tar.gz. Once downloaded extract it inside
keycloak-demo-&project.version; you'll find keycloak which contains
- a full WildFly 8.2.0.Final server with Keycloak Server and Adapters included. You'll also find docs
+ a full WildFly 9.0.0.CR2 server with Keycloak Server and Adapters included. You'll also find docs
and examples which contains everything you need to get started developing applications that use Keycloak.
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheUserProvider.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheUserProvider.java
index a37e2a4e47..2f766e0aa4 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheUserProvider.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheUserProvider.java
@@ -31,9 +31,9 @@ public class DefaultCacheUserProvider implements CacheUserProvider {
protected boolean transactionActive;
protected boolean setRollbackOnly;
- protected Map userInvalidations = new HashMap();
- protected Set realmInvalidations = new HashSet();
- protected Map managedUsers = new HashMap();
+ protected Map userInvalidations = new HashMap<>();
+ protected Set realmInvalidations = new HashSet<>();
+ protected Map managedUsers = new HashMap<>();
protected boolean clearAll;
@@ -131,6 +131,7 @@ public class DefaultCacheUserProvider implements CacheUserProvider {
if (cached == null) {
UserModel model = getDelegate().getUserById(id, realm);
if (model == null) return null;
+ if (managedUsers.containsKey(id)) return managedUsers.get(id);
if (userInvalidations.containsKey(id)) return model;
cached = new CachedUser(realm, model);
cache.addCachedUser(realm.getId(), cached);
@@ -155,6 +156,7 @@ public class DefaultCacheUserProvider implements CacheUserProvider {
if (cached == null) {
UserModel model = getDelegate().getUserByUsername(username, realm);
if (model == null) return null;
+ if (managedUsers.containsKey(model.getId())) return managedUsers.get(model.getId());
if (userInvalidations.containsKey(model.getId())) return model;
cached = new CachedUser(realm, model);
cache.addCachedUser(realm.getId(), cached);
@@ -181,6 +183,7 @@ public class DefaultCacheUserProvider implements CacheUserProvider {
if (cached == null) {
UserModel model = getDelegate().getUserByEmail(email, realm);
if (model == null) return null;
+ if (managedUsers.containsKey(model.getId())) return managedUsers.get(model.getId());
if (userInvalidations.containsKey(model.getId())) return model;
cached = new CachedUser(realm, model);
cache.addCachedUser(realm.getId(), cached);
@@ -251,12 +254,16 @@ public class DefaultCacheUserProvider implements CacheUserProvider {
@Override
public UserModel addUser(RealmModel realm, String id, String username, boolean addDefaultRoles) {
- return getDelegate().addUser(realm, id, username, addDefaultRoles);
+ UserModel user = getDelegate().addUser(realm, id, username, addDefaultRoles);
+ managedUsers.put(user.getId(), user);
+ return user;
}
@Override
public UserModel addUser(RealmModel realm, String username) {
- return getDelegate().addUser(realm, username);
+ UserModel user = getDelegate().addUser(realm, username);
+ managedUsers.put(user.getId(), user);
+ return user;
}
@Override
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/CacheTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/CacheTest.java
index e16ae053ec..5f8371c663 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/CacheTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/CacheTest.java
@@ -5,11 +5,11 @@ import java.util.List;
import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Test;
-import org.keycloak.models.ClientModel;
-import org.keycloak.models.KeycloakSession;
-import org.keycloak.models.RealmModel;
+import org.keycloak.models.*;
import org.keycloak.testsuite.rule.KeycloakRule;
+import static org.junit.Assert.assertNotNull;
+
/**
* @author Bill Burke
* @version $Revision: 1 $
@@ -26,7 +26,7 @@ public class CacheTest {
KeycloakSession session = kc.startSession();
RealmModel realm = session.realms().getRealmByName("test");
ClientModel testApp = realm.getClientByClientId("test-app");
- Assert.assertNotNull(testApp);
+ assertNotNull(testApp);
appId = testApp.getId();
Assert.assertTrue(testApp.isEnabled());
kc.stopSession(session, true);
@@ -48,7 +48,7 @@ public class CacheTest {
Assert.assertTrue(realm instanceof org.keycloak.models.cache.RealmAdapter);
realm.setAccessCodeLifespanLogin(200);
ClientModel testApp = realm.getClientByClientId("test-app");
- Assert.assertNotNull(testApp);
+ assertNotNull(testApp);
testApp.setEnabled(false);
kc.stopSession(session, true);
}
@@ -65,4 +65,27 @@ public class CacheTest {
}
+
+ @Test
+ public void testAddUserNotAddedToCache() {
+ KeycloakSession session = kc.startSession();
+ try {
+ RealmModel realm = session.realms().getRealmByName("test");
+
+ UserModel user = session.users().addUser(realm, "testAddUserNotAddedToCache");
+ user.setFirstName("firstName");
+ user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
+
+ UserSessionModel userSession = session.sessions().createUserSession(realm, user, "testAddUserNotAddedToCache", "127.0.0.1", "auth", false, null, null);
+ UserModel user2 = userSession.getUser();
+
+ user.setLastName("lastName");
+
+ assertNotNull(user2.getLastName());
+ } finally {
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+
}