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;
     }
 
     // 
============================================================================

Reply via email to