You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/04/04 14:49:51 UTC

[1/2] syncope git commit: Various small fixes

Repository: syncope
Updated Branches:
  refs/heads/2_0_X c7779a14c -> b88bcaf2b
  refs/heads/master 0f51a1ac5 -> 4fdf1c435


Various small fixes


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b88bcaf2
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b88bcaf2
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b88bcaf2

Branch: refs/heads/2_0_X
Commit: b88bcaf2b6822bf3753824a481cf5ea296446519
Parents: c7779a1
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 4 16:49:34 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 4 16:49:34 2017 +0200

----------------------------------------------------------------------
 .../console/SyncopeConsoleApplication.java      | 57 ++++++++++++++------
 .../client/console/SyncopeConsoleSession.java   | 38 +++++--------
 .../syncope/client/console/pages/Login.java     |  4 +-
 .../client/console/rest/BaseRestClient.java     |  3 +-
 .../java/DefaultUserProvisioningManager.java    |  2 +-
 .../core/spring/security/AuthContextUtils.java  |  7 +++
 6 files changed, 66 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index 07a80b6..88a6965 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -24,6 +24,7 @@ import de.agilecoders.wicket.core.settings.IBootstrapSettings;
 import de.agilecoders.wicket.core.settings.SingleThemeProvider;
 import java.io.File;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -32,7 +33,8 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
-import javax.ws.rs.core.MediaType;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.ClassUtils;
@@ -47,8 +49,13 @@ import org.apache.syncope.client.console.resources.FilesystemResource;
 import org.apache.syncope.client.console.resources.WorkflowDefGETResource;
 import org.apache.syncope.client.console.resources.WorkflowDefPUTResource;
 import org.apache.syncope.client.console.themes.AdminLTE;
+import org.apache.syncope.client.lib.AnonymousAuthenticationHandler;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
+import org.apache.syncope.common.lib.EntityTOUtils;
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.to.DomainTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.rest.api.service.DomainService;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
@@ -93,7 +100,17 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
 
     private String reconciliationReportKey;
 
-    private SyncopeClientFactoryBean clientFactory;
+    private String scheme;
+
+    private String host;
+
+    private String port;
+
+    private String rootPath;
+
+    private String useGZIPCompression;
+
+    private List<String> domains;
 
     private Map<String, Class<? extends BasePage>> pageClasses;
 
@@ -146,21 +163,17 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         anonymousKey = props.getProperty("anonymousKey");
         Args.notNull(anonymousKey, "<anonymousKey>");
 
-        String scheme = props.getProperty("scheme");
+        scheme = props.getProperty("scheme");
         Args.notNull(scheme, "<scheme>");
-        String host = props.getProperty("host");
+        host = props.getProperty("host");
         Args.notNull(host, "<host>");
-        String port = props.getProperty("port");
+        port = props.getProperty("port");
         Args.notNull(port, "<port>");
-        String rootPath = props.getProperty("rootPath");
+        rootPath = props.getProperty("rootPath");
         Args.notNull(rootPath, "<rootPath>");
-        String useGZIPCompression = props.getProperty("useGZIPCompression");
+        useGZIPCompression = props.getProperty("useGZIPCompression");
         Args.notNull(useGZIPCompression, "<useGZIPCompression>");
 
-        clientFactory = new SyncopeClientFactoryBean().
-                setAddress(scheme + "://" + host + ":" + port + "/" + rootPath).
-                setUseCompression(BooleanUtils.toBoolean(useGZIPCompression));
-
         // process page properties
         pageClasses = new HashMap<>();
         populatePageClasses(props);
@@ -287,12 +300,24 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         return reconciliationReportKey;
     }
 
-    public SyncopeClientFactoryBean getClientFactory() {
-        return clientFactory;
+    public SyncopeClientFactoryBean newClientFactory() {
+        return new SyncopeClientFactoryBean().
+                setAddress(scheme + "://" + host + ":" + port + "/" + rootPath).
+                setUseCompression(BooleanUtils.toBoolean(useGZIPCompression));
     }
 
-    public MediaType getMediaType() {
-        return clientFactory.getContentType().getMediaType();
+    public List<String> getDomains() {
+        synchronized (LOG) {
+            if (domains == null) {
+                domains = new ArrayList<>();
+                domains.add(SyncopeConstants.MASTER_DOMAIN);
+                CollectionUtils.collect(newClientFactory().create(
+                        new AnonymousAuthenticationHandler(anonymousUser, anonymousKey)).
+                        getService(DomainService.class).list(),
+                        EntityTOUtils.<DomainTO>keyTransformer(), domains);
+                domains = ListUtils.unmodifiableList(domains);
+            }
+        }
+        return domains;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 4064acf..5c3c750 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -19,10 +19,8 @@
 package org.apache.syncope.client.console;
 
 import java.text.DateFormat;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
@@ -30,7 +28,6 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.MediaType;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.commons.lang3.tuple.Pair;
@@ -39,12 +36,9 @@ import org.apache.syncope.client.lib.AnonymousAuthenticationHandler;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
 import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.common.lib.EntityTOUtils;
-import org.apache.syncope.common.lib.to.DomainTO;
 import org.apache.syncope.common.lib.info.PlatformInfo;
 import org.apache.syncope.common.lib.info.SystemInfo;
 import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.rest.api.service.DomainService;
 import org.apache.syncope.common.rest.api.service.SyncopeService;
 import org.apache.wicket.Session;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
@@ -72,14 +66,14 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         THREAD_POOL_FACTORY.setDaemon(true);
     }
 
+    private final SyncopeClientFactoryBean clientFactory;
+
     private final SyncopeClient anonymousClient;
 
     private final PlatformInfo platformInfo;
 
     private final SystemInfo systemInfo;
 
-    private final List<String> domains;
-
     private String domain;
 
     private final Map<Class<?>, Object> services = Collections.synchronizedMap(new HashMap<Class<?>, Object>());
@@ -101,18 +95,18 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
     public SyncopeConsoleSession(final Request request) {
         super(request);
 
-        anonymousClient = SyncopeConsoleApplication.get().getClientFactory().
+        clientFactory = SyncopeConsoleApplication.get().newClientFactory();
+        anonymousClient = clientFactory.
                 create(new AnonymousAuthenticationHandler(
                         SyncopeConsoleApplication.get().getAnonymousUser(),
                         SyncopeConsoleApplication.get().getAnonymousKey()));
 
         platformInfo = anonymousClient.getService(SyncopeService.class).platform();
         systemInfo = anonymousClient.getService(SyncopeService.class).system();
+    }
 
-        domains = new ArrayList<>();
-        domains.add(SyncopeConstants.MASTER_DOMAIN);
-        CollectionUtils.collect(anonymousClient.getService(DomainService.class).list(),
-                EntityTOUtils.<DomainTO>keyTransformer(), domains);
+    public MediaType getMediaType() {
+        return clientFactory.getContentType().getMediaType();
     }
 
     public SyncopeClient getAnonymousClient() {
@@ -131,10 +125,6 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         return systemInfo;
     }
 
-    public List<String> getDomains() {
-        return domains;
-    }
-
     public void setDomain(final String domain) {
         this.domain = domain;
     }
@@ -158,7 +148,7 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         boolean authenticated = false;
 
         try {
-            client = SyncopeConsoleApplication.get().getClientFactory().
+            client = clientFactory.
                     setDomain(getDomain()).create(username, password);
 
             afterAuthentication();
@@ -175,7 +165,7 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         boolean authenticated = false;
 
         try {
-            client = SyncopeConsoleApplication.get().getClientFactory().
+            client = clientFactory.
                     setDomain(getDomain()).create(jwt);
 
             afterAuthentication();
@@ -275,15 +265,15 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
     public <T> T getService(final MediaType mediaType, final Class<T> serviceClass) {
         T service;
 
-        synchronized (SyncopeConsoleApplication.get().getClientFactory()) {
-            SyncopeClientFactoryBean.ContentType preType = SyncopeConsoleApplication.get().getClientFactory().
+        synchronized (clientFactory) {
+            SyncopeClientFactoryBean.ContentType preType = clientFactory.
                     getContentType();
 
-            SyncopeConsoleApplication.get().getClientFactory().
+            clientFactory.
                     setContentType(SyncopeClientFactoryBean.ContentType.fromString(mediaType.toString()));
-            service = SyncopeConsoleApplication.get().getClientFactory().create(getJWT()).getService(serviceClass);
+            service = clientFactory.create(getJWT()).getService(serviceClass);
 
-            SyncopeConsoleApplication.get().getClientFactory().setContentType(preType);
+            clientFactory.setContentType(preType);
         }
 
         return service;

http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
index 296576d..4c7364f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
@@ -100,7 +100,7 @@ public class Login extends WebPage {
         form.add(languageSelect);
 
         domainSelect = new DomainDropDown("domain");
-        if (SyncopeConsoleSession.get().getDomains().size() == 1) {
+        if (SyncopeConsoleApplication.get().getDomains().size() == 1) {
             domainSelect.setOutputMarkupPlaceholderTag(true);
         }
         form.add(domainSelect);
@@ -219,7 +219,7 @@ public class Login extends WebPage {
         private static final long serialVersionUID = -7401167913360133325L;
 
         DomainDropDown(final String id) {
-            super(id, SyncopeConsoleSession.get().getDomains());
+            super(id, SyncopeConsoleApplication.get().getDomains());
 
             setModel(new IModel<String>() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
index d2c73f1..8b3dce2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.net.URI;
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.syncope.client.console.SyncopeConsoleApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.search.OrderByClauseBuilder;
@@ -74,7 +73,7 @@ public abstract class BaseRestClient implements RestClient {
             final E service, final URI location, final Class<T> resultClass) {
 
         WebClient webClient = WebClient.fromClient(WebClient.client(service));
-        webClient.accept(SyncopeConsoleApplication.get().getMediaType()).to(location.toASCIIString(), false);
+        webClient.accept(SyncopeConsoleSession.get().getMediaType()).to(location.toASCIIString(), false);
         return webClient.
                 header(RESTHeaders.DOMAIN, SyncopeConsoleSession.get().getDomain()).
                 header(RESTHeaders.TOKEN, SyncopeConsoleSession.get().getJWT()).

http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 694610b..ba2481e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -56,7 +56,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
-    private static final Logger LOG = LoggerFactory.getLogger(UserProvisioningManager.class);
+    protected static final Logger LOG = LoggerFactory.getLogger(UserProvisioningManager.class);
 
     @Autowired
     protected UserWorkflowAdapter uwfAdapter;

http://git-wip-us.apache.org/repos/asf/syncope/blob/b88bcaf2/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
index 9bc03f7..36e4188 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
@@ -30,6 +30,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.core.provisioning.api.EntitlementsHolder;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
@@ -39,6 +41,8 @@ import org.springframework.security.core.userdetails.User;
 
 public final class AuthContextUtils {
 
+    private static final Logger LOG = LoggerFactory.getLogger(AuthContextUtils.class);
+
     public interface Executable<T> {
 
         T exec();
@@ -112,6 +116,9 @@ public final class AuthContextUtils {
         setFakeAuth(domainKey);
         try {
             return executable.exec();
+        } catch (Throwable t) {
+            LOG.debug("Error during execution with domain {} context", domainKey, t);
+            throw t;
         } finally {
             SecurityContextHolder.clearContext();
             SecurityContextHolder.setContext(ctx);


[2/2] syncope git commit: Various small fixes

Posted by il...@apache.org.
Various small fixes


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4fdf1c43
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4fdf1c43
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4fdf1c43

Branch: refs/heads/master
Commit: 4fdf1c4356b8b527e7482c9983b53c28f85b5501
Parents: 0f51a1a
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 4 16:49:34 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 4 16:49:41 2017 +0200

----------------------------------------------------------------------
 .../console/SyncopeConsoleApplication.java      | 57 ++++++++++++++------
 .../client/console/SyncopeConsoleSession.java   | 38 +++++--------
 .../syncope/client/console/pages/Login.java     |  4 +-
 .../client/console/rest/BaseRestClient.java     |  3 +-
 .../java/DefaultUserProvisioningManager.java    |  2 +-
 .../core/spring/security/AuthContextUtils.java  |  7 +++
 6 files changed, 66 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index 07a80b6..88a6965 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -24,6 +24,7 @@ import de.agilecoders.wicket.core.settings.IBootstrapSettings;
 import de.agilecoders.wicket.core.settings.SingleThemeProvider;
 import java.io.File;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -32,7 +33,8 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
-import javax.ws.rs.core.MediaType;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.ClassUtils;
@@ -47,8 +49,13 @@ import org.apache.syncope.client.console.resources.FilesystemResource;
 import org.apache.syncope.client.console.resources.WorkflowDefGETResource;
 import org.apache.syncope.client.console.resources.WorkflowDefPUTResource;
 import org.apache.syncope.client.console.themes.AdminLTE;
+import org.apache.syncope.client.lib.AnonymousAuthenticationHandler;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
+import org.apache.syncope.common.lib.EntityTOUtils;
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.to.DomainTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.rest.api.service.DomainService;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
@@ -93,7 +100,17 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
 
     private String reconciliationReportKey;
 
-    private SyncopeClientFactoryBean clientFactory;
+    private String scheme;
+
+    private String host;
+
+    private String port;
+
+    private String rootPath;
+
+    private String useGZIPCompression;
+
+    private List<String> domains;
 
     private Map<String, Class<? extends BasePage>> pageClasses;
 
@@ -146,21 +163,17 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         anonymousKey = props.getProperty("anonymousKey");
         Args.notNull(anonymousKey, "<anonymousKey>");
 
-        String scheme = props.getProperty("scheme");
+        scheme = props.getProperty("scheme");
         Args.notNull(scheme, "<scheme>");
-        String host = props.getProperty("host");
+        host = props.getProperty("host");
         Args.notNull(host, "<host>");
-        String port = props.getProperty("port");
+        port = props.getProperty("port");
         Args.notNull(port, "<port>");
-        String rootPath = props.getProperty("rootPath");
+        rootPath = props.getProperty("rootPath");
         Args.notNull(rootPath, "<rootPath>");
-        String useGZIPCompression = props.getProperty("useGZIPCompression");
+        useGZIPCompression = props.getProperty("useGZIPCompression");
         Args.notNull(useGZIPCompression, "<useGZIPCompression>");
 
-        clientFactory = new SyncopeClientFactoryBean().
-                setAddress(scheme + "://" + host + ":" + port + "/" + rootPath).
-                setUseCompression(BooleanUtils.toBoolean(useGZIPCompression));
-
         // process page properties
         pageClasses = new HashMap<>();
         populatePageClasses(props);
@@ -287,12 +300,24 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         return reconciliationReportKey;
     }
 
-    public SyncopeClientFactoryBean getClientFactory() {
-        return clientFactory;
+    public SyncopeClientFactoryBean newClientFactory() {
+        return new SyncopeClientFactoryBean().
+                setAddress(scheme + "://" + host + ":" + port + "/" + rootPath).
+                setUseCompression(BooleanUtils.toBoolean(useGZIPCompression));
     }
 
-    public MediaType getMediaType() {
-        return clientFactory.getContentType().getMediaType();
+    public List<String> getDomains() {
+        synchronized (LOG) {
+            if (domains == null) {
+                domains = new ArrayList<>();
+                domains.add(SyncopeConstants.MASTER_DOMAIN);
+                CollectionUtils.collect(newClientFactory().create(
+                        new AnonymousAuthenticationHandler(anonymousUser, anonymousKey)).
+                        getService(DomainService.class).list(),
+                        EntityTOUtils.<DomainTO>keyTransformer(), domains);
+                domains = ListUtils.unmodifiableList(domains);
+            }
+        }
+        return domains;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 4064acf..5c3c750 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -19,10 +19,8 @@
 package org.apache.syncope.client.console;
 
 import java.text.DateFormat;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
@@ -30,7 +28,6 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.MediaType;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.commons.lang3.tuple.Pair;
@@ -39,12 +36,9 @@ import org.apache.syncope.client.lib.AnonymousAuthenticationHandler;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
 import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.common.lib.EntityTOUtils;
-import org.apache.syncope.common.lib.to.DomainTO;
 import org.apache.syncope.common.lib.info.PlatformInfo;
 import org.apache.syncope.common.lib.info.SystemInfo;
 import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.rest.api.service.DomainService;
 import org.apache.syncope.common.rest.api.service.SyncopeService;
 import org.apache.wicket.Session;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
@@ -72,14 +66,14 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         THREAD_POOL_FACTORY.setDaemon(true);
     }
 
+    private final SyncopeClientFactoryBean clientFactory;
+
     private final SyncopeClient anonymousClient;
 
     private final PlatformInfo platformInfo;
 
     private final SystemInfo systemInfo;
 
-    private final List<String> domains;
-
     private String domain;
 
     private final Map<Class<?>, Object> services = Collections.synchronizedMap(new HashMap<Class<?>, Object>());
@@ -101,18 +95,18 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
     public SyncopeConsoleSession(final Request request) {
         super(request);
 
-        anonymousClient = SyncopeConsoleApplication.get().getClientFactory().
+        clientFactory = SyncopeConsoleApplication.get().newClientFactory();
+        anonymousClient = clientFactory.
                 create(new AnonymousAuthenticationHandler(
                         SyncopeConsoleApplication.get().getAnonymousUser(),
                         SyncopeConsoleApplication.get().getAnonymousKey()));
 
         platformInfo = anonymousClient.getService(SyncopeService.class).platform();
         systemInfo = anonymousClient.getService(SyncopeService.class).system();
+    }
 
-        domains = new ArrayList<>();
-        domains.add(SyncopeConstants.MASTER_DOMAIN);
-        CollectionUtils.collect(anonymousClient.getService(DomainService.class).list(),
-                EntityTOUtils.<DomainTO>keyTransformer(), domains);
+    public MediaType getMediaType() {
+        return clientFactory.getContentType().getMediaType();
     }
 
     public SyncopeClient getAnonymousClient() {
@@ -131,10 +125,6 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         return systemInfo;
     }
 
-    public List<String> getDomains() {
-        return domains;
-    }
-
     public void setDomain(final String domain) {
         this.domain = domain;
     }
@@ -158,7 +148,7 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         boolean authenticated = false;
 
         try {
-            client = SyncopeConsoleApplication.get().getClientFactory().
+            client = clientFactory.
                     setDomain(getDomain()).create(username, password);
 
             afterAuthentication();
@@ -175,7 +165,7 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         boolean authenticated = false;
 
         try {
-            client = SyncopeConsoleApplication.get().getClientFactory().
+            client = clientFactory.
                     setDomain(getDomain()).create(jwt);
 
             afterAuthentication();
@@ -275,15 +265,15 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
     public <T> T getService(final MediaType mediaType, final Class<T> serviceClass) {
         T service;
 
-        synchronized (SyncopeConsoleApplication.get().getClientFactory()) {
-            SyncopeClientFactoryBean.ContentType preType = SyncopeConsoleApplication.get().getClientFactory().
+        synchronized (clientFactory) {
+            SyncopeClientFactoryBean.ContentType preType = clientFactory.
                     getContentType();
 
-            SyncopeConsoleApplication.get().getClientFactory().
+            clientFactory.
                     setContentType(SyncopeClientFactoryBean.ContentType.fromString(mediaType.toString()));
-            service = SyncopeConsoleApplication.get().getClientFactory().create(getJWT()).getService(serviceClass);
+            service = clientFactory.create(getJWT()).getService(serviceClass);
 
-            SyncopeConsoleApplication.get().getClientFactory().setContentType(preType);
+            clientFactory.setContentType(preType);
         }
 
         return service;

http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
index 296576d..4c7364f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Login.java
@@ -100,7 +100,7 @@ public class Login extends WebPage {
         form.add(languageSelect);
 
         domainSelect = new DomainDropDown("domain");
-        if (SyncopeConsoleSession.get().getDomains().size() == 1) {
+        if (SyncopeConsoleApplication.get().getDomains().size() == 1) {
             domainSelect.setOutputMarkupPlaceholderTag(true);
         }
         form.add(domainSelect);
@@ -219,7 +219,7 @@ public class Login extends WebPage {
         private static final long serialVersionUID = -7401167913360133325L;
 
         DomainDropDown(final String id) {
-            super(id, SyncopeConsoleSession.get().getDomains());
+            super(id, SyncopeConsoleApplication.get().getDomains());
 
             setModel(new IModel<String>() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
index d2c73f1..8b3dce2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.net.URI;
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.syncope.client.console.SyncopeConsoleApplication;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.search.OrderByClauseBuilder;
@@ -74,7 +73,7 @@ public abstract class BaseRestClient implements RestClient {
             final E service, final URI location, final Class<T> resultClass) {
 
         WebClient webClient = WebClient.fromClient(WebClient.client(service));
-        webClient.accept(SyncopeConsoleApplication.get().getMediaType()).to(location.toASCIIString(), false);
+        webClient.accept(SyncopeConsoleSession.get().getMediaType()).to(location.toASCIIString(), false);
         return webClient.
                 header(RESTHeaders.DOMAIN, SyncopeConsoleSession.get().getDomain()).
                 header(RESTHeaders.TOKEN, SyncopeConsoleSession.get().getJWT()).

http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 694610b..ba2481e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -56,7 +56,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
-    private static final Logger LOG = LoggerFactory.getLogger(UserProvisioningManager.class);
+    protected static final Logger LOG = LoggerFactory.getLogger(UserProvisioningManager.class);
 
     @Autowired
     protected UserWorkflowAdapter uwfAdapter;

http://git-wip-us.apache.org/repos/asf/syncope/blob/4fdf1c43/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
index 9bc03f7..36e4188 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
@@ -30,6 +30,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.core.provisioning.api.EntitlementsHolder;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
@@ -39,6 +41,8 @@ import org.springframework.security.core.userdetails.User;
 
 public final class AuthContextUtils {
 
+    private static final Logger LOG = LoggerFactory.getLogger(AuthContextUtils.class);
+
     public interface Executable<T> {
 
         T exec();
@@ -112,6 +116,9 @@ public final class AuthContextUtils {
         setFakeAuth(domainKey);
         try {
             return executable.exec();
+        } catch (Throwable t) {
+            LOG.debug("Error during execution with domain {} context", domainKey, t);
+            throw t;
         } finally {
             SecurityContextHolder.clearContext();
             SecurityContextHolder.setContext(ctx);