KYLIN-2876, refine singleton in ExternalAclProvider.
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a31bce69 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a31bce69 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a31bce69 Branch: refs/heads/master Commit: a31bce69dfef5ee8070e8b642cdcfbcfde404a60 Parents: 55365b6 Author: tttMelody <245915...@qq.com> Authored: Mon Jan 8 19:35:53 2018 +0800 Committer: Li Yang <liy...@apache.org> Committed: Fri Jan 26 22:54:58 2018 +0800 ---------------------------------------------------------------------- .../rest/security/ExternalAclProvider.java | 28 +++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/a31bce69/server-base/src/main/java/org/apache/kylin/rest/security/ExternalAclProvider.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/security/ExternalAclProvider.java b/server-base/src/main/java/org/apache/kylin/rest/security/ExternalAclProvider.java index 9e977d0..ef21f00 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/security/ExternalAclProvider.java +++ b/server-base/src/main/java/org/apache/kylin/rest/security/ExternalAclProvider.java @@ -19,6 +19,7 @@ package org.apache.kylin.rest.security; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.ClassUtil; import org.apache.kylin.common.util.Pair; @@ -28,26 +29,21 @@ import org.springframework.security.acls.model.Permission; */ abstract public class ExternalAclProvider { - private static boolean inited = false; - private static ExternalAclProvider singleton = null; + private volatile static ExternalAclProvider singleton = null; public static ExternalAclProvider getInstance() { - if (inited) - return singleton; - - synchronized (ExternalAclProvider.class) { - if (inited) - return singleton; - - String cls = KylinConfig.getInstanceFromEnv().getExternalAclProvider(); - if (cls != null && cls.length() > 0) { - singleton = (ExternalAclProvider) ClassUtil.newInstance(cls); - singleton.init(); + if (singleton == null) { + synchronized (ExternalAclProvider.class) { + if (singleton == null) { + String cls = KylinConfig.getInstanceFromEnv().getExternalAclProvider(); + if (!StringUtils.isBlank(cls)) { + singleton = (ExternalAclProvider) ClassUtil.newInstance(cls); + singleton.init(); + } + } } - - inited = true; - return singleton; } + return singleton; } // ============================================================================