You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ge...@apache.org on 2017/07/13 10:01:21 UTC

[2/6] brooklyn-server git commit: Support configKey.deprecatedNames

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsDeprecationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsDeprecationTest.java b/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsDeprecationTest.java
new file mode 100644
index 0000000..6103c86
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsDeprecationTest.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.brooklyn.core.config;
+
+import static org.testng.Assert.assertEquals;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.entity.ImplementedBy;
+import org.apache.brooklyn.core.entity.AbstractEntity;
+import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class MapConfigKeyAndFriendsDeprecationTest extends BrooklynAppUnitTestSupport {
+
+    @Test
+    public void testUsingDeprecatedName() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(MyEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey", "myval")));
+        assertEquals(entity.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval"));
+    }
+
+    @Test
+    public void testUsingDeprecatedNameSubkey() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(MyEntity.class)
+                .configure("confMapDeepMerge.mykey", "myval"));
+        assertEquals(entity.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval"));
+    }
+
+    @Test
+    public void testPrefersNonDeprecatedName() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(MyEntity.class)
+                .configure("confMapDeepMerge", ImmutableMap.of("mykey", "myval"))
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("wrongkey", "wrongval")));
+        assertEquals(entity.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval"));
+    }
+    
+    @Test
+    public void testInheritsDeprecatedKeyFromRuntimeParent() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(TestEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey", "myval"))
+                .configure("oldConfMapNotReinherited", ImmutableMap.of("mykey", "myval")));
+        EntityInternal child = entity.addChild(EntitySpec.create(MyEntity.class));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval"));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_NOT_REINHERITED), ImmutableMap.of("mykey", "myval"));
+    }
+
+    @Test
+    public void testMergesDeprecatedKeyFromRuntimeParent() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(TestEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey", "myval")));
+        EntityInternal child = entity.addChild(EntitySpec.create(MyEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey2", "myval2")));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval", "mykey2", "myval2"));
+    }
+
+    @Test
+    public void testMergesDeprecatedKeyFromRuntimeParentWithOwn() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(TestEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey", "myval")));
+        EntityInternal child = entity.addChild(EntitySpec.create(MyEntity.class)
+                .configure("confMapDeepMerge", ImmutableMap.of("mykey2", "myval2")));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval", "mykey2", "myval2"));
+    }
+
+    @Test
+    public void testMergesKeyFromRuntimeParentWithOwnDeprecated() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(TestEntity.class)
+                .configure("confMapDeepMerge", ImmutableMap.of("mykey", "myval")));
+        EntityInternal child = entity.addChild(EntitySpec.create(MyEntity.class)
+                .configure("oldConfMapDeepMerge", ImmutableMap.of("mykey2", "myval2")));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_DEEP_MERGE), ImmutableMap.of("mykey", "myval", "mykey2", "myval2"));
+    }
+    
+    @Test
+    public void testDeprecatedKeyNotReinheritedIfNotSupposedToBe() throws Exception {
+        EntityInternal entity = app.addChild(EntitySpec.create(MyEntity.class)
+                .configure("oldConfMapNotReinherited", ImmutableMap.of("mykey", "myval")));
+        EntityInternal child = entity.addChild(EntitySpec.create(MyEntity.class));
+        assertEquals(entity.config().get(MyEntity.CONF_MAP_NOT_REINHERITED), ImmutableMap.of("mykey", "myval"));
+        assertEquals(child.config().get(MyEntity.CONF_MAP_NOT_REINHERITED), null);
+    }
+    
+    @ImplementedBy(MyEntityImpl.class)
+    public interface MyEntity extends EntityInternal {
+        MapConfigKey<String> CONF_MAP_DEEP_MERGE = new MapConfigKey.Builder<String>(String.class, "confMapDeepMerge")
+                .deprecatedNames("oldConfMapDeepMerge")
+                .runtimeInheritance(BasicConfigInheritance.DEEP_MERGE)
+                .build();
+        
+        MapConfigKey<Object> CONF_MAP_NOT_REINHERITED = new MapConfigKey.Builder<Object>(Object.class, "confMapNotReinherited")
+                .deprecatedNames("oldConfMapNotReinherited")
+                .runtimeInheritance(BasicConfigInheritance.NOT_REINHERITED)
+                .build();
+        
+        // FIXME Need to support deprecatedNames for ListConfigKey and SetConfigKey?
+        ListConfigKey<String> CONF_LIST_THING = new ListConfigKey<String>(String.class, "test.confListThing", "Configuration key that's a list thing");
+        ListConfigKey<Object> CONF_LIST_OBJ_THING = new ListConfigKey<Object>(Object.class, "test.confListObjThing", "Configuration key that's a list thing, of objects");
+        SetConfigKey<String> CONF_SET_THING = new SetConfigKey<String>(String.class, "test.confSetThing", "Configuration key that's a set thing");
+        SetConfigKey<Object> CONF_SET_OBJ_THING = new SetConfigKey<Object>(Object.class, "test.confSetObjThing", "Configuration key that's a set thing, of objects");
+    }
+    
+    public static class MyEntityImpl extends AbstractEntity implements MyEntity {
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigUtilsInternalTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigUtilsInternalTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigUtilsInternalTest.java
new file mode 100644
index 0000000..44d3ffb
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigUtilsInternalTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.entity.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.Map;
+
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public class ConfigUtilsInternalTest extends BrooklynAppUnitTestSupport {
+
+    final ConfigKey<String> key1 = ConfigKeys.builder(String.class, "key1")
+            .deprecatedNames("oldKey1", "oldKey1b")
+            .build();
+
+    @Test
+    public void testSetConfig() throws Exception {
+        Map<?,?> remaining = ConfigUtilsInternal.setAllConfigKeys(ImmutableMap.of("key1", "myval"), ImmutableList.of(key1), app);
+        assertEquals(app.config().get(key1), "myval");
+        assertEquals(remaining, ImmutableMap.of());
+    }
+    
+    @Test
+    public void testSetConfigUsingDeprecatedValue() throws Exception {
+        Map<?,?> remaining = ConfigUtilsInternal.setAllConfigKeys(ImmutableMap.of("oldKey1", "myval"), ImmutableList.of(key1), app);
+        assertEquals(app.config().get(key1), "myval");
+        assertEquals(remaining, ImmutableMap.of());
+    }
+    
+    @Test
+    public void testSetConfigPrefersNonDeprecated() throws Exception {
+        Map<?,?> remaining = ConfigUtilsInternal.setAllConfigKeys(
+                ImmutableMap.of("key1", "myval", "oldKey1", "myOldVal1", "oldKey1b", "myOldVal1b"), 
+                ImmutableList.of(key1), 
+                app);
+        assertEquals(app.config().get(key1), "myval");
+        
+        // Should remove deprecated value as well (and warn about it)
+        assertEquals(remaining, ImmutableMap.of());
+    }
+    
+    @Test
+    public void testReturnsUnmatched() throws Exception {
+        Map<?,?> remaining = ConfigUtilsInternal.setAllConfigKeys(ImmutableMap.of("wrong", "myval"), ImmutableList.of(key1), app);
+        assertEquals(app.config().get(key1), null);
+        assertEquals(remaining, ImmutableMap.of("wrong", "myval"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricher-j8rvs5fc16
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricher-j8rvs5fc16 b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricher-j8rvs5fc16
new file mode 100644
index 0000000..9b15e24
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricher-j8rvs5fc16
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<enricher>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyEnricher</type>
+  <id>j8rvs5fc16</id>
+  <displayName>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest.MyEnricher</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <oldKey1>myval1</oldKey1>
+    <field1>myval2</field1>
+    <uniqueTag>
+      <null/>
+    </uniqueTag>
+    <tags>
+      <set/>
+    </tags>
+  </config>
+</enricher>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricherOwner-sb5w8w5tq0
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricherOwner-sb5w8w5tq0 b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricherOwner-sb5w8w5tq0
new file mode 100644
index 0000000..6abc5fc
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-enricherOwner-sb5w8w5tq0
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>sb5w8w5tq0</id>
+  <displayName>MyApp:sb5w</displayName>
+  <searchPath class="ImmutableList"/>
+  <attributes>
+    <entity.id>sb5w8w5tq0</entity.id>
+    <application.id>sb5w8w5tq0</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+  <enrichers>
+    <string>j8rvs5fc16</string>
+  </enrichers>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feed-km6gu420a0
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feed-km6gu420a0 b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feed-km6gu420a0
new file mode 100644
index 0000000..1d7f108
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feed-km6gu420a0
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+
+<feed>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyFeed</type>
+  <id>km6gu420a0</id>
+  <displayName>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest.MyFeed</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <oldKey1>myval1</oldKey1>
+    <oldKey2>myval2</oldKey2>
+  </config>
+</feed>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feedOwner-d8p4p8o4x7
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feedOwner-d8p4p8o4x7 b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feedOwner-d8p4p8o4x7
new file mode 100644
index 0000000..b2aacbf
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-feedOwner-d8p4p8o4x7
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>d8p4p8o4x7</id>
+  <displayName>MyApp:d8p4</displayName>
+  <searchPath class="ImmutableList"/>
+  <attributes>
+    <entity.id>d8p4p8o4x7</entity.id>
+    <application.id>d8p4p8o4x7</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+  <feeds>
+    <string>km6gu420a0</string>
+  </feeds>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-e86eode5yy
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-e86eode5yy b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-e86eode5yy
new file mode 100644
index 0000000..ebeea74
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-e86eode5yy
@@ -0,0 +1,48 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>e86eode5yy</id>
+  <displayName>MyApp:e86e</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <field1>myval</field1>
+  </config>
+  <attributes>
+    <entity.id>e86eode5yy</entity.id>
+    <application.id>e86eode5yy</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+  <configKeys>
+    <field1>
+      <configKey>
+        <name>field1</name>
+        <deprecatedNames class="ImmutableList" reference="../../../../searchPath"/>
+        <type>java.lang.Object</type>
+        <description>field1</description>
+        <reconfigurable>false</reconfigurable>
+        <constraint class="com.google.common.base.Predicates$ObjectPredicate">ALWAYS_TRUE</constraint>
+      </configKey>
+    </field1>
+  </configKeys>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-location-f4kj5hxcvx
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-location-f4kj5hxcvx b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-location-f4kj5hxcvx
new file mode 100644
index 0000000..8e100a0
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-location-f4kj5hxcvx
@@ -0,0 +1,35 @@
+<!--
+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.
+-->
+
+<location>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyLocation</type>
+  <id>f4kj5hxcvx</id>
+  <displayName>MyLocation:f4kj</displayName>
+  <searchPath class="ImmutableList"/>
+  <locationConfig>
+    <field1>myval</field1>
+    <tags>
+      <set/>
+    </tags>
+  </locationConfig>
+  <locationConfigUnused>
+    <string>field1</string>
+  </locationConfigUnused>
+</location>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policy-alq7mtwv0m
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policy-alq7mtwv0m b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policy-alq7mtwv0m
new file mode 100644
index 0000000..15980df
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policy-alq7mtwv0m
@@ -0,0 +1,35 @@
+<!--
+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.
+-->
+
+<policy>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyPolicy</type>
+  <id>alq7mtwv0m</id>
+  <displayName>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest.MyPolicy</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <field1>myval</field1>
+    <uniqueTag>
+      <null/>
+    </uniqueTag>
+    <tags>
+      <set/>
+    </tags>
+  </config>
+</policy>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policyOwner-vfncjpljqf
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policyOwner-vfncjpljqf b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policyOwner-vfncjpljqf
new file mode 100644
index 0000000..8bb47ad
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnField-policyOwner-vfncjpljqf
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>vfncjpljqf</id>
+  <displayName>MyApp:vfnc</displayName>
+  <searchPath class="ImmutableList"/>
+  <attributes>
+    <entity.id>vfncjpljqf</entity.id>
+    <application.id>vfncjpljqf</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+  <policies>
+    <string>alq7mtwv0m</string>
+  </policies>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnKey-ug77ek2tkd
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnKey-ug77ek2tkd b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnKey-ug77ek2tkd
new file mode 100644
index 0000000..561c81e
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-flagNameOnKey-ug77ek2tkd
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>ug77ek2tkd</id>
+  <displayName>MyApp:ug77</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <key2>myval</key2>
+  </config>
+  <attributes>
+    <entity.id>ug77ek2tkd</entity.id>
+    <application.id>ug77ek2tkd</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-dyozzd948m
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-dyozzd948m b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-dyozzd948m
new file mode 100644
index 0000000..992d48e
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-dyozzd948m
@@ -0,0 +1,48 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>dyozzd948m</id>
+  <displayName>MyApp:dyoz</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <oldKey1>myval</oldKey1>
+  </config>
+  <attributes>
+    <entity.id>dyozzd948m</entity.id>
+    <application.id>dyozzd948m</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+  <configKeys>
+    <oldKey1>
+      <configKey>
+        <name>oldKey1</name>
+        <deprecatedNames class="ImmutableList" reference="../../../../searchPath"/>
+        <type>java.lang.Object</type>
+        <description>oldKey1</description>
+        <reconfigurable>false</reconfigurable>
+        <constraint class="com.google.common.base.Predicates$ObjectPredicate">ALWAYS_TRUE</constraint>
+      </configKey>
+    </oldKey1>
+  </configKeys>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-pps2ttgijb
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-pps2ttgijb b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-pps2ttgijb
new file mode 100644
index 0000000..541e79a
--- /dev/null
+++ b/core/src/test/resources/org/apache/brooklyn/core/config/config-deprecated-key-pps2ttgijb
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<entity>
+  <brooklynVersion>0.12.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.core.config.ConfigKeyDeprecationRebindTest$MyAppImpl</type>
+  <id>pps2ttgijb</id>
+  <displayName>MyApp:pps2</displayName>
+  <searchPath class="ImmutableList"/>
+  <config>
+    <oldKey1>myval</oldKey1>
+  </config>
+  <attributes>
+    <entity.id>pps2ttgijb</entity.id>
+    <application.id>pps2ttgijb</application.id>
+    <catalog.id>
+      <null/>
+    </catalog.id>
+  </attributes>
+</entity>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/02b71ffb/utils/common/src/main/java/org/apache/brooklyn/config/ConfigKey.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/config/ConfigKey.java b/utils/common/src/main/java/org/apache/brooklyn/config/ConfigKey.java
index a494c0b..d5cc8f4 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/config/ConfigKey.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/config/ConfigKey.java
@@ -47,8 +47,17 @@ public interface ConfigKey<T> {
     String getName();
 
     /**
+     * Returns deprecated names that will could also be used, but that are discouraged and will
+     * likely not be supported for the given config key in future versions.
+     */
+    Collection<String> getDeprecatedNames();
+
+    /**
      * Returns the constituent parts of the configuration parameter name as a {@link Collection}.
+     * 
+     * @deprecated since 0.12.0; use {@link #getName()}
      */
+    @Deprecated
     Collection<String> getNameParts();
 
     /**