diff --git a/src/main/java/de/metas/ui/web/session/InternalUserSessionData.java b/src/main/java/de/metas/ui/web/session/InternalUserSessionData.java index 4b15038c4..054cd8251 100644 --- a/src/main/java/de/metas/ui/web/session/InternalUserSessionData.java +++ b/src/main/java/de/metas/ui/web/session/InternalUserSessionData.java @@ -6,7 +6,6 @@ import java.util.Properties; import org.compiere.util.Env; -import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.ScopedProxyMode; @@ -55,7 +54,7 @@ @Primary @SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS) @lombok.Data -/* package */ class InternalUserSessionData implements Serializable, InitializingBean +/* package */ class InternalUserSessionData implements Serializable { private static final long serialVersionUID = 4046535476486036184L; @@ -67,6 +66,7 @@ // // Actual session data + private volatile boolean initialized = false; private String sessionId = null; private UserPreference userPreference = null; private boolean loggedIn = false; @@ -114,8 +114,22 @@ public InternalUserSessionData() UserSession.logger.trace("User session created: {}", this); } - @Override - public void afterPropertiesSet() throws Exception + void initializeIfNeeded() + { + if (!initialized) + { + synchronized (this) + { + if (!initialized) + { + initializeNow(); + initialized = true; + } + } + } + } + + private void initializeNow() { // // Set initial properties diff --git a/src/main/java/de/metas/ui/web/session/UserSession.java b/src/main/java/de/metas/ui/web/session/UserSession.java index c6f43ecb2..fb9e5d355 100644 --- a/src/main/java/de/metas/ui/web/session/UserSession.java +++ b/src/main/java/de/metas/ui/web/session/UserSession.java @@ -157,6 +157,7 @@ public UserSession(final ApplicationEventPublisher eventPublisher) private InternalUserSessionData getData() { + _data.initializeIfNeeded(); return _data; }