You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sh...@apache.org on 2015/07/27 08:51:53 UTC

incubator-atlas git commit: ATLAS-80 Support for variables in application properties (shwethags)

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 266d7cc00 -> 9d3037433


ATLAS-80 Support for variables in application properties (shwethags)


Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/9d303743
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/9d303743
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/9d303743

Branch: refs/heads/master
Commit: 9d303743382549b46aad56f78c650b466efa69f1
Parents: 266d7cc
Author: Shwetha GS <ss...@hortonworks.com>
Authored: Mon Jul 27 12:21:45 2015 +0530
Committer: Shwetha GS <ss...@hortonworks.com>
Committed: Mon Jul 27 12:21:45 2015 +0530

----------------------------------------------------------------------
 .../hook/NegativeSSLAndKerberosHiveHookIT.java  |   4 +-
 .../hive/hook/SSLAndKerberosHiveHookIT.java     |   3 +-
 .../org/apache/atlas/ApplicationProperties.java | 124 +++++++++++++++++++
 .../main/java/org/apache/atlas/AtlasClient.java |   7 +-
 .../java/org/apache/atlas/PropertiesUtil.java   |  58 ---------
 .../atlas/security/SecureClientUtils.java       |   9 +-
 .../atlas/security/SecurityProperties.java      |  24 ++--
 .../apache/atlas/ApplicationPropertiesTest.java |  55 ++++++++
 .../src/test/resources/application.properties   |  29 +++++
 docs/pom.xml                                    |  53 +-------
 pom.xml                                         |   5 +
 release-log.txt                                 |   1 +
 .../atlas/discovery/HiveLineageService.java     |   8 +-
 .../repository/graph/TitanGraphProvider.java    |  29 +----
 src/bin/atlas_start.py                          |   4 -
 src/conf/application.properties                 |   4 +-
 src/test/python/scripts/TestMetadata.py         |   4 +-
 webapp/src/main/java/org/apache/atlas/Main.java |   9 +-
 .../web/filters/AtlasAuthenticationFilter.java  |  25 ++--
 .../atlas/web/listeners/GuiceServletConfig.java |   7 +-
 .../atlas/web/listeners/LoginProcessor.java     |  25 ++--
 .../atlas/web/service/EmbeddedServer.java       |   3 +-
 .../atlas/web/listeners/LoginProcessorIT.java   |   4 +-
 23 files changed, 281 insertions(+), 213 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/NegativeSSLAndKerberosHiveHookIT.java
----------------------------------------------------------------------
diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/NegativeSSLAndKerberosHiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/NegativeSSLAndKerberosHiveHookIT.java
index 072c36b..891e06c 100755
--- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/NegativeSSLAndKerberosHiveHookIT.java
+++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/NegativeSSLAndKerberosHiveHookIT.java
@@ -18,7 +18,6 @@
 
 package org.apache.atlas.hive.hook;
 
-import org.apache.atlas.PropertiesUtil;
 import org.apache.atlas.security.SecurityProperties;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.lang.RandomStringUtils;
@@ -100,11 +99,12 @@ public class NegativeSSLAndKerberosHiveHookIT extends BaseSSLAndKerberosTest {
         String confLocation = System.getProperty("atlas.conf");
         URL url;
         if (confLocation == null) {
-            url = PropertiesUtil.class.getResource("/application.properties");
+            url = NegativeSSLAndKerberosHiveHookIT.class.getResource("/application.properties");
         } else {
             url = new File(confLocation, "application.properties").toURI().toURL();
         }
         configuration.load(url);
+
         configuration.setProperty(TLS_ENABLED, true);
         configuration.setProperty("atlas.http.authentication.enabled", "true");
         configuration.setProperty("atlas.http.authentication.kerberos.principal", "HTTP/localhost@" + kdc.getRealm());

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/SSLAndKerberosHiveHookIT.java
----------------------------------------------------------------------
diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/SSLAndKerberosHiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/SSLAndKerberosHiveHookIT.java
index 6fab2ee..7471680 100755
--- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/SSLAndKerberosHiveHookIT.java
+++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/SSLAndKerberosHiveHookIT.java
@@ -20,7 +20,6 @@ package org.apache.atlas.hive.hook;
 
 import org.apache.atlas.AtlasClient;
 import org.apache.atlas.AtlasException;
-import org.apache.atlas.PropertiesUtil;
 import org.apache.atlas.hive.model.HiveDataTypes;
 import org.apache.atlas.security.SecurityProperties;
 import org.apache.commons.configuration.PropertiesConfiguration;
@@ -116,7 +115,7 @@ public class SSLAndKerberosHiveHookIT extends BaseSSLAndKerberosTest {
         String confLocation = System.getProperty("atlas.conf");
         URL url;
         if (confLocation == null) {
-            url = PropertiesUtil.class.getResource("/application.properties");
+            url = SSLAndKerberosHiveHookIT.class.getResource("/application.properties");
         } else {
             url = new File(confLocation, "application.properties").toURI().toURL();
         }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/main/java/org/apache/atlas/ApplicationProperties.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/atlas/ApplicationProperties.java b/client/src/main/java/org/apache/atlas/ApplicationProperties.java
new file mode 100644
index 0000000..ad87d8d
--- /dev/null
+++ b/client/src/main/java/org/apache/atlas/ApplicationProperties.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.atlas;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ApplicationProperties extends PropertiesConfiguration {
+    private static final Logger LOG = LoggerFactory.getLogger(ApplicationProperties.class);
+
+    public static final String APPLICATION_PROPERTIES = "application.properties";
+    public static final String CLIENT_PROPERTIES = "client.properties";
+
+    private static Configuration INSTANCE = null;
+
+    private ApplicationProperties(URL url) throws ConfigurationException {
+        super(url);
+    }
+
+    public static Configuration get() throws AtlasException {
+        if (INSTANCE == null) {
+            synchronized (ApplicationProperties.class) {
+                if (INSTANCE == null) {
+                   INSTANCE = get(APPLICATION_PROPERTIES);
+                }
+            }
+        }
+        return INSTANCE;
+    }
+
+    public static Configuration get(String fileName) throws AtlasException {
+        String confLocation = System.getProperty("atlas.conf");
+        try {
+            URL url = confLocation == null ? ApplicationProperties.class.getResource("/" + fileName)
+                    : new File(confLocation, fileName).toURI().toURL();
+            LOG.info("Loading {} from {}", fileName, url);
+
+            ApplicationProperties configuration = new ApplicationProperties(url);
+            Iterator<String> keys = configuration.getKeys();
+            LOG.debug("Configuration loaded:");
+            while(keys.hasNext()) {
+                String key = keys.next();
+                LOG.debug("{} = {}", key, configuration.getProperty(key));
+            }
+            return configuration;
+        } catch (Exception e) {
+            throw new AtlasException("Failed to load application properties", e);
+        }
+    }
+
+    public static final Configuration getSubsetConfiguration(Configuration inConf, String prefix) {
+        return inConf.subset(prefix);
+    }
+
+    @Override
+    public Object getProperty(String key) {
+        Object value = super.getProperty(key);
+        if (value instanceof String) {
+            value = substituteVars((String) value);
+        }
+        return value;
+    }
+
+    private static final Pattern VAR_PATTERN = Pattern.compile("\\$\\{[^\\}\\$\u0020]+\\}");
+
+    private static final int MAX_SUBST = 20;
+
+    private String substituteVars(String expr) {
+        if (expr == null) {
+            return null;
+        }
+        Matcher match = VAR_PATTERN.matcher("");
+        String eval = expr;
+
+        for(int s = 0; s < MAX_SUBST; s++) {
+            match.reset(eval);
+            if (!match.find()) {
+                return eval;
+            }
+            String var = match.group();
+            var = var.substring(2, var.length() - 1); // remove ${ .. }
+            String val = null;
+            try {
+                val = System.getProperty(var);
+            } catch(SecurityException se) {
+                LOG.warn("Unexpected SecurityException in Configuration", se);
+            }
+            if (val == null) {
+                val = getString(var);
+            }
+            if (val == null) {
+                return eval; // return literal ${var}: var is unbound
+            }
+
+            // substitute
+            eval = eval.substring(0, match.start()) + val + eval.substring(match.end());
+        }
+        throw new IllegalStateException("Variable substitution depth too large: " + MAX_SUBST + " " + expr);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/main/java/org/apache/atlas/AtlasClient.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/atlas/AtlasClient.java b/client/src/main/java/org/apache/atlas/AtlasClient.java
index ff03bc1..1c7d62a 100755
--- a/client/src/main/java/org/apache/atlas/AtlasClient.java
+++ b/client/src/main/java/org/apache/atlas/AtlasClient.java
@@ -26,6 +26,7 @@ import com.sun.jersey.client.urlconnection.URLConnectionClientHandler;
 import org.apache.atlas.security.SecureClientUtils;
 import org.apache.atlas.typesystem.Referenceable;
 import org.apache.atlas.typesystem.json.InstanceSerialization;
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.codehaus.jettison.json.JSONArray;
@@ -87,7 +88,7 @@ public class AtlasClient {
 
     public AtlasClient(String baseUrl, UserGroupInformation ugi, String doAsUser) {
         DefaultClientConfig config = new DefaultClientConfig();
-        PropertiesConfiguration clientConfig = null;
+        Configuration clientConfig = null;
         try {
             clientConfig = getClientProperties();
             if (clientConfig.getBoolean(TLS_ENABLED, false)) {
@@ -109,8 +110,8 @@ public class AtlasClient {
         service = client.resource(UriBuilder.fromUri(baseUrl).build());
     }
 
-    protected PropertiesConfiguration getClientProperties() throws AtlasException {
-        return PropertiesUtil.getClientProperties();
+    protected Configuration getClientProperties() throws AtlasException {
+        return ApplicationProperties.get(ApplicationProperties.CLIENT_PROPERTIES);
     }
 
     enum API {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/main/java/org/apache/atlas/PropertiesUtil.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/atlas/PropertiesUtil.java b/client/src/main/java/org/apache/atlas/PropertiesUtil.java
deleted file mode 100644
index bc56cbf..0000000
--- a/client/src/main/java/org/apache/atlas/PropertiesUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.atlas;
-
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.net.URL;
-
-public class PropertiesUtil {
-    private static final Logger LOG = LoggerFactory.getLogger(PropertiesUtil.class);
-
-    private static final String APPLICATION_PROPERTIES = "application.properties";
-    public static final String CLIENT_PROPERTIES = "client.properties";
-
-    public static PropertiesConfiguration getApplicationProperties() throws AtlasException {
-        return getPropertiesConfiguration(APPLICATION_PROPERTIES);
-    }
-
-    public static PropertiesConfiguration getClientProperties() throws AtlasException {
-        return getPropertiesConfiguration(CLIENT_PROPERTIES);
-    }
-
-    private static PropertiesConfiguration getPropertiesConfiguration(String name) throws AtlasException {
-        String confLocation = System.getProperty("atlas.conf");
-        URL url;
-        try {
-            if (confLocation == null) {
-                url = PropertiesUtil.class.getResource("/" + name);
-            } else {
-                url = new File(confLocation, name).toURI().toURL();
-            }
-            LOG.info("Loading {} from {}", name, url);
-            return new PropertiesConfiguration(url);
-        } catch (Exception e) {
-            throw new AtlasException("Failed to load application properties", e);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/main/java/org/apache/atlas/security/SecureClientUtils.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/atlas/security/SecureClientUtils.java b/client/src/main/java/org/apache/atlas/security/SecureClientUtils.java
index eb55b4a..b70c5ce 100644
--- a/client/src/main/java/org/apache/atlas/security/SecureClientUtils.java
+++ b/client/src/main/java/org/apache/atlas/security/SecureClientUtils.java
@@ -20,8 +20,6 @@ import com.sun.jersey.api.client.config.DefaultClientConfig;
 import com.sun.jersey.client.urlconnection.HttpURLConnectionFactory;
 import com.sun.jersey.client.urlconnection.URLConnectionClientHandler;
 import org.apache.atlas.AtlasException;
-import org.apache.atlas.PropertiesUtil;
-import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.alias.CredentialProviderFactory;
@@ -62,7 +60,8 @@ public class SecureClientUtils {
 
 
     public static URLConnectionClientHandler getClientConnectionHandler(DefaultClientConfig config,
-            PropertiesConfiguration clientConfig, final String doAsUser, final UserGroupInformation ugi) {
+            org.apache.commons.configuration.Configuration clientConfig, final String doAsUser,
+            final UserGroupInformation ugi) {
         config.getProperties().put(URLConnectionClientHandler.PROPERTY_HTTP_URL_CONNECTION_SET_METHOD_WORKAROUND, true);
         Configuration conf = new Configuration();
         conf.addResource(conf.get(SSLFactory.SSL_CLIENT_CONF_KEY, "ssl-client.xml"));
@@ -177,7 +176,7 @@ public class SecureClientUtils {
         try {
             if (confLocation == null) {
                 String persistDir = null;
-                URL resource = PropertiesUtil.class.getResource("/");
+                URL resource = SecureClientUtils.class.getResource("/");
                 if (resource != null) {
                     persistDir = resource.toURI().getPath();
                 }
@@ -193,7 +192,7 @@ public class SecureClientUtils {
         return new File(sslDir, SecurityProperties.SSL_CLIENT_PROPERTIES);
     }
 
-    public static void persistSSLClientConfiguration(PropertiesConfiguration clientConfig)
+    public static void persistSSLClientConfiguration(org.apache.commons.configuration.Configuration clientConfig)
     throws AtlasException, IOException {
         //trust settings
         Configuration configuration = new Configuration(false);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/main/java/org/apache/atlas/security/SecurityProperties.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/atlas/security/SecurityProperties.java b/client/src/main/java/org/apache/atlas/security/SecurityProperties.java
index e03ffcc..5029e12 100644
--- a/client/src/main/java/org/apache/atlas/security/SecurityProperties.java
+++ b/client/src/main/java/org/apache/atlas/security/SecurityProperties.java
@@ -21,16 +21,16 @@ package org.apache.atlas.security;
  *
  */
 public interface SecurityProperties {
-    public static final String TLS_ENABLED = "atlas.enableTLS";
-    public static final String KEYSTORE_FILE_KEY = "keystore.file";
-    public static final String DEFAULT_KEYSTORE_FILE_LOCATION = "target/atlas.keystore";
-    public static final String KEYSTORE_PASSWORD_KEY = "keystore.password";
-    public static final String TRUSTSTORE_FILE_KEY = "truststore.file";
-    public static final String DEFATULT_TRUSTORE_FILE_LOCATION = "target/atlas.keystore";
-    public static final String TRUSTSTORE_PASSWORD_KEY = "truststore.password";
-    public static final String SERVER_CERT_PASSWORD_KEY = "password";
-    public static final String CLIENT_AUTH_KEY = "client.auth.enabled";
-    public static final String CERT_STORES_CREDENTIAL_PROVIDER_PATH = "cert.stores.credential.provider.path";
-    public static final String SSL_CLIENT_PROPERTIES = "ssl-client.xml";
-    public static final String BIND_ADDRESS = "atlas.server.bind.address";
+    String TLS_ENABLED = "atlas.enableTLS";
+    String KEYSTORE_FILE_KEY = "keystore.file";
+    String DEFAULT_KEYSTORE_FILE_LOCATION = "target/atlas.keystore";
+    String KEYSTORE_PASSWORD_KEY = "keystore.password";
+    String TRUSTSTORE_FILE_KEY = "truststore.file";
+    String DEFATULT_TRUSTORE_FILE_LOCATION = "target/atlas.keystore";
+    String TRUSTSTORE_PASSWORD_KEY = "truststore.password";
+    String SERVER_CERT_PASSWORD_KEY = "password";
+    String CLIENT_AUTH_KEY = "client.auth.enabled";
+    String CERT_STORES_CREDENTIAL_PROVIDER_PATH = "cert.stores.credential.provider.path";
+    String SSL_CLIENT_PROPERTIES = "ssl-client.xml";
+    String BIND_ADDRESS = "atlas.server.bind.address";
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java b/client/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
new file mode 100644
index 0000000..4acb3e1
--- /dev/null
+++ b/client/src/test/java/org/apache/atlas/ApplicationPropertiesTest.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.atlas;
+
+import org.apache.commons.configuration.Configuration;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class ApplicationPropertiesTest {
+
+    @Test
+    public void testVariables() throws Exception {
+        Configuration properties = ApplicationProperties.get();
+
+        //plain property without variables
+        Assert.assertEquals(properties.getString("atlas.service"), "atlas");
+
+        //property containing system property
+        String data = "/var/data/" + System.getProperty("user.name") + "/atlas";
+        Assert.assertEquals(properties.getString("atlas.data"), data);
+
+        //property referencing other property
+        Assert.assertEquals(properties.getString("atlas.graph.data"), data + "/graph");
+
+        //invalid system property - not substituted
+        Assert.assertEquals(properties.getString("atlas.db"), "${atlasdb}");
+    }
+
+    @Test
+    //variable substitutions should work with subset configuration as well
+    public void testSubset() throws Exception {
+        Configuration configuration = ApplicationProperties.get();
+        Configuration subConfiguration = configuration.subset("atlas");
+
+        Assert.assertEquals(subConfiguration.getString("service"), "atlas");
+        String data = "/var/data/" + System.getProperty("user.name") + "/atlas";
+        Assert.assertEquals(subConfiguration.getString("data"), data);
+        Assert.assertEquals(subConfiguration.getString("graph.data"), data + "/graph");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/client/src/test/resources/application.properties
----------------------------------------------------------------------
diff --git a/client/src/test/resources/application.properties b/client/src/test/resources/application.properties
new file mode 100644
index 0000000..9672d1e
--- /dev/null
+++ b/client/src/test/resources/application.properties
@@ -0,0 +1,29 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#system property
+atlas.data=/var/data/${user.name}/atlas
+
+#re-use existing property
+atlas.graph.data=${atlas.data}/graph
+
+#plain property
+atlas.service=atlas
+
+#invalid system property
+atlas.db=${atlasdb}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/docs/pom.xml
----------------------------------------------------------------------
diff --git a/docs/pom.xml b/docs/pom.xml
index 55f5f8d..4535fe0 100755
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -32,39 +32,9 @@
 
     <properties>
         <skipTests>true</skipTests>
+        <skipDocs>false</skipDocs>
     </properties>
 
-<!--
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.maven.doxia</groupId>
-                        <artifactId>doxia-module-twiki</artifactId>
-                        <version>1.3</version>
-                    </dependency>
-                </dependencies>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>site</goal>
-                        </goals>
-                        <phase>prepare-package</phase>
-                    </execution>
-                </executions>
-                <configuration>
-                    <generateProjectInfo>false</generateProjectInfo>
-                    <generateReports>false</generateReports>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
--->
-
     <build>
         <plugins>
             <plugin>
@@ -92,7 +62,7 @@
                     </execution>
                 </executions>
                 <configuration>
-                    <!--<outputDirectory>../../site</outputDirectory>-->
+                    <skip>${skipDocs}</skip>
                     <reportPlugins>
                         <plugin>
                             <groupId>org.apache.maven.plugins</groupId>
@@ -131,25 +101,6 @@
                     </reportPlugins>
                 </configuration>
             </plugin>
-<!--
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.3</version>
-                <configuration>
-                    <webResources>
-                        <resource>
-                            <directory>src/site/resources</directory>
-                            <targetPath>pages</targetPath>
-                        </resource>
-                        <resource>
-                            <directory>target/site</directory>
-                            <targetPath>pages</targetPath>
-                        </resource>
-                    </webResources>
-                </configuration>
-            </plugin>
--->
         </plugins>
     </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a8afcc3..c201b4c 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1304,6 +1304,7 @@
 
             <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
+                <inherited>false</inherited>
                 <configuration>
                     <descriptors>
                         <descriptor>src/main/assemblies/standalone-package.xml</descriptor>
@@ -1318,6 +1319,9 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.18.1</version>
                 <configuration>
+                    <systemProperties>
+                        <user.dir>${project.basedir}</user.dir>
+                    </systemProperties>
                     <!--<skipTests>true</skipTests>-->
                     <forkMode>always</forkMode>
                     <redirectTestOutputToFile>true</redirectTestOutputToFile>
@@ -1536,6 +1540,7 @@
                     </execution>
                 </executions>
             </plugin>
+
             <plugin>
                 <artifactId>maven-clean-plugin</artifactId>
                 <configuration>

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 76b8778..7a7329c 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -8,6 +8,7 @@ ATLAS-54 Rename configs in hive hook (shwethags)
 ATLAS-3 Mixed Index creation fails with Date types (suma.shivaprasad via shwethags)
 
 ALL CHANGES:
+ATLAS-80 Support for variables in application properties (shwethags)
 ATLAS-37 atlas repository, webapp, hive-bridge tests fails with Hbase and Solr as Titan storage backend (suma.shivaprasad via shwethags)
 ATLAS-56 atlas_config.py should give an informative error if jar or java binaries can't be found (dossett@gmail.com via shwethags)
 ATLAS-45 Entity submit fails (suma.shivaprasad via shwethags)

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java b/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
index 76d94a3..7a6ff55 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
@@ -19,10 +19,10 @@
 package org.apache.atlas.discovery;
 
 import com.thinkaurelius.titan.core.TitanGraph;
+import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.AtlasException;
 import org.apache.atlas.GraphTransaction;
 import org.apache.atlas.ParamChecker;
-import org.apache.atlas.PropertiesUtil;
 import org.apache.atlas.discovery.graph.DefaultGraphPersistenceStrategy;
 import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
 import org.apache.atlas.query.Expressions;
@@ -33,7 +33,7 @@ import org.apache.atlas.repository.EntityNotFoundException;
 import org.apache.atlas.repository.MetadataRepository;
 import org.apache.atlas.repository.graph.GraphProvider;
 import org.apache.atlas.typesystem.persistence.ReferenceableInstance;
-import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.configuration.Configuration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import scala.Option;
@@ -63,12 +63,12 @@ public class HiveLineageService implements LineageService {
 
     private static final String HIVE_TABLE_EXISTS_QUERY;
 
-    private static final PropertiesConfiguration propertiesConf;
+    private static final Configuration propertiesConf;
 
     static {
         // todo - externalize this using type system - dog food
         try {
-            propertiesConf = PropertiesUtil.getApplicationProperties();
+            propertiesConf = ApplicationProperties.get();
             HIVE_TABLE_TYPE_NAME = propertiesConf.getString("atlas.lineage.hive.table.type.name", "DataSet");
             HIVE_PROCESS_TYPE_NAME = propertiesConf.getString("atlas.lineage.hive.process.type.name", "Process");
             HIVE_PROCESS_INPUT_ATTRIBUTE_NAME = propertiesConf.getString("atlas.lineage.hive.process.inputs.name", "inputs");

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/repository/src/main/java/org/apache/atlas/repository/graph/TitanGraphProvider.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/TitanGraphProvider.java b/repository/src/main/java/org/apache/atlas/repository/graph/TitanGraphProvider.java
index d7ed1f1..5e61b9a 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/TitanGraphProvider.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/TitanGraphProvider.java
@@ -21,16 +21,13 @@ package org.apache.atlas.repository.graph;
 import com.google.inject.Provides;
 import com.thinkaurelius.titan.core.TitanFactory;
 import com.thinkaurelius.titan.core.TitanGraph;
+import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.AtlasException;
-import org.apache.atlas.PropertiesUtil;
 import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.PropertiesConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Singleton;
-import java.util.Iterator;
-import java.util.Properties;
 
 /**
  * Default implementation for Graph Provider that doles out Titan Graph.
@@ -42,31 +39,13 @@ public class TitanGraphProvider implements GraphProvider<TitanGraph> {
     /**
      * Constant for the configuration property that indicates the prefix.
      */
-    private static final String ATLAS_PREFIX = "atlas.graph.";
+    private static final String GRAPH_PREFIX = "atlas.graph";
 
     private static TitanGraph graphInstance;
 
     private static Configuration getConfiguration() throws AtlasException {
-        PropertiesConfiguration configProperties = PropertiesUtil.getApplicationProperties();
-
-        Configuration graphConfig = new PropertiesConfiguration();
-
-        Properties sysProperties = System.getProperties();
-        LOG.info("System properties: ");
-        LOG.info(sysProperties.toString());
-
-        final Iterator<String> iterator = configProperties.getKeys();
-        while (iterator.hasNext()) {
-            String key = iterator.next();
-            if (key.startsWith(ATLAS_PREFIX)) {
-                String value = (String) configProperties.getProperty(key);
-                key = key.substring(ATLAS_PREFIX.length());
-                graphConfig.setProperty(key, value);
-                LOG.info("Using graph property {}={}", key, value);
-            }
-        }
-
-        return graphConfig;
+        Configuration configProperties = ApplicationProperties.get();
+        return ApplicationProperties.getSubsetConfiguration(configProperties, GRAPH_PREFIX);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/src/bin/atlas_start.py
----------------------------------------------------------------------
diff --git a/src/bin/atlas_start.py b/src/bin/atlas_start.py
index 0ad188c..66e8735 100755
--- a/src/bin/atlas_start.py
+++ b/src/bin/atlas_start.py
@@ -24,7 +24,6 @@ import atlas_config as mc
 METADATA_LOG_OPTS="-Datlas.log.dir=%s -Datlas.log.file=application.log"
 METADATA_COMMAND_OPTS="-Datlas.home=%s"
 METADATA_CONFIG_OPTS="-Datlas.conf=%s"
-ATLAS_USER_DIR="-Duser.dir=%s"
 DEFAULT_JVM_OPTS="-Xmx1024m"
 
 def main():
@@ -40,9 +39,6 @@ def main():
     cmd_opts = (METADATA_COMMAND_OPTS % metadata_home)
     jvm_opts_list.extend(cmd_opts.split())
 
-    user_dir = (ATLAS_USER_DIR % metadata_home)
-    jvm_opts_list.extend(user_dir.split())
-
     config_opts = (METADATA_CONFIG_OPTS % confdir)
     jvm_opts_list.extend(config_opts.split())
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/src/conf/application.properties
----------------------------------------------------------------------
diff --git a/src/conf/application.properties b/src/conf/application.properties
index 5c8c59a..51f2529 100755
--- a/src/conf/application.properties
+++ b/src/conf/application.properties
@@ -19,7 +19,7 @@
 #########  Graph Database Configs  #########
 # Graph Storage
 atlas.graph.storage.backend=berkeleyje
-atlas.graph.storage.directory=data/berkley
+atlas.graph.storage.directory=${atlas.home}/data/berkley
 
 #Hbase as stoarge backend
 #hbase
@@ -40,7 +40,7 @@ atlas.graph.storage.directory=data/berkley
 
 # Graph Search Index
 atlas.graph.index.search.backend=elasticsearch
-atlas.graph.index.search.directory=data/es
+atlas.graph.index.search.directory=${atlas.home}/data/es
 atlas.graph.index.search.elasticsearch.client-only=false
 atlas.graph.index.search.elasticsearch.local-mode=true
 atlas.graph.index.search.elasticsearch.create.sleep=2000

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/src/test/python/scripts/TestMetadata.py
----------------------------------------------------------------------
diff --git a/src/test/python/scripts/TestMetadata.py b/src/test/python/scripts/TestMetadata.py
index 9ca346d..bb250cb 100644
--- a/src/test/python/scripts/TestMetadata.py
+++ b/src/test/python/scripts/TestMetadata.py
@@ -51,13 +51,13 @@ class TestMetadata(unittest.TestCase):
         'org.apache.atlas.Main',
         ['-app', 'metadata_home/server/webapp/atlas'],
         'metadata_home/conf:metadata_home/server/webapp/atlas/WEB-INF/classes:metadata_home/server/webapp/atlas/WEB-INF/lib\\*:metadata_home/libext\\*',
-        ['-Datlas.log.dir=metadata_home/logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Duser.dir=metadata_home', '-Datlas.conf=metadata_home/conf', '-Xmx1024m'], 'metadata_home/logs')
+        ['-Datlas.log.dir=metadata_home/logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Datlas.conf=metadata_home/conf', '-Xmx1024m'], 'metadata_home/logs')
     else:
       java_mock.assert_called_with(
         'org.apache.atlas.Main',
         ['-app', 'metadata_home/server/webapp/atlas'],
         'metadata_home/conf:metadata_home/server/webapp/atlas/WEB-INF/classes:metadata_home/server/webapp/atlas/WEB-INF/lib/*:metadata_home/libext/*',
-        ['-Datlas.log.dir=metadata_home/logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Duser.dir=metadata_home', '-Datlas.conf=metadata_home/conf', '-Xmx1024m'],  'metadata_home/logs')
+        ['-Datlas.log.dir=metadata_home/logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Datlas.conf=metadata_home/conf', '-Xmx1024m'],  'metadata_home/logs')
     pass
 
   def test_jar_java_lookups_fail(self):

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/main/java/org/apache/atlas/Main.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/Main.java b/webapp/src/main/java/org/apache/atlas/Main.java
index 6cdeca8..b71ca82 100755
--- a/webapp/src/main/java/org/apache/atlas/Main.java
+++ b/webapp/src/main/java/org/apache/atlas/Main.java
@@ -24,6 +24,7 @@ import org.apache.commons.cli.GnuParser;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -76,7 +77,7 @@ public final class Main {
         }
 
         setApplicationHome();
-        PropertiesConfiguration configuration = PropertiesUtil.getApplicationProperties();
+        Configuration configuration = ApplicationProperties.get();
         final String enableTLSFlag = configuration.getString("atlas.enableTLS");
         final int appPort = getApplicationPort(cmd, enableTLSFlag, configuration);
         final boolean enableTLS = isTLSEnabled(enableTLSFlag, appPort);
@@ -100,9 +101,7 @@ public final class Main {
         return buildConfiguration.getString("project.version");
     }
 
-    static int getApplicationPort(CommandLine cmd,
-                                          String enableTLSFlag,
-                                          PropertiesConfiguration configuration) {
+    static int getApplicationPort(CommandLine cmd, String enableTLSFlag, Configuration configuration) {
         final int appPort;
         if (cmd.hasOption(APP_PORT)) {
             appPort = Integer.valueOf(cmd.getOptionValue(APP_PORT));
@@ -114,7 +113,7 @@ public final class Main {
         return appPort;
     }
 
-    private static int getPortValue(PropertiesConfiguration configuration, String enableTLSFlag) {
+    private static int getPortValue(Configuration configuration, String enableTLSFlag) {
         int appPort;
 
         assert configuration != null;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationFilter.java
index 80d586b..ba04da2 100644
--- a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationFilter.java
+++ b/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationFilter.java
@@ -19,9 +19,10 @@
 package org.apache.atlas.web.filters;
 
 import com.google.inject.Singleton;
-import org.apache.atlas.PropertiesUtil;
+import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.security.SecurityProperties;
-import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationConverter;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.authentication.server.AuthenticationFilter;
 import org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler;
@@ -44,18 +45,20 @@ import java.util.Properties;
 @Singleton
 public class AtlasAuthenticationFilter extends AuthenticationFilter {
     private static final Logger LOG = LoggerFactory.getLogger(AtlasAuthenticationFilter.class);
-    static final String PREFIX = "atlas.http.authentication.";
+    static final String PREFIX = "atlas.http.authentication";
 
     @Override
     protected Properties getConfiguration(String configPrefix, FilterConfig filterConfig) throws ServletException {
-        PropertiesConfiguration configuration;
+        Configuration configuration;
         try {
-            configuration = PropertiesUtil.getApplicationProperties();
+            configuration = ApplicationProperties.get();
         } catch (Exception e) {
             throw new ServletException(e);
         }
 
-        Properties config = new Properties();
+        // transfer application.properties config items starting with defined prefix
+        Configuration subConfiguration = ApplicationProperties.getSubsetConfiguration(configuration, PREFIX);
+        Properties config = ConfigurationConverter.getProperties(subConfiguration);
 
         config.put(AuthenticationFilter.COOKIE_PATH, "/");
 
@@ -65,16 +68,6 @@ public class AtlasAuthenticationFilter extends AuthenticationFilter {
             String name = enumeration.nextElement();
             config.put(name, filterConfig.getInitParameter(name));
         }
-        // transfer application.properties config items starting with defined prefix
-        Iterator<String> itor = configuration.getKeys();
-        while (itor.hasNext()) {
-            String name = itor.next();
-            if (name.startsWith(PREFIX)) {
-                String value = configuration.getString(name);
-                name = name.substring(PREFIX.length());
-                config.put(name, value);
-            }
-        }
 
         //Resolve _HOST into bind address
         String bindAddress = configuration.getString(SecurityProperties.BIND_ADDRESS);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/main/java/org/apache/atlas/web/listeners/GuiceServletConfig.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/listeners/GuiceServletConfig.java b/webapp/src/main/java/org/apache/atlas/web/listeners/GuiceServletConfig.java
index b643f13..8371d9c 100755
--- a/webapp/src/main/java/org/apache/atlas/web/listeners/GuiceServletConfig.java
+++ b/webapp/src/main/java/org/apache/atlas/web/listeners/GuiceServletConfig.java
@@ -29,19 +29,18 @@ import com.sun.jersey.guice.JerseyServletModule;
 import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
 import com.thinkaurelius.titan.core.TitanGraph;
 import com.tinkerpop.blueprints.Graph;
+import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.AtlasClient;
 import org.apache.atlas.AtlasException;
-import org.apache.atlas.PropertiesUtil;
 import org.apache.atlas.RepositoryMetadataModule;
 import org.apache.atlas.repository.graph.GraphProvider;
 import org.apache.atlas.web.filters.AtlasAuthenticationFilter;
 import org.apache.atlas.web.filters.AuditFilter;
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.inject.Inject;
 import javax.servlet.ServletContextEvent;
 import java.util.HashMap;
 import java.util.Map;
@@ -85,7 +84,7 @@ public class GuiceServletConfig extends GuiceServletContextListener {
 
                         private void configureAuthenticationFilter() throws ConfigurationException {
                             try {
-                                PropertiesConfiguration configuration = PropertiesUtil.getApplicationProperties();
+                                Configuration configuration = ApplicationProperties.get();
                                 if (Boolean.valueOf(configuration.getString(HTTP_AUTHENTICATION_ENABLED))) {
                                     filter("/*").through(AtlasAuthenticationFilter.class);
                                 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/main/java/org/apache/atlas/web/listeners/LoginProcessor.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/listeners/LoginProcessor.java b/webapp/src/main/java/org/apache/atlas/web/listeners/LoginProcessor.java
index 5f180f5..e17d669 100644
--- a/webapp/src/main/java/org/apache/atlas/web/listeners/LoginProcessor.java
+++ b/webapp/src/main/java/org/apache/atlas/web/listeners/LoginProcessor.java
@@ -16,11 +16,10 @@
  */
 package org.apache.atlas.web.listeners;
 
+import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.AtlasException;
-import org.apache.atlas.PropertiesUtil;
 import org.apache.atlas.security.SecurityProperties;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
@@ -51,12 +50,7 @@ public class LoginProcessor {
         // first, let's see if we're running in a hadoop cluster and have the env configured
         boolean isHadoopCluster = isHadoopCluster();
         Configuration hadoopConfig = isHadoopCluster ? getHadoopConfiguration() : new Configuration(false);
-        PropertiesConfiguration configuration = null;
-        try {
-            configuration = getPropertiesConfiguration();
-        } catch (ConfigurationException e) {
-            LOG.warn("Error reading application configuration", e);
-        }
+        org.apache.commons.configuration.Configuration configuration = getApplicationConfiguration();
         if (!isHadoopCluster) {
             // need to read the configured authentication choice and create the UGI configuration
             setupHadoopConfiguration(hadoopConfig, configuration);
@@ -64,7 +58,8 @@ public class LoginProcessor {
         doServiceLogin(hadoopConfig, configuration);
     }
 
-    protected void doServiceLogin(Configuration hadoopConfig, PropertiesConfiguration configuration) {
+    protected void doServiceLogin(Configuration hadoopConfig,
+            org.apache.commons.configuration.Configuration configuration) {
         UserGroupInformation.setConfiguration(hadoopConfig);
 
         UserGroupInformation ugi = null;
@@ -85,7 +80,7 @@ public class LoginProcessor {
         }
     }
 
-    private String getHostname(PropertiesConfiguration configuration) {
+    private String getHostname(org.apache.commons.configuration.Configuration configuration) {
         String bindAddress = configuration.getString(SecurityProperties.BIND_ADDRESS);
         if (bindAddress == null) {
             LOG.info("No host name configured.  Defaulting to local host name.");
@@ -98,7 +93,8 @@ public class LoginProcessor {
         return bindAddress;
     }
 
-    protected void setupHadoopConfiguration(Configuration hadoopConfig, PropertiesConfiguration configuration) {
+    protected void setupHadoopConfiguration(Configuration hadoopConfig, org.apache.commons.configuration.Configuration
+            configuration) {
         String authMethod;
         authMethod = configuration != null ? configuration.getString(AUTHENTICATION_METHOD) : null;
         // getString may return null, and would like to log the nature of the default setting
@@ -135,12 +131,13 @@ public class LoginProcessor {
      * @return the metadata configuration.
      * @throws ConfigurationException
      */
-    protected PropertiesConfiguration getPropertiesConfiguration() throws ConfigurationException {
+    protected org.apache.commons.configuration.Configuration getApplicationConfiguration() {
         try {
-            return PropertiesUtil.getApplicationProperties();
+            return ApplicationProperties.get();
         } catch (AtlasException e) {
-            throw new ConfigurationException(e);
+            LOG.warn("Error reading application configuration", e);
         }
+        return null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java b/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
index 16591d8..80df87d 100755
--- a/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
+++ b/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
@@ -23,9 +23,8 @@ import org.apache.commons.configuration.PropertiesConfiguration;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
-import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.webapp.WebAppClassLoader;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.webapp.WebAppContext;
 
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9d303743/webapp/src/test/java/org/apache/atlas/web/listeners/LoginProcessorIT.java
----------------------------------------------------------------------
diff --git a/webapp/src/test/java/org/apache/atlas/web/listeners/LoginProcessorIT.java b/webapp/src/test/java/org/apache/atlas/web/listeners/LoginProcessorIT.java
index 2148fe2..42692cd 100644
--- a/webapp/src/test/java/org/apache/atlas/web/listeners/LoginProcessorIT.java
+++ b/webapp/src/test/java/org/apache/atlas/web/listeners/LoginProcessorIT.java
@@ -38,7 +38,7 @@ public class LoginProcessorIT extends BaseSecurityTest {
     public void testDefaultSimpleLogin() throws Exception {
         LoginProcessor processor = new LoginProcessor() {
             @Override
-            protected PropertiesConfiguration getPropertiesConfiguration() throws ConfigurationException {
+            protected org.apache.commons.configuration.Configuration getApplicationConfiguration() {
                 return new PropertiesConfiguration();
             }
         };
@@ -55,7 +55,7 @@ public class LoginProcessorIT extends BaseSecurityTest {
 
         LoginProcessor processor = new LoginProcessor() {
             @Override
-            protected PropertiesConfiguration getPropertiesConfiguration() throws ConfigurationException {
+            protected org.apache.commons.configuration.Configuration getApplicationConfiguration() {
                 PropertiesConfiguration config = new PropertiesConfiguration();
                 config.setProperty("atlas.authentication.method", "kerberos");
                 config.setProperty("atlas.authentication.principal", "dgi@EXAMPLE.COM");