You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/10/07 11:31:37 UTC

[07/13] incubator-brooklyn git commit: Use entity.sensors().* etc, instead of deprecated methods

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
index 0741170..2f17540 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
@@ -66,7 +66,7 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
         
         group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)
                 .configure("childrenAsMembers", true));
-        policy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+        policy = app.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
                 .configure("group", group));
 
         app.start(ImmutableList.of(loc));
@@ -93,7 +93,7 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     public void testNotifiedOfMemberChanged() throws Exception {
         TestEntity e1 = createAndManageChildOf(group);
 
-        e1.setAttribute(Startable.SERVICE_UP, true);
+        e1.sensors().set(Startable.SERVICE_UP, true);
 
         assertRecordsEventually(Record.newAdded(e1), Record.newChanged(e1));
     }
@@ -138,13 +138,13 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     public void testNotifiedOfExtraTrackedSensors() throws Exception {
         TestEntity e1 = createAndManageChildOf(group);
 
-        app.removeAllPolicies();
-        RecordingMembershipTrackingPolicy policy2 = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+        app.policies().removeAllPolicies();
+        RecordingMembershipTrackingPolicy policy2 = app.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
                 .configure("group", group)
                 .configure("sensorsToTrack", ImmutableSet.of(TestEntity.NAME)));
 
 
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
 
         assertRecordsEventually(policy2, Record.newAdded(e1), Record.newChanged(e1));
     }
@@ -152,11 +152,11 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testDeprecatedSetGroupWorks() throws Exception {
         RecordingMembershipTrackingPolicy policy2 = new RecordingMembershipTrackingPolicy(MutableMap.of("sensorsToTrack", ImmutableSet.of(TestEntity.NAME)));
-        group.addPolicy(policy2);
+        group.policies().add(policy2);
         policy2.setGroup(group);
 
         TestEntity e1 = createAndManageChildOf(group);
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
 
         assertRecordsEventually(policy2, Record.newAdded(e1), Record.newChanged(e1));
     }
@@ -165,19 +165,19 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     public void testNotNotifiedOfExtraTrackedSensorsIfNonDuplicate() throws Exception {
         TestEntity e1 = createAndManageChildOf(group);
         
-        app.removeAllPolicies();
-        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+        app.policies().removeAllPolicies();
+        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
                 .configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(TestEntity.NAME))
                 .configure(AbstractMembershipTrackingPolicy.NOTIFY_ON_DUPLICATES, false)
                 .configure(AbstractMembershipTrackingPolicy.GROUP, group));
 
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsContinually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "mynewname");
+        e1.sensors().set(TestEntity.NAME, "mynewname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1));
     }
 
@@ -186,18 +186,18 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     public void testDefaultNotNotifiedOfExtraTrackedSensorsIfDuplicate() throws Exception {
         TestEntity e1 = createAndManageChildOf(group);
 
-        app.removeAllPolicies();
-        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+        app.policies().removeAllPolicies();
+        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
                 .configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(TestEntity.NAME))
                 .configure(AbstractMembershipTrackingPolicy.GROUP, group));
 
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsContinually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "mynewname");
+        e1.sensors().set(TestEntity.NAME, "mynewname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1));
     }
 
@@ -205,19 +205,19 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
     public void testNotifiedOfExtraTrackedSensorsIfDuplicate() throws Exception {
         TestEntity e1 = createAndManageChildOf(group);
 
-        app.removeAllPolicies();
-        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.addPolicy(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+        app.policies().removeAllPolicies();
+        RecordingMembershipTrackingPolicy nonDuplicateTrackingPolicy = app.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
                 .configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(TestEntity.NAME))
                 .configure(AbstractMembershipTrackingPolicy.NOTIFY_ON_DUPLICATES, true)
                 .configure(AbstractMembershipTrackingPolicy.GROUP, group));
 
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "myname");
+        e1.sensors().set(TestEntity.NAME, "myname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1));
         
-        e1.setAttribute(TestEntity.NAME, "mynewname");
+        e1.sensors().set(TestEntity.NAME, "mynewname");
         assertRecordsEventually(nonDuplicateTrackingPolicy, Record.newAdded(e1), Record.newChanged(e1), Record.newChanged(e1), Record.newChanged(e1));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/feed/function/FunctionFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/feed/function/FunctionFeedTest.java b/core/src/test/java/org/apache/brooklyn/feed/function/FunctionFeedTest.java
index c362e4e6..d2e82aa 100644
--- a/core/src/test/java/org/apache/brooklyn/feed/function/FunctionFeedTest.java
+++ b/core/src/test/java/org/apache/brooklyn/feed/function/FunctionFeedTest.java
@@ -210,11 +210,11 @@ public class FunctionFeedTest extends BrooklynAppUnitTestSupport {
         final List<Integer> ints = new CopyOnWriteArrayList<Integer>();
         final List<String> strings = new CopyOnWriteArrayList<String>();
         
-        entity.subscribe(entity, SENSOR_INT, new SensorEventListener<Integer>() {
+        entity.subscriptions().subscribe(entity, SENSOR_INT, new SensorEventListener<Integer>() {
                 @Override public void onEvent(SensorEvent<Integer> event) {
                     ints.add(event.getValue());
                 }});
-        entity.subscribe(entity, SENSOR_STRING, new SensorEventListener<String>() {
+        entity.subscriptions().subscribe(entity, SENSOR_STRING, new SensorEventListener<String>() {
                 @Override public void onEvent(SensorEvent<String> event) {
                     strings.add(event.getValue());
                 }});

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/feed/http/HttpFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/feed/http/HttpFeedTest.java b/core/src/test/java/org/apache/brooklyn/feed/http/HttpFeedTest.java
index d8ac492..3ba426e 100644
--- a/core/src/test/java/org/apache/brooklyn/feed/http/HttpFeedTest.java
+++ b/core/src/test/java/org/apache/brooklyn/feed/http/HttpFeedTest.java
@@ -367,9 +367,9 @@ public class HttpFeedTest extends BrooklynAppUnitTestSupport {
                 .poll(HttpPollConfig.forMultiple()
                     .onSuccess(new Function<HttpToolResponse,Void>() {
                         public Void apply(HttpToolResponse response) {
-                            entity.setAttribute(SENSOR_INT, response.getResponseCode());
+                            entity.sensors().set(SENSOR_INT, response.getResponseCode());
                             if (response.getResponseCode()==200)
-                                entity.setAttribute(SENSOR_STRING, response.getContentAsString());
+                                entity.sensors().set(SENSOR_STRING, response.getContentAsString());
                             return null;
                         }
                     })

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/feed/ssh/SshFeedIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/feed/ssh/SshFeedIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/feed/ssh/SshFeedIntegrationTest.java
index fa8e2df..d926903 100644
--- a/core/src/test/java/org/apache/brooklyn/feed/ssh/SshFeedIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/feed/ssh/SshFeedIntegrationTest.java
@@ -206,7 +206,7 @@ public class SshFeedIntegrationTest extends BrooklynAppUnitTestSupport {
         Entities.manage(entity2);
         Time.sleep(Duration.seconds(2));
         Assert.assertEquals(entity2.getAttribute(SENSOR_STRING), null);
-        entity2.setAttribute(Attributes.SERVICE_UP, true);
+        entity2.sensors().set(Attributes.SERVICE_UP, true);
     
         EntityTestUtils.assertAttributeEventually(entity2, SENSOR_STRING, StringPredicates.containsLiteral("hello"));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeedLiveTest.java b/core/src/test/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
index 421fff4..9ef9ade 100644
--- a/core/src/test/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
+++ b/core/src/test/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
@@ -88,7 +88,7 @@ public class WindowsPerformanceCounterFeedLiveTest extends BrooklynAppLiveTestSu
     @Test(groups={"Live","Disabled"}, enabled=false)
     public void testRetrievesPerformanceCounters() throws Exception {
         // We can be pretty sure that a Windows instance in the cloud will have zero telephone lines...
-        entity.setAttribute(TELEPHONE_LINES, 42);
+        entity.sensors().set(TELEPHONE_LINES, 42);
         WindowsPerformanceCounterFeed feed = WindowsPerformanceCounterFeed.builder()
                 .entity(entity)
                 .addSensor("\\Processor(_total)\\% Idle Time", CPU_IDLE_TIME)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocationRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocationRebindTest.java b/core/src/test/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocationRebindTest.java
index b6a78bd..3a66266 100644
--- a/core/src/test/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocationRebindTest.java
+++ b/core/src/test/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocationRebindTest.java
@@ -103,7 +103,7 @@ public class FixedListMachineProvisioningLocationRebindTest {
     @Test
     public void testRebindPreservesInUseMachines() throws Exception {
         SshMachineLocation inuseMachine = origLoc.obtain();
-        origApp.setAttribute(TestApplication.SERVICE_UP, true); // to force persist, and thus avoid race
+        origApp.sensors().set(TestApplication.SERVICE_UP, true); // to force persist, and thus avoid race
         
         newApp = rebind();
         FixedListMachineProvisioningLocation<SshMachineLocation> newLoc = (FixedListMachineProvisioningLocation<SshMachineLocation>) Iterables.get(newApp.getLocations(), 0);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/util/core/task/TasksTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/TasksTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/TasksTest.java
index 4d1e6e1..af4bb93 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/task/TasksTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/TasksTest.java
@@ -72,13 +72,13 @@ public class TasksTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testResolvesAttributeWhenReady() throws Exception {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         assertResolvesValue(attributeWhenReady(app, TestApplication.MY_ATTRIBUTE), String.class, "myval");
     }
     
     @Test
     public void testResolvesMapWithAttributeWhenReady() throws Exception {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         Map<?,?> orig = ImmutableMap.of("mykey", attributeWhenReady(app, TestApplication.MY_ATTRIBUTE));
         Map<?,?> expected = ImmutableMap.of("mykey", "myval");
         assertResolvesValue(orig, String.class, expected);
@@ -86,7 +86,7 @@ public class TasksTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testResolvesSetWithAttributeWhenReady() throws Exception {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         Set<?> orig = ImmutableSet.of(attributeWhenReady(app, TestApplication.MY_ATTRIBUTE));
         Set<?> expected = ImmutableSet.of("myval");
         assertResolvesValue(orig, String.class, expected);
@@ -94,7 +94,7 @@ public class TasksTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testResolvesMapOfMapsWithAttributeWhenReady() throws Exception {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         Map<?,?> orig = ImmutableMap.of("mykey", ImmutableMap.of("mysubkey", attributeWhenReady(app, TestApplication.MY_ATTRIBUTE)));
         Map<?,?> expected = ImmutableMap.of("mykey", ImmutableMap.of("mysubkey", "myval"));
         assertResolvesValue(orig, String.class, expected);
@@ -103,7 +103,7 @@ public class TasksTest extends BrooklynAppUnitTestSupport {
     @SuppressWarnings("unchecked")
     @Test
     public void testResolvesIterableOfMapsWithAttributeWhenReady() throws Exception {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         // using Iterables.concat so that orig is of type FluentIterable rather than List etc
         Iterable<?> orig = Iterables.concat(ImmutableList.of(ImmutableMap.of("mykey", attributeWhenReady(app, TestApplication.MY_ATTRIBUTE))));
         Iterable<Map<?,?>> expected = ImmutableList.<Map<?,?>>of(ImmutableMap.of("mykey", "myval"));
@@ -117,7 +117,7 @@ public class TasksTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testErrorsResolvingPropagatesOrSwallowedAllCorrectly() throws Exception {
-        app.setConfig(TestEntity.CONF_OBJECT, ValueResolverTest.newThrowTask(Duration.ZERO));
+        app.config().set(TestEntity.CONF_OBJECT, ValueResolverTest.newThrowTask(Duration.ZERO));
         Task<Object> t = Tasks.builder().body(Functionals.callable(EntityFunctions.config(TestEntity.CONF_OBJECT), app)).build();
         ValueResolver<Object> v = Tasks.resolving(t).as(Object.class).context(app.getExecutionContext());
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/util/core/task/ssh/SshTasksTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/ssh/SshTasksTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/ssh/SshTasksTest.java
index cb0e50c..4b213a9 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/task/ssh/SshTasksTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/ssh/SshTasksTest.java
@@ -196,14 +196,14 @@ public class SshTasksTest {
 
     @Test(groups="Integration")
     public void testSshWithHeaderProperty() {
-        host.setConfig(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho foo\n");
+        host.config().set(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho foo\n");
         ProcessTaskWrapper<Integer> t = submit(SshTasks.newSshExecTaskFactory(host, "echo bar"));
         Assert.assertTrue(t.block().getStdout().trim().matches("foo\\s+bar"), "mismatched output was: "+t.getStdout());
     }
 
     @Test(groups="Integration")
     public void testSshIgnoringHeaderProperty() {
-        host.setConfig(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho foo\n");
+        host.config().set(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho foo\n");
         ProcessTaskWrapper<Integer> t = submit(SshTasks.newSshExecTaskFactory(host, false, "echo bar"));
         Assert.assertTrue(t.block().getStdout().trim().matches("bar"), "mismatched output was: "+t.getStdout());
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/util/core/text/TemplateProcessorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/text/TemplateProcessorTest.java b/core/src/test/java/org/apache/brooklyn/util/core/text/TemplateProcessorTest.java
index 52535da..b2fd6a7 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/text/TemplateProcessorTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/text/TemplateProcessorTest.java
@@ -146,7 +146,7 @@ public class TemplateProcessorTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testApplyTemplatedConfigWithAttributeWhenReady() {
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
 
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
                 .configure(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(app, TestApplication.MY_ATTRIBUTE)));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/CumulusRDFApplication.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/CumulusRDFApplication.java b/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/CumulusRDFApplication.java
index 4c0b87e..0e3780f 100644
--- a/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/CumulusRDFApplication.java
+++ b/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/CumulusRDFApplication.java
@@ -171,7 +171,7 @@ public class CumulusRDFApplication extends AbstractApplication {
         });
 
         // Listen for HOSTNAME changes from the Cassandra fabric to show at least one node is available
-        subscribe(cassandra, CassandraDatacenter.HOSTNAME, new SensorEventListener<String>() {
+        subscriptions().subscribe(cassandra, CassandraDatacenter.HOSTNAME, new SensorEventListener<String>() {
             @Override
             public void onEvent(SensorEvent<String> event) {
                 if (Strings.isNonBlank(event.getValue())) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/ResilientMongoDbApp.java
----------------------------------------------------------------------
diff --git a/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/ResilientMongoDbApp.java b/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/ResilientMongoDbApp.java
index 6b43e7d..814231f 100644
--- a/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/ResilientMongoDbApp.java
+++ b/examples/simple-nosql-cluster/src/main/java/org/apache/brooklyn/demo/ResilientMongoDbApp.java
@@ -61,7 +61,7 @@ public class ResilientMongoDbApp extends AbstractApplication implements Startabl
         
         initResilience(rs);
         
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(MongoDBReplicaSet.REPLICA_SET_ENDPOINTS, MongoDBServer.REPLICA_SET_PRIMARY_ENDPOINT)
                 .from(rs)
                 .build());
@@ -72,19 +72,19 @@ public class ResilientMongoDbApp extends AbstractApplication implements Startabl
      * failing that attempting to _replace_ the entity (e.g. a new VM), and 
      * failing that setting the cluster "on-fire" */
     protected void initResilience(MongoDBReplicaSet rs) {
-        subscribe(rs, DynamicCluster.MEMBER_ADDED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(rs, DynamicCluster.MEMBER_ADDED, new SensorEventListener<Entity>() {
             @Override
             public void onEvent(SensorEvent<Entity> addition) {
                 initSoftwareProcess((SoftwareProcess)addition.getValue());
             }
         });
-        rs.addPolicy(new ServiceReplacer(ServiceRestarter.ENTITY_RESTART_FAILED));
+        rs.policies().add(new ServiceReplacer(ServiceRestarter.ENTITY_RESTART_FAILED));
     }
 
     /** invoked whenever a new MongoDB server is added (the server may not be started yet) */
     protected void initSoftwareProcess(SoftwareProcess p) {
-        p.addEnricher(new ServiceFailureDetector());
-        p.addPolicy(new ServiceRestarter(ServiceFailureDetector.ENTITY_FAILED));
+        p.enrichers().add(new ServiceFailureDetector());
+        p.policies().add(new ServiceRestarter(ServiceFailureDetector.ENTITY_FAILED));
     }
     
     public static void main(String[] argv) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExample.java b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExample.java
index 0d224bd..601537a 100644
--- a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExample.java
+++ b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExample.java
@@ -80,27 +80,27 @@ public class WebClusterDatabaseExample extends AbstractApplication {
                                 attributeWhenReady(mysql, MySqlNode.DATASTORE_URL), 
                                 DB_TABLE, DB_USERNAME, DB_PASSWORD)) );
 
-        web.addEnricher(HttpLatencyDetector.builder().
+        web.enrichers().add(HttpLatencyDetector.builder().
                 url(ControlledDynamicWebAppCluster.ROOT_URL).
                 rollup(10, TimeUnit.SECONDS).
                 build());
 
         // simple scaling policy
-        web.getCluster().addPolicy(AutoScalerPolicy.builder().
+        web.getCluster().policies().add(AutoScalerPolicy.builder().
                 metric(DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE).
                 metricRange(10, 100).
                 sizeRange(1, 5).
                 build());
 
         // expose some KPI's
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(WebAppServiceConstants.ROOT_URL,
                         DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW,
                         HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW)
                 .from(web)
                 .build());
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(DynamicWebAppCluster.GROUP_SIZE, APPSERVERS_COUNT))
                 .from(web)
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleApp.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleApp.java b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleApp.java
index b1d373b..1fb9905 100644
--- a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleApp.java
+++ b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleApp.java
@@ -133,25 +133,25 @@ public class WebClusterDatabaseExampleApp extends AbstractApplication implements
                         .configure(DynamicCluster.INITIAL_SIZE, 2)
                         .configure(WebAppService.ENABLED_PROTOCOLS, ImmutableSet.of(getConfig(USE_HTTPS) ? "https" : "http")) );
 
-        web.addEnricher(HttpLatencyDetector.builder().
+        web.enrichers().add(HttpLatencyDetector.builder().
                 url(ROOT_URL).
                 rollup(10, TimeUnit.SECONDS).
                 build());
         
-        web.getCluster().addPolicy(AutoScalerPolicy.builder().
+        web.getCluster().policies().add(AutoScalerPolicy.builder().
                 metric(DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE).
                 metricRange(10, 100).
                 sizeRange(2, 5).
                 build());
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(WebAppServiceConstants.ROOT_URL,
                         DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW,
                         HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW)
                 .from(web)
                 .build());
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(DynamicWebAppCluster.GROUP_SIZE, APPSERVERS_COUNT))
                 .from(web)
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
index 0f852c2..c1156b1 100644
--- a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
+++ b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
@@ -68,7 +68,7 @@ public class WebClusterDatabaseExampleGroovy extends AbstractApplication {
                             attributeWhenReady(mysql, MySqlNode.DATASTORE_URL), 
                             DB_TABLE, DB_USERNAME, DB_PASSWORD));
     
-        web.getCluster().addPolicy(AutoScalerPolicy.builder().
+        web.getCluster().policies().add(AutoScalerPolicy.builder().
                 metric(DynamicWebAppCluster.REQUESTS_PER_SECOND_LAST_PER_NODE).
                 sizeRange(1, 5).
                 metricRange(10, 100).

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterExample.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterExample.java b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterExample.java
index bca5b71..e5a1ae2 100644
--- a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterExample.java
+++ b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterExample.java
@@ -71,7 +71,7 @@ public class WebClusterExample extends AbstractApplication {
                         .configure("httpPort", "8080+")
                         .configure("war", WAR_PATH)));
         
-        web.getCluster().addPolicy(AutoScalerPolicy.builder()
+        web.getCluster().policies().add(AutoScalerPolicy.builder()
                 .metric(DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE)
                 .sizeRange(1, 5)
                 .metricRange(10, 100)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java b/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
index 128e6cf..001d81c 100644
--- a/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
+++ b/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
@@ -160,7 +160,7 @@ public class RebindWebClusterDatabaseExampleAppIntegrationTest extends RebindTes
         WebAppMonitor monitor = newWebAppMonitor(clusterUrl, 200);
 
         // expect auto-scaler policy to be there, and to be functional (e.g. can trigger resize)
-        AutoScalerPolicy autoScalerPolicy = (AutoScalerPolicy) Iterables.find(webCluster.getPolicies(), Predicates.instanceOf(AutoScalerPolicy.class));
+        AutoScalerPolicy autoScalerPolicy = (AutoScalerPolicy) Iterables.find(webCluster.policies(), Predicates.instanceOf(AutoScalerPolicy.class));
         
         autoScalerPolicy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3);
         EntityTestUtils.assertGroupSizeEqualsEventually(web, 3);
@@ -177,8 +177,8 @@ public class RebindWebClusterDatabaseExampleAppIntegrationTest extends RebindTes
         }
 
         // expect enrichers to be there
-        Iterables.find(web.getEnrichers(), Predicates.instanceOf(HttpLatencyDetector.class));
-        Iterable<Enricher> propagatorEnrichers = Iterables.filter(web.getEnrichers(), Predicates.instanceOf(Propagator.class));
+        Iterables.find(web.enrichers(), Predicates.instanceOf(HttpLatencyDetector.class));
+        Iterable<Enricher> propagatorEnrichers = Iterables.filter(web.enrichers(), Predicates.instanceOf(Propagator.class));
         assertEquals(Iterables.size(propagatorEnrichers), 3, "propagatorEnrichers="+propagatorEnrichers);
 
         // Check we see evidence of the enrichers having an effect.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
index 2ad0dde..4a09cfa 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
@@ -95,7 +95,7 @@ public class CreateUserPolicy extends AbstractPolicy implements SensorEventListe
 
     public void setEntity(EntityLocal entity) {
         super.setEntity(entity);
-        subscribe(entity, AbstractEntity.LOCATION_ADDED, this);
+        subscriptions().subscribe(entity, AbstractEntity.LOCATION_ADDED, this);
     }
 
     @Override
@@ -175,6 +175,6 @@ public class CreateUserPolicy extends AbstractPolicy implements SensorEventListe
             }
         }
         
-        ((EntityLocal)entity).setAttribute(VM_USER_CREDENTIALS, creds);
+        ((EntityLocal)entity).sensors().set(VM_USER_CREDENTIALS, creds);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/LiveTestEntity.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/LiveTestEntity.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/LiveTestEntity.java
index 2a35b6c..68c631f 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/LiveTestEntity.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/LiveTestEntity.java
@@ -52,7 +52,7 @@ public interface LiveTestEntity extends TestEntity {
         public void start(final Collection<? extends Location> locs) {
             LOG.trace("Starting {}", this);
             callHistory.add("start");
-            setAttribute(SERVICE_STATE, Lifecycle.STARTING);
+            sensors().set(SERVICE_STATE, Lifecycle.STARTING);
             counter.incrementAndGet();
             addLocations(locs);
             provisioningLocation = (JcloudsLocation) Iterables.find(locs, Predicates.instanceOf(JcloudsLocation.class));
@@ -62,19 +62,19 @@ public interface LiveTestEntity extends TestEntity {
                 throw Throwables.propagate(e);
             }
             addLocations(ImmutableList.of(obtainedLocation));
-            setAttribute(SERVICE_STATE, Lifecycle.RUNNING);
+            sensors().set(SERVICE_STATE, Lifecycle.RUNNING);
         }
 
         @Override
         public void stop() {
             LOG.trace("Stopping {}", this);
             callHistory.add("stop");
-            setAttribute(SERVICE_STATE, Lifecycle.STOPPING);
+            sensors().set(SERVICE_STATE, Lifecycle.STOPPING);
             counter.decrementAndGet();
             if (provisioningLocation != null && obtainedLocation != null) {
                 provisioningLocation.release(obtainedLocation);
             }
-            setAttribute(SERVICE_STATE, Lifecycle.STOPPED);
+            sensors().set(SERVICE_STATE, Lifecycle.STOPPED);
         }
 
         public MachineProvisioningLocation<?> getProvisioningLocation() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
index 07f2427..c9de22b 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
@@ -59,7 +59,7 @@ public class RebindJcloudsLocationLiveTest extends AbstractJcloudsLiveTest {
         origEntity = origApp.createAndManageChild(EntitySpec.create(LiveTestEntity.class));
 
         jcloudsLocation = (JcloudsLocation) managementContext.getLocationRegistry().resolve(AWS_EC2_LOCATION_SPEC);
-        jcloudsLocation.setConfig(JcloudsLocation.HARDWARE_ID, AWS_EC2_SMALL_HARDWARE_ID);
+        jcloudsLocation.config().set(JcloudsLocation.HARDWARE_ID, AWS_EC2_SMALL_HARDWARE_ID);
     }
 
     @AfterMethod(alwaysRun = true)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index b596a52..d315260 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -648,11 +648,11 @@ public class AutoScalerPolicy extends AbstractPolicy {
         
         if (getMetric() != null) {
             Entity entityToSubscribeTo = (getEntityWithMetric() != null) ? getEntityWithMetric() : entity;
-            subscribe(entityToSubscribeTo, getMetric(), metricEventHandler);
+            subscriptions().subscribe(entityToSubscribeTo, getMetric(), metricEventHandler);
         }
-        subscribe(poolEntity, getPoolColdSensor(), utilizationEventHandler);
-        subscribe(poolEntity, getPoolHotSensor(), utilizationEventHandler);
-        subscribe(poolEntity, getPoolOkSensor(), utilizationEventHandler);
+        subscriptions().subscribe(poolEntity, getPoolColdSensor(), utilizationEventHandler);
+        subscriptions().subscribe(poolEntity, getPoolHotSensor(), utilizationEventHandler);
+        subscriptions().subscribe(poolEntity, getPoolOkSensor(), utilizationEventHandler);
     }
     
     private ThreadFactory newThreadFactory() {
@@ -974,7 +974,7 @@ public class AutoScalerPolicy extends AbstractPolicy {
                     .maxUnbounded(unboundedSustainedMaxPoolSize)
                     .timeWindow(timeWindowSize)
                     .build();
-            entity.emit(maxSizeReachedSensor, event);
+            entity.sensors().emit(maxSizeReachedSensor, event);
             
         } else if (valsSummary.max > maxAllowedPoolSize) {
             // We temporarily wanted to be bigger than the max allowed; check back later to see if consistent

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/DeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/DeltaEnricher.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/DeltaEnricher.java
index 784c709..555567f 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/DeltaEnricher.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/DeltaEnricher.java
@@ -47,7 +47,7 @@ public class DeltaEnricher<T extends Number> extends AbstractTransformingEnriche
     public void onEvent(SensorEvent<T> event) {
         Number current = elvis(event.getValue(), 0);
         double newVal = current.doubleValue() - last.doubleValue();
-        entity.setAttribute((AttributeSensor<T>)target, TypeCoercions.coerce(newVal, target.getTypeToken()));
+        entity.sensors().set((AttributeSensor<T>)target, TypeCoercions.coerce(newVal, target.getTypeToken()));
         last = current;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetector.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetector.java
index 1bd9e8f..92c5463 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetector.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetector.java
@@ -155,7 +155,7 @@ public class HttpLatencyDetector extends AbstractEnricher implements Enricher {
 
     protected void startSubscriptions(EntityLocal entity) {
         if (getConfig(REQUIRE_SERVICE_UP)) {
-            subscribe(entity, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+            subscriptions().subscribe(entity, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
                 @Override
                 public void onEvent(SensorEvent<Boolean> event) {
                     if (AtomicReferences.setIfDifferent(serviceUp, Boxing.unboxSafely(event.getValue(), false))) {
@@ -174,7 +174,7 @@ public class HttpLatencyDetector extends AbstractEnricher implements Enricher {
 
         AttributeSensor<?> urlSensor = getConfig(URL_SENSOR);
         if (urlSensor!=null) {
-            subscribe(entity, urlSensor, new SensorEventListener<Object>() {
+            subscriptions().subscribe(entity, urlSensor, new SensorEventListener<Object>() {
                 @Override
                 public void onEvent(SensorEvent<Object> event) {
                     Function<String, String> postProcessor = getConfig(URL_POST_PROCESSING);
@@ -202,7 +202,7 @@ public class HttpLatencyDetector extends AbstractEnricher implements Enricher {
     protected void activateAdditionalEnrichers(EntityLocal entity) {
         Duration rollupWindowSize = getConfig(ROLLUP_WINDOW_SIZE);
         if (rollupWindowSize!=null) {
-            entity.addEnricher(new RollingTimeWindowMeanEnricher<Double>(entity,
+            entity.enrichers().add(new RollingTimeWindowMeanEnricher<Double>(entity,
                 REQUEST_LATENCY_IN_SECONDS_MOST_RECENT, REQUEST_LATENCY_IN_SECONDS_IN_WINDOW,
                 rollupWindowSize));
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricher.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricher.java
index 40243a1..0c824f5 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricher.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricher.java
@@ -62,7 +62,7 @@ public class RollingMeanEnricher<T extends Number> extends AbstractTypeTransform
     public void onEvent(SensorEvent<T> event) {
         values.addLast(event.getValue());
         pruneValues();
-        entity.setAttribute((AttributeSensor<Double>)target, getAverage());
+        entity.sensors().set((AttributeSensor<Double>)target, getAverage());
     }
     
     private void pruneValues() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricher.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricher.java
index ae6d637..887ff32 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricher.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricher.java
@@ -129,7 +129,7 @@ public class RollingTimeWindowMeanEnricher<T extends Number> extends AbstractTyp
                 // by default require a high value
 
                 // TODO would be nice to include timestamp, etc
-                entity.setAttribute((AttributeSensor<Double>)target, average.value); 
+                entity.sensors().set((AttributeSensor<Double>)target, average.value); 
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricher.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricher.java
index 3906b7b..b9424c1 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricher.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricher.java
@@ -94,7 +94,7 @@ public class TimeFractionDeltaEnricher<T extends Number> extends AbstractTypeTra
             } else {
                 long duration = eventTimestamp - lastTimestamp;
                 double fraction = toNanos(current.doubleValue() - lastValue.doubleValue(), nanosPerOrigUnit) / TimeUnit.MILLISECONDS.toNanos(duration);
-                entity.setAttribute((AttributeSensor<Double>)target, fraction);
+                entity.sensors().set((AttributeSensor<Double>)target, fraction);
                 if (LOG.isTraceEnabled()) LOG.trace("set {} to {}, {} -> {} at {} (previous at {})", 
                         new Object[] {this, fraction, lastValue, current, eventTimestamp, lastTimestamp}); 
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeWeightedDeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeWeightedDeltaEnricher.java b/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeWeightedDeltaEnricher.java
index 7eb4460..4a3c7fa 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeWeightedDeltaEnricher.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/enricher/TimeWeightedDeltaEnricher.java
@@ -103,7 +103,7 @@ public class TimeWeightedDeltaEnricher<T extends Number> extends AbstractTypeTra
             // don't assume current=zero because then things like requestCount->requestsPerSecond is negative!
             // instead assume same as last time, so delta == 0
             double deltaPostProcessed = postProcessor.apply(0d);
-            entity.setAttribute((AttributeSensor<Double>)target, deltaPostProcessed);
+            entity.sensors().set((AttributeSensor<Double>)target, deltaPostProcessed);
             if (LOG.isTraceEnabled()) LOG.trace("set {} to {}, {} -> {} at {}", new Object[] {this, deltaPostProcessed, lastValue, current, eventTime});
             return;
         }
@@ -117,7 +117,7 @@ public class TimeWeightedDeltaEnricher<T extends Number> extends AbstractTypeTra
                 if (eventTime == lastTime) duration = 0.1; // 0.1 of a millisecond is a relatively small number: 
                 double delta = (current.doubleValue() - lastValue.doubleValue()) / (duration / unitMillis);
                 double deltaPostProcessed = postProcessor.apply(delta);
-                entity.setAttribute((AttributeSensor<Double>)target, deltaPostProcessed);
+                entity.sensors().set((AttributeSensor<Double>)target, deltaPostProcessed);
                 if (LOG.isTraceEnabled()) LOG.trace("set {} to {}, {} -> {} at {}", new Object[] {this, deltaPostProcessed, lastValue, current, eventTime}); 
             }
             lastValue = current;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicy.java
index 05f8800..3062c17 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicy.java
@@ -145,11 +145,11 @@ public class FollowTheSunPolicy extends AbstractPolicy {
         this.poolEntity = (FollowTheSunPool) entity;
         
         // Detect when containers are added to or removed from the pool.
-        subscribe(poolEntity, FollowTheSunPool.CONTAINER_ADDED, eventHandler);
-        subscribe(poolEntity, FollowTheSunPool.CONTAINER_REMOVED, eventHandler);
-        subscribe(poolEntity, FollowTheSunPool.ITEM_ADDED, eventHandler);
-        subscribe(poolEntity, FollowTheSunPool.ITEM_REMOVED, eventHandler);
-        subscribe(poolEntity, FollowTheSunPool.ITEM_MOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, FollowTheSunPool.CONTAINER_ADDED, eventHandler);
+        subscriptions().subscribe(poolEntity, FollowTheSunPool.CONTAINER_REMOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, FollowTheSunPool.ITEM_ADDED, eventHandler);
+        subscriptions().subscribe(poolEntity, FollowTheSunPool.ITEM_REMOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, FollowTheSunPool.ITEM_MOVED, eventHandler);
         
         // Take heed of any extant containers.
         for (Entity container : poolEntity.getContainerGroup().getMembers()) {
@@ -212,7 +212,7 @@ public class FollowTheSunPolicy extends AbstractPolicy {
     }
     
     private void onContainerAdded(Entity container, boolean rebalanceNow) {
-        subscribe(container, Attributes.LOCATION_CHANGED, eventHandler);
+        subscriptions().subscribe(container, Attributes.LOCATION_CHANGED, eventHandler);
         Location location = locationFinder.apply(container);
         
         if (LOG.isTraceEnabled()) LOG.trace("{} recording addition of container {} in location {}", new Object[] {this, container, location});
@@ -232,7 +232,7 @@ public class FollowTheSunPolicy extends AbstractPolicy {
         
         if (LOG.isTraceEnabled()) LOG.trace("{} recording addition of item {} in container {}", new Object[] {this, item, parentContainer});
         
-        subscribe(item, itemUsageMetric, eventHandler);
+        subscriptions().subscribe(item, itemUsageMetric, eventHandler);
         
         // Update the model, including the current metric value (if any).
         Map<? extends Movable, Double> currentValue = item.getAttribute(itemUsageMetric);
@@ -248,7 +248,7 @@ public class FollowTheSunPolicy extends AbstractPolicy {
     
     private void onItemRemoved(Movable item, boolean rebalanceNow) {
         if (LOG.isTraceEnabled()) LOG.trace("{} recording removal of item {}", this, item);
-        unsubscribe(item);
+        subscriptions().unsubscribe(item);
         model.onItemRemoved(item);
         if (rebalanceNow) scheduleLatencyReductionJig();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPoolImpl.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPoolImpl.java b/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPoolImpl.java
index 64fd856..72c861b 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPoolImpl.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPoolImpl.java
@@ -56,7 +56,7 @@ public class FollowTheSunPoolImpl extends AbstractEntity implements FollowTheSun
             if (LOG.isTraceEnabled()) LOG.trace("{} received event {}", FollowTheSunPoolImpl.this, event);
             Entity source = event.getSource();
             Object value = event.getValue();
-            Sensor sensor = event.getSensor();
+            Sensor<?> sensor = event.getSensor();
 
             if (sensor.equals(AbstractGroup.MEMBER_ADDED)) {
                 if (source.equals(containerGroup)) {
@@ -96,10 +96,10 @@ public class FollowTheSunPoolImpl extends AbstractEntity implements FollowTheSun
     public void setContents(Group containerGroup, Group itemGroup) {
         this.containerGroup = containerGroup;
         this.itemGroup = itemGroup;
-        subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
-        subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
-        subscribe(itemGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
-        subscribe(itemGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
+        subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
+        subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
 
         // Process extant containers and items
         for (Entity existingContainer : containerGroup.getMembers()) {
@@ -134,7 +134,7 @@ public class FollowTheSunPoolImpl extends AbstractEntity implements FollowTheSun
 
 
     private void onContainerAdded(Entity newContainer) {
-        subscribe(newContainer, Startable.SERVICE_UP, eventHandler);
+        subscriptions().subscribe(newContainer, Startable.SERVICE_UP, eventHandler);
         if (!(newContainer instanceof Startable) || Boolean.TRUE.equals(newContainer.getAttribute(Startable.SERVICE_UP))) {
             onContainerUp(newContainer);
         }
@@ -142,36 +142,36 @@ public class FollowTheSunPoolImpl extends AbstractEntity implements FollowTheSun
 
     private void onContainerUp(Entity newContainer) {
         if (containers.add(newContainer)) {
-            emit(CONTAINER_ADDED, newContainer);
+            sensors().emit(CONTAINER_ADDED, newContainer);
         }
     }
 
     private void onContainerDown(Entity oldContainer) {
         if (containers.remove(oldContainer)) {
-            emit(CONTAINER_REMOVED, oldContainer);
+            sensors().emit(CONTAINER_REMOVED, oldContainer);
         }
     }
 
     private void onContainerRemoved(Entity oldContainer) {
-        unsubscribe(oldContainer);
+        subscriptions().unsubscribe(oldContainer);
         onContainerDown(oldContainer);
     }
 
     private void onItemAdded(Entity item) {
         if (items.add(item)) {
-            subscribe(item, Movable.CONTAINER, eventHandler);
-            emit(ITEM_ADDED, item);
+            subscriptions().subscribe(item, Movable.CONTAINER, eventHandler);
+            sensors().emit(ITEM_ADDED, item);
         }
     }
 
     private void onItemRemoved(Entity item) {
         if (items.remove(item)) {
-            unsubscribe(item);
-            emit(ITEM_REMOVED, item);
+            subscriptions().unsubscribe(item);
+            sensors().emit(ITEM_REMOVED, item);
         }
     }
 
     private void onItemMoved(Entity item, Entity container) {
-        emit(ITEM_MOVED, new ContainerItemPair(container, item));
+        sensors().emit(ITEM_MOVED, new ContainerItemPair(container, item));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/ha/AbstractFailureDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/AbstractFailureDetector.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/AbstractFailureDetector.java
index 2dddc8f..d625a4f 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/AbstractFailureDetector.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/AbstractFailureDetector.java
@@ -305,7 +305,7 @@ public abstract class AbstractFailureDetector extends AbstractPolicy {
                 if (currentRecoveryPeriod > serviceRecoveredStabilizationDelay && sinceLastDownPeriod > serviceRecoveredStabilizationDelay) {
                     String description = getDescription(calculatedStatus);
                     LOG.warn("{} check for {}, publishing recovered: {}", new Object[] {this, entity, description});
-                    entity.emit(getSensorRecovered(), new HASensors.FailureDescriptor(entity, description));
+                    entity.sensors().emit(getSensorRecovered(), new HASensors.FailureDescriptor(entity, description));
                     lastPublished = LastPublished.RECOVERED;
                     currentFailureStartTime = null;
                 } else {
@@ -321,7 +321,7 @@ public abstract class AbstractFailureDetector extends AbstractPolicy {
                 if (currentFailurePeriod > serviceFailedStabilizationDelay && sinceLastUpPeriod > serviceFailedStabilizationDelay) {
                     String description = getDescription(calculatedStatus);
                     LOG.warn("{} connectivity-check for {}, publishing failed: {}", new Object[] {this, entity, description});
-                    entity.emit(getSensorFailed(), new HASensors.FailureDescriptor(entity, description));
+                    entity.sensors().emit(getSensorFailed(), new HASensors.FailureDescriptor(entity, description));
                     lastPublished = LastPublished.FAILED;
                     currentRecoveryStartTime = null;
                 } else {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/ha/ConditionalSuspendPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ConditionalSuspendPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ConditionalSuspendPolicy.java
index d2a2e36..8237a01 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ConditionalSuspendPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ConditionalSuspendPolicy.java
@@ -61,7 +61,7 @@ public class ConditionalSuspendPolicy extends AbstractPolicy {
     }
 
     private void subscribe() {
-        subscribe(entity, getConfig(SUSPEND_SENSOR), new SensorEventListener<Object>() {
+        subscriptions().subscribe(entity, getConfig(SUSPEND_SENSOR), new SensorEventListener<Object>() {
             @Override public void onEvent(final SensorEvent<Object> event) {
                 if (isRunning()) {
                     Policy target = getTargetPolicy();
@@ -71,7 +71,7 @@ public class ConditionalSuspendPolicy extends AbstractPolicy {
             }
 
         });
-        subscribe(entity, getConfig(RESUME_SENSOR), new SensorEventListener<Object>() {
+        subscriptions().subscribe(entity, getConfig(RESUME_SENSOR), new SensorEventListener<Object>() {
             @Override public void onEvent(final SensorEvent<Object> event) {
                 if (isRunning()) {
                     Policy target = getTargetPolicy();
@@ -87,7 +87,7 @@ public class ConditionalSuspendPolicy extends AbstractPolicy {
         if (target instanceof Policy) {
             return (Policy)target;
         } else if (target instanceof String) {
-            for (Policy policy : entity.getPolicies()) {
+            for (Policy policy : entity.policies()) {
                 // No way to set config values for keys NOT declared in the policy,
                 // so must use displayName as a generally available config value.
                 if (target.equals(policy.getDisplayName()) || target.equals(policy.getClass().getName())) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceFailureDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceFailureDetector.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceFailureDetector.java
index 195886d..6781fcc 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceFailureDetector.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceFailureDetector.java
@@ -228,7 +228,7 @@ public class ServiceFailureDetector extends ServiceStateLogic.ComputeServiceStat
                         recomputeIn = Math.min(recomputeIn, republishDelay.toMilliseconds());
                     }
                     lastPublished = LastPublished.FAILED;
-                    entity.emit(HASensors.ENTITY_FAILED, new HASensors.FailureDescriptor(entity, getFailureDescription(now)));
+                    entity.sensors().emit(HASensors.ENTITY_FAILED, new HASensors.FailureDescriptor(entity, getFailureDescription(now)));
                 } else {
                     recomputeIn = Math.min(recomputeIn, delayBeforeCheck);
                 }
@@ -239,7 +239,7 @@ public class ServiceFailureDetector extends ServiceStateLogic.ComputeServiceStat
                             new Object[] {this, state, Time.makeDateString(currentRecoveryStartTime), Time.makeDateString(now)});
                     publishEntityRecoveredTime = null;
                     lastPublished = LastPublished.RECOVERED;
-                    entity.emit(HASensors.ENTITY_RECOVERED, new HASensors.FailureDescriptor(entity, null));
+                    entity.sensors().emit(HASensors.ENTITY_RECOVERED, new HASensors.FailureDescriptor(entity, null));
                 } else {
                     recomputeIn = Math.min(recomputeIn, delayBeforeCheck);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
index 5d66b85..ade0899 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
@@ -120,7 +120,7 @@ public class ServiceReplacer extends AbstractPolicy {
         
         super.setEntity(entity);
 
-        subscribeToMembers((Group)entity, failureSensorToMonitor, new SensorEventListener<Object>() {
+        subscriptions().subscribeToMembers((Group)entity, failureSensorToMonitor, new SensorEventListener<Object>() {
                 @Override public void onEvent(final SensorEvent<Object> event) {
                     // Must execute in another thread - if we called entity.replaceMember in the event-listener's thread
                     // then we'd block all other events being delivered to this entity's other subscribers.
@@ -208,6 +208,6 @@ public class ServiceReplacer extends AbstractPolicy {
         if (getConfig(SET_ON_FIRE_ON_FAILURE)) {
             ServiceProblemsLogic.updateProblemsIndicator(entity, "ServiceReplacer", "replacement failed: "+msg);
         }
-        entity.emit(ENTITY_REPLACEMENT_FAILED, new FailureDescriptor(entity, msg));
+        entity.sensors().emit(ENTITY_REPLACEMENT_FAILED, new FailureDescriptor(entity, msg));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
index 3d5f84d..4df27e7 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
@@ -103,7 +103,7 @@ public class ServiceRestarter extends AbstractPolicy {
         
         super.setEntity(entity);
         
-        subscribe(entity, getConfig(FAILURE_SENSOR_TO_MONITOR), new SensorEventListener<Object>() {
+        subscriptions().subscribe(entity, getConfig(FAILURE_SENSOR_TO_MONITOR), new SensorEventListener<Object>() {
                 @Override public void onEvent(final SensorEvent<Object> event) {
                     // Must execute in another thread - if we called entity.restart in the event-listener's thread
                     // then we'd block all other events being delivered to this entity's other subscribers.
@@ -157,6 +157,6 @@ public class ServiceRestarter extends AbstractPolicy {
         if (getConfig(SET_ON_FIRE_ON_FAILURE)) {
             ServiceStateLogic.setExpectedState(entity, Lifecycle.ON_FIRE);
         }
-        entity.emit(ENTITY_RESTART_FAILED, new FailureDescriptor(entity, msg));
+        entity.sensors().emit(ENTITY_RESTART_FAILED, new FailureDescriptor(entity, msg));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/BalanceableWorkerPoolImpl.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/BalanceableWorkerPoolImpl.java b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/BalanceableWorkerPoolImpl.java
index 3d42c3e..6b76377 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/BalanceableWorkerPoolImpl.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/BalanceableWorkerPoolImpl.java
@@ -104,10 +104,10 @@ public class BalanceableWorkerPoolImpl extends AbstractEntity implements Balance
         this.itemGroup = itemGroup;
         if (resizable == null && containerGroup instanceof Resizable) resizable = (Resizable) containerGroup;
         
-        subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
-        subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
-        subscribe(itemGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
-        subscribe(itemGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
+        subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
+        subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
         
         // Process extant containers and items
         for (Entity existingContainer : containerGroup.getMembers()) {
@@ -141,7 +141,7 @@ public class BalanceableWorkerPoolImpl extends AbstractEntity implements Balance
     }
     
     private void onContainerAdded(BalanceableContainer<?> newContainer) {
-        subscribe(newContainer, Startable.SERVICE_UP, eventHandler);
+        subscriptions().subscribe(newContainer, Startable.SERVICE_UP, eventHandler);
         if (!(newContainer instanceof Startable) || Boolean.TRUE.equals(newContainer.getAttribute(Startable.SERVICE_UP))) {
             onContainerUp(newContainer);
         }
@@ -149,36 +149,36 @@ public class BalanceableWorkerPoolImpl extends AbstractEntity implements Balance
     
     private void onContainerUp(BalanceableContainer<?> newContainer) {
         if (containers.add(newContainer)) {
-            emit(CONTAINER_ADDED, newContainer);
+            sensors().emit(CONTAINER_ADDED, newContainer);
         }
     }
     
     private void onContainerDown(BalanceableContainer<?> oldContainer) {
         if (containers.remove(oldContainer)) {
-            emit(CONTAINER_REMOVED, oldContainer);
+            sensors().emit(CONTAINER_REMOVED, oldContainer);
         }
     }
     
     private void onContainerRemoved(BalanceableContainer<?> oldContainer) {
-        unsubscribe(oldContainer);
+        subscriptions().unsubscribe(oldContainer);
         onContainerDown(oldContainer);
     }
     
     private void onItemAdded(Entity item) {
         if (items.add(item)) {
-            subscribe(item, Movable.CONTAINER, eventHandler);
-            emit(ITEM_ADDED, new ContainerItemPair(item.getAttribute(Movable.CONTAINER), item));
+            subscriptions().subscribe(item, Movable.CONTAINER, eventHandler);
+            sensors().emit(ITEM_ADDED, new ContainerItemPair(item.getAttribute(Movable.CONTAINER), item));
         }
     }
     
     private void onItemRemoved(Entity item) {
         if (items.remove(item)) {
-            unsubscribe(item);
-            emit(ITEM_REMOVED, new ContainerItemPair(null, item));
+            subscriptions().unsubscribe(item);
+            sensors().emit(ITEM_REMOVED, new ContainerItemPair(null, item));
         }
     }
     
     private void onItemMoved(Entity item, BalanceableContainer<?> container) {
-        emit(ITEM_MOVED, new ContainerItemPair(container, item));
+        sensors().emit(ITEM_MOVED, new ContainerItemPair(container, item));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/ItemsInContainersGroupImpl.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/ItemsInContainersGroupImpl.java b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/ItemsInContainersGroupImpl.java
index b6c7271..35f0c8d 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/ItemsInContainersGroupImpl.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/ItemsInContainersGroupImpl.java
@@ -99,9 +99,9 @@ public class ItemsInContainersGroupImpl extends DynamicGroupImpl implements Item
     @Override
     public void setContainers(Group containerGroup) {
         this.containerGroup = containerGroup;
-        subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
-        subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
-        subscribe(null, Movable.CONTAINER, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler);
+        subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler);
+        subscriptions().subscribe(null, Movable.CONTAINER, eventHandler);
         
         if (LOG.isTraceEnabled()) LOG.trace("{} scanning entities on container group set", this);
         rescanEntities();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
index d714557..d4baf63 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
@@ -151,11 +151,11 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
         this.poolEntity = (BalanceableWorkerPool) entity;
         
         // Detect when containers are added to or removed from the pool.
-        subscribe(poolEntity, BalanceableWorkerPool.CONTAINER_ADDED, eventHandler);
-        subscribe(poolEntity, BalanceableWorkerPool.CONTAINER_REMOVED, eventHandler);
-        subscribe(poolEntity, BalanceableWorkerPool.ITEM_ADDED, eventHandler);
-        subscribe(poolEntity, BalanceableWorkerPool.ITEM_REMOVED, eventHandler);
-        subscribe(poolEntity, BalanceableWorkerPool.ITEM_MOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, BalanceableWorkerPool.CONTAINER_ADDED, eventHandler);
+        subscriptions().subscribe(poolEntity, BalanceableWorkerPool.CONTAINER_REMOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, BalanceableWorkerPool.ITEM_ADDED, eventHandler);
+        subscriptions().subscribe(poolEntity, BalanceableWorkerPool.ITEM_REMOVED, eventHandler);
+        subscriptions().subscribe(poolEntity, BalanceableWorkerPool.ITEM_MOVED, eventHandler);
         
         // Take heed of any extant containers.
         for (Entity container : poolEntity.getContainerGroup().getMembers()) {
@@ -214,7 +214,7 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
                                     AutoScalerPolicy.POOL_LOW_THRESHOLD_KEY, model.getPoolLowThreshold(),
                                     AutoScalerPolicy.POOL_HIGH_THRESHOLD_KEY, model.getPoolHighThreshold());
             
-                            ((EntityLocal)poolEntity).emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, eventVal);
+                            poolEntity.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, eventVal);
                             
                             if (LOG.isInfoEnabled()) {
                                 int desiredPoolSize = (int) Math.ceil(model.getCurrentPoolWorkrate() / (model.getPoolLowThreshold()/model.getPoolSize()));
@@ -232,7 +232,7 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
                                     AutoScalerPolicy.POOL_LOW_THRESHOLD_KEY, model.getPoolLowThreshold(),
                                     AutoScalerPolicy.POOL_HIGH_THRESHOLD_KEY, model.getPoolHighThreshold());
                             
-                            ((EntityLocal)poolEntity).emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, eventVal);
+                            poolEntity.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, eventVal);
                             
                             if (LOG.isInfoEnabled()) {
                                 int desiredPoolSize = (int) Math.ceil(model.getCurrentPoolWorkrate() / (model.getPoolHighThreshold()/model.getPoolSize()));
@@ -303,7 +303,7 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
         Preconditions.checkArgument(item instanceof Movable, "Added item "+item+" must implement Movable");
         if (LOG.isTraceEnabled()) LOG.trace("{} recording addition of item {} in container {}", new Object[] {this, item, parentContainer});
         
-        subscribe(item, metric, eventHandler);
+        subscriptions().subscribe(item, metric, eventHandler);
         
         // Update the model, including the current metric value (if any).
         boolean immovable = (Boolean)elvis(item.getConfig(Movable.IMMOVABLE), false);
@@ -317,7 +317,7 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
     
     private void onItemRemoved(ItemType item, NodeType parentContainer, boolean rebalanceNow) {
         if (LOG.isTraceEnabled()) LOG.trace("{} recording removal of item {}", this, item);
-        unsubscribe(item);
+        subscriptions().unsubscribe(item);
         model.onItemRemoved(item);
         if (rebalanceNow) scheduleRebalance();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
index f9c2961..e04f714 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
@@ -69,12 +69,12 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(1);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
-        tc.setAttribute(MY_ATTRIBUTE, 100);
+        tc.sensors().set(MY_ATTRIBUTE, 100);
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1));
 
-        tc.setAttribute(MY_ATTRIBUTE, 101);
+        tc.sensors().set(MY_ATTRIBUTE, 101);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
     }
     
@@ -83,12 +83,12 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(2);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
-        tc.setAttribute(MY_ATTRIBUTE, 50);
+        tc.sensors().set(MY_ATTRIBUTE, 50);
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 2));
 
-        tc.setAttribute(MY_ATTRIBUTE, 49);
+        tc.sensors().set(MY_ATTRIBUTE, 49);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
     
@@ -97,14 +97,14 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(5);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
         
         // workload 200 so requires doubling size to 10 to handle: (200*5)/100 = 10
-        tc.setAttribute(MY_ATTRIBUTE, 200);
+        tc.sensors().set(MY_ATTRIBUTE, 200);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 10));
         
         // workload 5, requires 1 entity: (10*110)/100 = 11
-        tc.setAttribute(MY_ATTRIBUTE, 110);
+        tc.sensors().set(MY_ATTRIBUTE, 110);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 11));
     }
     
@@ -113,17 +113,17 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(5);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
         
         // workload can be handled by 4 servers, within its valid range: (49*5)/50 = 4.9
-        tc.setAttribute(MY_ATTRIBUTE, 49);
+        tc.sensors().set(MY_ATTRIBUTE, 49);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 4));
         
         // workload can be handled by 4 servers, within its valid range: (25*4)/50 = 2
-        tc.setAttribute(MY_ATTRIBUTE, 25);
+        tc.sensors().set(MY_ATTRIBUTE, 25);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
         
-        tc.setAttribute(MY_ATTRIBUTE, 0);
+        tc.sensors().set(MY_ATTRIBUTE, 0);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
     
@@ -135,14 +135,14 @@ public class AutoScalerPolicyMetricTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .minPoolSize(2).maxPoolSize(6)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         // Decreases to min-size only
-        tc.setAttribute(MY_ATTRIBUTE, 0);
+        tc.sensors().set(MY_ATTRIBUTE, 0);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
         
         // Increases to max-size only
-        tc.setAttribute(MY_ATTRIBUTE, 100000);
+        tc.sensors().set(MY_ATTRIBUTE, 100000);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 6));
     }
     
@@ -153,7 +153,7 @@ public class AutoScalerPolicyMetricTest {
         
         BasicNotificationSensor<MaxPoolSizeReachedEvent> maxSizeReachedSensor = AutoScalerPolicy.DEFAULT_MAX_SIZE_REACHED_SENSOR;
         
-        app.subscribe(tc, maxSizeReachedSensor, new SensorEventListener<MaxPoolSizeReachedEvent>() {
+        app.subscriptions().subscribe(tc, maxSizeReachedSensor, new SensorEventListener<MaxPoolSizeReachedEvent>() {
                 @Override public void onEvent(SensorEvent<MaxPoolSizeReachedEvent> event) {
                     maxReachedEvents.add(event.getValue());
                 }});
@@ -163,15 +163,15 @@ public class AutoScalerPolicyMetricTest {
                 .maxPoolSize(6)
                 .maxSizeReachedSensor(maxSizeReachedSensor)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         // workload can be handled by 6 servers, so no need to notify: 6 <= (100*6)/50
-        tc.setAttribute(MY_ATTRIBUTE, 600);
+        tc.sensors().set(MY_ATTRIBUTE, 600);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 6));
         assertTrue(maxReachedEvents.isEmpty());
         
         // Increases to above max capacity: would require (100000*6)/100 = 6000
-        tc.setAttribute(MY_ATTRIBUTE, 100000);
+        tc.sensors().set(MY_ATTRIBUTE, 100000);
         
         // Assert our listener gets notified (once)
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
@@ -195,13 +195,13 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(1);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.destroy();
         assertTrue(policy.isDestroyed());
         assertFalse(policy.isRunning());
         
-        tc.setAttribute(MY_ATTRIBUTE, 100000);
+        tc.sensors().set(MY_ATTRIBUTE, 100000);
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1));
         
         // TODO Could assert all subscriptions have been de-registered as well, 
@@ -211,7 +211,7 @@ public class AutoScalerPolicyMetricTest {
     @Test
     public void testSuspendState() {
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
         
         policy.suspend();
         assertFalse(policy.isRunning());
@@ -227,11 +227,11 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(1);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.suspend();
         
-        tc.setAttribute(MY_ATTRIBUTE, 100000);
+        tc.sensors().set(MY_ATTRIBUTE, 100000);
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1));
     }
     
@@ -240,11 +240,11 @@ public class AutoScalerPolicyMetricTest {
         tc.resize(1);
         
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
         
         policy.suspend();
         policy.resume();
-        tc.setAttribute(MY_ATTRIBUTE, 101);
+        tc.sensors().set(MY_ATTRIBUTE, 101);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
     }
     
@@ -260,14 +260,14 @@ public class AutoScalerPolicyMetricTest {
                 .metricLowerBound(50)
                 .metricUpperBound(100)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         // First confirm that tc is not being listened to for this entity
-        tc.setAttribute(TestEntity.SEQUENCE, 101);
+        tc.sensors().set(TestEntity.SEQUENCE, 101);
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1));
 
         // Then confirm we listen to the correct "entityWithMetric"
-        entityWithMetric.setAttribute(TestEntity.SEQUENCE, 101);
+        entityWithMetric.sensors().set(TestEntity.SEQUENCE, 101);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
index a0b7451..b1fbc61 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
@@ -68,7 +68,7 @@ public class AutoScalerPolicyRebindTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testRestoresAutoScalerConfig() throws Exception {
-        origCluster.addPolicy(AutoScalerPolicy.builder()
+        origCluster.policies().add(AutoScalerPolicy.builder()
                 .name("myname")
                 .metric(METRIC_SENSOR)
                 .entityWithMetric(origCluster)
@@ -88,7 +88,7 @@ public class AutoScalerPolicyRebindTest extends RebindTestFixtureWithApp {
         
         TestApplication newApp = rebind();
         DynamicCluster newCluster = (DynamicCluster) Iterables.getOnlyElement(newApp.getChildren());
-        AutoScalerPolicy newPolicy = (AutoScalerPolicy) Iterables.getOnlyElement(newCluster.getPolicies());
+        AutoScalerPolicy newPolicy = (AutoScalerPolicy) Iterables.getOnlyElement(newCluster.policies());
 
         assertEquals(newPolicy.getDisplayName(), "myname");
         assertEquals(newPolicy.getConfig(AutoScalerPolicy.METRIC), METRIC_SENSOR);
@@ -110,7 +110,7 @@ public class AutoScalerPolicyRebindTest extends RebindTestFixtureWithApp {
     @Test
     public void testAutoScalerResizesAfterRebind() throws Exception {
         origCluster.start(ImmutableList.of(origLoc));
-        origCluster.addPolicy(AutoScalerPolicy.builder()
+        origCluster.policies().add(AutoScalerPolicy.builder()
                 .name("myname")
                 .metric(METRIC_SENSOR)
                 .entityWithMetric(origCluster)
@@ -125,10 +125,10 @@ public class AutoScalerPolicyRebindTest extends RebindTestFixtureWithApp {
 
         assertEquals(newCluster.getCurrentSize(), (Integer)1);
         
-        ((EntityInternal)newCluster).setAttribute(METRIC_SENSOR, 1000);
+        ((EntityInternal)newCluster).sensors().set(METRIC_SENSOR, 1000);
         EntityTestUtils.assertGroupSizeEqualsEventually(newCluster, 3);
         
-        ((EntityInternal)newCluster).setAttribute(METRIC_SENSOR, 1);
+        ((EntityInternal)newCluster).sensors().set(METRIC_SENSOR, 1);
         EntityTestUtils.assertGroupSizeEqualsEventually(newCluster, 1);
     }
 }