You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/09/01 17:16:32 UTC

[09/28] incubator-brooklyn git commit: Switch to new Brooklyn package names.

Switch to new Brooklyn package names.

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

Branch: refs/heads/master
Commit: c87c0ea6ccd9089cc138ebdc922ee642216b7d5d
Parents: 7474be1
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Tue Aug 25 11:57:16 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Tue Aug 25 11:58:54 2015 +0100

----------------------------------------------------------------------
 .../AbstractExternalConfigSupplier.java         |  45 -------
 .../config/external/ExternalConfigSupplier.java |  34 ------
 .../external/InPlaceExternalConfigSupplier.java |  51 --------
 .../PropertiesFileExternalConfigSupplier.java   |  68 -----------
 .../BasicExternalConfigSupplierRegistry.java    | 120 -------------------
 .../ExternalConfigSupplierRegistry.java         |  45 -------
 .../AbstractExternalConfigSupplier.java         |  45 +++++++
 .../config/external/ExternalConfigSupplier.java |  34 ++++++
 .../external/InPlaceExternalConfigSupplier.java |  51 ++++++++
 .../PropertiesFileExternalConfigSupplier.java   |  68 +++++++++++
 .../BasicExternalConfigSupplierRegistry.java    | 119 ++++++++++++++++++
 .../ExternalConfigSupplierRegistry.java         |  45 +++++++
 .../spi/dsl/methods/BrooklynDslCommon.java      |  29 +----
 13 files changed, 366 insertions(+), 388 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/config/external/AbstractExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/external/AbstractExternalConfigSupplier.java b/core/src/main/java/brooklyn/config/external/AbstractExternalConfigSupplier.java
deleted file mode 100644
index 7f0cec0..0000000
--- a/core/src/main/java/brooklyn/config/external/AbstractExternalConfigSupplier.java
+++ /dev/null
@@ -1,45 +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
- *
- *     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 brooklyn.config.external;
-
-import brooklyn.management.ManagementContext;
-
-
-/**
- * Default superclass for all {@link ExternalConfigSupplier} implementations.
- */
-abstract public class AbstractExternalConfigSupplier implements ExternalConfigSupplier {
-
-    private final ManagementContext managementContext;
-    private final String name;
-
-    protected AbstractExternalConfigSupplier(ManagementContext managementContext, String name) {
-        this.managementContext = managementContext;
-        this.name = name;
-    }
-
-    public ManagementContext getManagementContext() {
-        return managementContext;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/config/external/ExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/external/ExternalConfigSupplier.java b/core/src/main/java/brooklyn/config/external/ExternalConfigSupplier.java
deleted file mode 100644
index 0df7917..0000000
--- a/core/src/main/java/brooklyn/config/external/ExternalConfigSupplier.java
+++ /dev/null
@@ -1,34 +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
- *
- *     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 brooklyn.config.external;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Provider of "externalised" entity configuration that is resolved at runtime.
- *
- * @since 0.8.0
- */
-@Beta
-public interface ExternalConfigSupplier {
-
-    String getName();
-    String get(String key);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/config/external/InPlaceExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/external/InPlaceExternalConfigSupplier.java b/core/src/main/java/brooklyn/config/external/InPlaceExternalConfigSupplier.java
deleted file mode 100644
index a5a3015..0000000
--- a/core/src/main/java/brooklyn/config/external/InPlaceExternalConfigSupplier.java
+++ /dev/null
@@ -1,51 +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
- *
- *     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 brooklyn.config.external;
-
-import java.util.Map;
-
-import brooklyn.management.ManagementContext;
-
-
-/**
- * Instances are populated via sub-keys specified directly in the <tt>brooklyn.properties</tt> file:
- *
- * <pre>
- * brooklyn.external.foo = brooklyn.management.config.external.InPlaceConfigSupplier
- * brooklyn.external.foo.key1 = value1
- * brooklyn.external.foo.key2 = value2
- * </pre>
- *
- * This will instantiate an <code>InPlaceExternalConfigSupplier</code> populated with values for <code>key1</code>
- * and <code>key2</code>. Note that the <code>brooklyn.external.&lt;name&gt;</code> prefix is stripped.
- */
-public class InPlaceExternalConfigSupplier extends AbstractExternalConfigSupplier {
-
-    private final Map<String, String> config;
-
-    public InPlaceExternalConfigSupplier(ManagementContext managementContext, String name, Map<String, String> config) {
-        super(managementContext, name);
-        this.config = config;
-    }
-
-    public String get(String key) {
-        return config.get(key);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/config/external/PropertiesFileExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/external/PropertiesFileExternalConfigSupplier.java b/core/src/main/java/brooklyn/config/external/PropertiesFileExternalConfigSupplier.java
deleted file mode 100644
index 66d72e3..0000000
--- a/core/src/main/java/brooklyn/config/external/PropertiesFileExternalConfigSupplier.java
+++ /dev/null
@@ -1,68 +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
- *
- *     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 brooklyn.config.external;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Map;
-import java.util.Properties;
-
-import brooklyn.management.ManagementContext;
-import brooklyn.util.stream.Streams;
-
-
-/**
- * Instances are populated from a plain java properties file named in the passed <code>config</code> map
- * under the <code>propertiesUrl</code> key:
- *
- * <pre>
- * brooklyn.external.foo = brooklyn.management.config.external.PropertiesFileExternalConfigSupplier
- * brooklyn.external.foo.propertiesUrl = http://brooklyn.example.com/config/foo.properties
- * </pre>
- */
-public class PropertiesFileExternalConfigSupplier extends AbstractExternalConfigSupplier {
-
-    public static final String PROPERTIES_URL = "propertiesUrl";
-
-    private final Properties properties;
-
-    public PropertiesFileExternalConfigSupplier(ManagementContext managementContext, String name, Map<String, String> config) throws IOException {
-        super(managementContext, name);
-        this.properties = loadProperties(config.get(PROPERTIES_URL));
-    }
-
-    public String get(String key) {
-        return properties.getProperty(key);
-    }
-
-    private static Properties loadProperties(String propertiesUrl) throws IOException {
-        InputStream is = null;
-        try {
-            is = new URL(propertiesUrl).openStream();
-            Properties p = new Properties();
-            p.load(is);
-            return p;
-
-        } finally {
-            Streams.closeQuietly(is);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java b/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
deleted file mode 100644
index 8d81d69..0000000
--- a/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
+++ /dev/null
@@ -1,120 +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
- *
- *     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 brooklyn.management.internal;
-
-import java.lang.reflect.Constructor;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.config.ConfigPredicates;
-import brooklyn.config.ConfigUtils;
-import brooklyn.config.external.ExternalConfigSupplier;
-import brooklyn.management.ManagementContext;
-import brooklyn.util.exceptions.Exceptions;
-
-import com.google.common.collect.Maps;
-
-/**
- * Simple registry implementation.
- *
- * Permits a number of {@link ExternalConfigSupplier} instances to be registered, each with a unique name, for future
- * (deferred) lookup of configuration values.
- */
-public class BasicExternalConfigSupplierRegistry implements ExternalConfigSupplierRegistry {
-
-    private static final Logger LOG = LoggerFactory.getLogger(BasicExternalConfigSupplierRegistry.class);
-
-    private final Map<String, ExternalConfigSupplier> providersByName = Maps.newLinkedHashMap();
-    private final Object providersMapMutex = new Object();
-
-    public BasicExternalConfigSupplierRegistry(ManagementContext mgmt) {
-        updateFromBrooklynProperties(mgmt);
-    }
-
-    @Override
-    public void addProvider(String name, ExternalConfigSupplier supplier) {
-        synchronized (providersMapMutex) {
-            if (providersByName.containsKey(name))
-                throw new IllegalArgumentException("Provider already registered with name '" + name + "'");
-            providersByName.put(name, supplier);
-        }
-        LOG.info("Added external config supplier named '" + name + "': " + supplier);
-    }
-
-    @Override
-    public void removeProvider(String name) {
-        synchronized (providersMapMutex) {
-            ExternalConfigSupplier supplier = providersByName.remove(name);
-            LOG.info("Removed external config supplier named '" + name + "': " + supplier);
-        }
-    }
-
-    @Override
-    public String getConfig(String providerName, String key) {
-        synchronized (providersMapMutex) {
-            ExternalConfigSupplier provider = providersByName.get(providerName);
-            if (provider == null)
-                throw new IllegalArgumentException("No provider found with name '" + providerName + "'");
-            return provider.get(key);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private void updateFromBrooklynProperties(ManagementContext mgmt) {
-        // form is:
-        //     brooklyn.external.<name> : fully.qualified.ClassName
-        //     brooklyn.external.<name>.<key> : <value>
-        //     brooklyn.external.<name>.<key> : <value>
-        //     brooklyn.external.<name>.<key> : <value>
-
-        String EXTERNAL_PROVIDER_PREFIX = "brooklyn.external.";
-        Map<String, Object> externalProviderProperties = mgmt.getConfig().submap(ConfigPredicates.startingWith(EXTERNAL_PROVIDER_PREFIX)).asMapWithStringKeys();
-        ClassLoader classloader = mgmt.getCatalogClassLoader();
-        List<Exception> exceptions = new LinkedList<Exception>();
-
-        for (String key : externalProviderProperties.keySet()) {
-            String strippedKey = key.substring(EXTERNAL_PROVIDER_PREFIX.length());
-            if (strippedKey.contains("."))
-                continue;
-
-            String name = strippedKey;
-            String providerClassname = (String) externalProviderProperties.get(key);
-            Map<String, Object> config = ConfigUtils.filterForPrefixAndStrip(externalProviderProperties, key + ".");
-
-            try {
-                Class<? extends ExternalConfigSupplier> providerClass = (Class<? extends ExternalConfigSupplier>) classloader.loadClass(providerClassname);
-                Constructor<? extends ExternalConfigSupplier> constructor = providerClass.getConstructor(ManagementContext.class, String.class, Map.class);
-                ExternalConfigSupplier configSupplier = constructor.newInstance(this, name, config);
-                addProvider(name, configSupplier);
-
-            } catch (Exception e) {
-                LOG.error("Failed to instantiate external config supplier named '" + name + "': " + e, e);
-                exceptions.add(e);
-            }
-        }
-
-        if (!exceptions.isEmpty())
-            Exceptions.propagate(exceptions);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/brooklyn/management/internal/ExternalConfigSupplierRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/ExternalConfigSupplierRegistry.java b/core/src/main/java/brooklyn/management/internal/ExternalConfigSupplierRegistry.java
deleted file mode 100644
index 66eb127..0000000
--- a/core/src/main/java/brooklyn/management/internal/ExternalConfigSupplierRegistry.java
+++ /dev/null
@@ -1,45 +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
- *
- *     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 brooklyn.management.internal;
-
-import com.google.common.annotations.Beta;
-
-import brooklyn.config.external.ExternalConfigSupplier;
-
-
-/**
- * Permits a number of {@link ExternalConfigSupplier} instances to be registered, each with a unique name, for future
- * (deferred) lookup of configuration values.
- *
- * @since 0.8.0
- */
-@Beta
-public interface ExternalConfigSupplierRegistry {
-
-    void addProvider(String name, ExternalConfigSupplier provider);
-    void removeProvider(String name);
-
-    /**
-     * Searches the named {@link ExternalConfigSupplier} for the config value associated with the specified key.
-     * Quietly returns <code>null</code> if no config exists for the specified key.
-     * Throws {@link IllegalArgumentException} if no {@link ExternalConfigSupplier} exists for the passed name.
-     */
-    public String getConfig(String providerName, String key);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/config/external/AbstractExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/external/AbstractExternalConfigSupplier.java b/core/src/main/java/org/apache/brooklyn/core/config/external/AbstractExternalConfigSupplier.java
new file mode 100644
index 0000000..18b25eb
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/external/AbstractExternalConfigSupplier.java
@@ -0,0 +1,45 @@
+/*
+ * 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.brooklyn.core.config.external;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+
+
+/**
+ * Default superclass for all {@link ExternalConfigSupplier} implementations.
+ */
+abstract public class AbstractExternalConfigSupplier implements ExternalConfigSupplier {
+
+    private final ManagementContext managementContext;
+    private final String name;
+
+    protected AbstractExternalConfigSupplier(ManagementContext managementContext, String name) {
+        this.managementContext = managementContext;
+        this.name = name;
+    }
+
+    public ManagementContext getManagementContext() {
+        return managementContext;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/config/external/ExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/external/ExternalConfigSupplier.java b/core/src/main/java/org/apache/brooklyn/core/config/external/ExternalConfigSupplier.java
new file mode 100644
index 0000000..c43f7ed
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/external/ExternalConfigSupplier.java
@@ -0,0 +1,34 @@
+/*
+ * 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.brooklyn.core.config.external;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Provider of "externalised" entity configuration that is resolved at runtime.
+ *
+ * @since 0.8.0
+ */
+@Beta
+public interface ExternalConfigSupplier {
+
+    String getName();
+    String get(String key);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/config/external/InPlaceExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/external/InPlaceExternalConfigSupplier.java b/core/src/main/java/org/apache/brooklyn/core/config/external/InPlaceExternalConfigSupplier.java
new file mode 100644
index 0000000..a5445e9
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/external/InPlaceExternalConfigSupplier.java
@@ -0,0 +1,51 @@
+/*
+ * 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.brooklyn.core.config.external;
+
+import java.util.Map;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+
+
+/**
+ * Instances are populated via sub-keys specified directly in the <tt>brooklyn.properties</tt> file:
+ *
+ * <pre>
+ * brooklyn.external.foo = brooklyn.management.config.external.InPlaceConfigSupplier
+ * brooklyn.external.foo.key1 = value1
+ * brooklyn.external.foo.key2 = value2
+ * </pre>
+ *
+ * This will instantiate an <code>InPlaceExternalConfigSupplier</code> populated with values for <code>key1</code>
+ * and <code>key2</code>. Note that the <code>brooklyn.external.&lt;name&gt;</code> prefix is stripped.
+ */
+public class InPlaceExternalConfigSupplier extends AbstractExternalConfigSupplier {
+
+    private final Map<String, String> config;
+
+    public InPlaceExternalConfigSupplier(ManagementContext managementContext, String name, Map<String, String> config) {
+        super(managementContext, name);
+        this.config = config;
+    }
+
+    public String get(String key) {
+        return config.get(key);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/config/external/PropertiesFileExternalConfigSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/external/PropertiesFileExternalConfigSupplier.java b/core/src/main/java/org/apache/brooklyn/core/config/external/PropertiesFileExternalConfigSupplier.java
new file mode 100644
index 0000000..f76cdf6
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/external/PropertiesFileExternalConfigSupplier.java
@@ -0,0 +1,68 @@
+/*
+ * 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.brooklyn.core.config.external;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.util.stream.Streams;
+
+
+/**
+ * Instances are populated from a plain java properties file named in the passed <code>config</code> map
+ * under the <code>propertiesUrl</code> key:
+ *
+ * <pre>
+ * brooklyn.external.foo = brooklyn.management.config.external.PropertiesFileExternalConfigSupplier
+ * brooklyn.external.foo.propertiesUrl = http://brooklyn.example.com/config/foo.properties
+ * </pre>
+ */
+public class PropertiesFileExternalConfigSupplier extends AbstractExternalConfigSupplier {
+
+    public static final String PROPERTIES_URL = "propertiesUrl";
+
+    private final Properties properties;
+
+    public PropertiesFileExternalConfigSupplier(ManagementContext managementContext, String name, Map<String, String> config) throws IOException {
+        super(managementContext, name);
+        this.properties = loadProperties(config.get(PROPERTIES_URL));
+    }
+
+    public String get(String key) {
+        return properties.getProperty(key);
+    }
+
+    private static Properties loadProperties(String propertiesUrl) throws IOException {
+        InputStream is = null;
+        try {
+            is = new URL(propertiesUrl).openStream();
+            Properties p = new Properties();
+            p.load(is);
+            return p;
+
+        } finally {
+            Streams.closeQuietly(is);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java
new file mode 100644
index 0000000..deebd93
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java
@@ -0,0 +1,119 @@
+/*
+ * 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.brooklyn.core.mgmt.internal;
+
+import java.lang.reflect.Constructor;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.config.ConfigPredicates;
+import org.apache.brooklyn.core.config.ConfigUtils;
+import org.apache.brooklyn.core.config.external.ExternalConfigSupplier;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Maps;
+
+/**
+ * Simple registry implementation.
+ *
+ * Permits a number of {@link ExternalConfigSupplier} instances to be registered, each with a unique name, for future
+ * (deferred) lookup of configuration values.
+ */
+public class BasicExternalConfigSupplierRegistry implements ExternalConfigSupplierRegistry {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BasicExternalConfigSupplierRegistry.class);
+
+    private final Map<String, ExternalConfigSupplier> providersByName = Maps.newLinkedHashMap();
+    private final Object providersMapMutex = new Object();
+
+    public BasicExternalConfigSupplierRegistry(ManagementContext mgmt) {
+        updateFromBrooklynProperties(mgmt);
+    }
+
+    @Override
+    public void addProvider(String name, ExternalConfigSupplier supplier) {
+        synchronized (providersMapMutex) {
+            if (providersByName.containsKey(name))
+                throw new IllegalArgumentException("Provider already registered with name '" + name + "'");
+            providersByName.put(name, supplier);
+        }
+        LOG.info("Added external config supplier named '" + name + "': " + supplier);
+    }
+
+    @Override
+    public void removeProvider(String name) {
+        synchronized (providersMapMutex) {
+            ExternalConfigSupplier supplier = providersByName.remove(name);
+            LOG.info("Removed external config supplier named '" + name + "': " + supplier);
+        }
+    }
+
+    @Override
+    public String getConfig(String providerName, String key) {
+        synchronized (providersMapMutex) {
+            ExternalConfigSupplier provider = providersByName.get(providerName);
+            if (provider == null)
+                throw new IllegalArgumentException("No provider found with name '" + providerName + "'");
+            return provider.get(key);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void updateFromBrooklynProperties(ManagementContext mgmt) {
+        // form is:
+        //     brooklyn.external.<name> : fully.qualified.ClassName
+        //     brooklyn.external.<name>.<key> : <value>
+        //     brooklyn.external.<name>.<key> : <value>
+        //     brooklyn.external.<name>.<key> : <value>
+
+        String EXTERNAL_PROVIDER_PREFIX = "brooklyn.external.";
+        Map<String, Object> externalProviderProperties = mgmt.getConfig().submap(ConfigPredicates.startingWith(EXTERNAL_PROVIDER_PREFIX)).asMapWithStringKeys();
+        ClassLoader classloader = mgmt.getCatalogClassLoader();
+        List<Exception> exceptions = new LinkedList<Exception>();
+
+        for (String key : externalProviderProperties.keySet()) {
+            String strippedKey = key.substring(EXTERNAL_PROVIDER_PREFIX.length());
+            if (strippedKey.contains("."))
+                continue;
+
+            String name = strippedKey;
+            String providerClassname = (String) externalProviderProperties.get(key);
+            Map<String, Object> config = ConfigUtils.filterForPrefixAndStrip(externalProviderProperties, key + ".");
+
+            try {
+                Class<? extends ExternalConfigSupplier> providerClass = (Class<? extends ExternalConfigSupplier>) classloader.loadClass(providerClassname);
+                Constructor<? extends ExternalConfigSupplier> constructor = providerClass.getConstructor(ManagementContext.class, String.class, Map.class);
+                ExternalConfigSupplier configSupplier = constructor.newInstance(this, name, config);
+                addProvider(name, configSupplier);
+
+            } catch (Exception e) {
+                LOG.error("Failed to instantiate external config supplier named '" + name + "': " + e, e);
+                exceptions.add(e);
+            }
+        }
+
+        if (!exceptions.isEmpty())
+            Exceptions.propagate(exceptions);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ExternalConfigSupplierRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ExternalConfigSupplierRegistry.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ExternalConfigSupplierRegistry.java
new file mode 100644
index 0000000..81f0ee3
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ExternalConfigSupplierRegistry.java
@@ -0,0 +1,45 @@
+/*
+ * 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.brooklyn.core.mgmt.internal;
+
+import org.apache.brooklyn.core.config.external.ExternalConfigSupplier;
+
+import com.google.common.annotations.Beta;
+
+
+/**
+ * Permits a number of {@link ExternalConfigSupplier} instances to be registered, each with a unique name, for future
+ * (deferred) lookup of configuration values.
+ *
+ * @since 0.8.0
+ */
+@Beta
+public interface ExternalConfigSupplierRegistry {
+
+    void addProvider(String name, ExternalConfigSupplier provider);
+    void removeProvider(String name);
+
+    /**
+     * Searches the named {@link ExternalConfigSupplier} for the config value associated with the specified key.
+     * Quietly returns <code>null</code> if no config exists for the specified key.
+     * Throws {@link IllegalArgumentException} if no {@link ExternalConfigSupplier} exists for the passed name.
+     */
+    public String getConfig(String providerName, String key);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c87c0ea6/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
index 67c31f3..8f1483c 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
@@ -36,6 +36,8 @@ import org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslDeferredSupplier;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.DslUtils;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent.Scope;
 import org.apache.brooklyn.core.entity.EntityDynamicType;
+import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.sensor.DependentConfiguration;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -43,36 +45,13 @@ import org.apache.brooklyn.util.core.flags.ClassCoercionException;
 import org.apache.brooklyn.util.core.flags.FlagUtils;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.core.task.DeferredSupplier;
+import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.javalang.Reflections;
-import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
+import org.apache.brooklyn.util.text.Strings;
 import org.apache.commons.beanutils.BeanUtils;
 
-import brooklyn.config.external.ExternalConfigSupplier;
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.EntityDynamicType;
-import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.trait.Configurable;
-import brooklyn.event.Sensor;
-import brooklyn.event.basic.DependentConfiguration;
-import brooklyn.management.Task;
-import brooklyn.management.TaskAdaptable;
-import brooklyn.management.TaskFactory;
-import brooklyn.management.internal.ExternalConfigSupplierRegistry;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.util.collections.MutableMap;
-import brooklyn.util.config.ConfigBag;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.flags.ClassCoercionException;
-import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.flags.TypeCoercions;
-import brooklyn.util.javalang.Reflections;
-import brooklyn.util.task.DeferredSupplier;
-import brooklyn.util.text.StringEscapes.JavaStringEscapes;
-import brooklyn.util.text.Strings;
-import brooklyn.util.task.Tasks;
-
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;