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:35 UTC

[05/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/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorTest.java
index a99f8a4..7e4a83a 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorTest.java
@@ -80,7 +80,7 @@ public class ServiceFailureDetectorTest {
         managementContext = new LocalManagementContextForTests();
         app = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext);
         e1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
-        e1.addEnricher(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
+        e1.enrichers().add(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
         
         app.getManagementContext().getSubscriptionManager().subscribe(e1, HASensors.ENTITY_FAILED, eventListener);
         app.getManagementContext().getSubscriptionManager().subscribe(e1, HASensors.ENTITY_RECOVERED, eventListener);
@@ -94,10 +94,10 @@ public class ServiceFailureDetectorTest {
     @Test(groups="Integration") // Has a 1 second wait
     public void testNotNotifiedOfFailuresForHealthy() throws Exception {
         // Create members before and after the policy is registered, to test both scenarios
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
         assertNoEventsContinually();
         assertEquals(e1.getAttribute(TestEntity.SERVICE_STATE_ACTUAL), Lifecycle.RUNNING);
@@ -105,14 +105,14 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testNotifiedOfFailure() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         
         assertEquals(events.size(), 0, "events="+events);
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
         assertEquals(events.size(), 1, "events="+events);
@@ -121,9 +121,9 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testNotifiedOfFailureOnProblem() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         
         assertEquals(events.size(), 0, "events="+events);
@@ -137,8 +137,8 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testNotifiedOfFailureOnStateOnFire() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.ON_FIRE);
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
@@ -148,18 +148,18 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testNotifiedOfRecovery() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         // Make the entity fail
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
         EntityTestUtils.assertAttributeEqualsEventually(e1, TestEntity.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
 
         // And make the entity recover
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         assertHasEventEventually(HASensors.ENTITY_RECOVERED, Predicates.<Object>equalTo(e1), null);
         assertEquals(events.size(), 2, "events="+events);
         EntityTestUtils.assertAttributeEqualsEventually(e1, TestEntity.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
@@ -167,9 +167,9 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testNotifiedOfRecoveryFromProblems() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         // Make the entity fail
         ServiceProblemsLogic.updateProblemsIndicator(e1, "test", "foo");
@@ -187,10 +187,10 @@ public class ServiceFailureDetectorTest {
     
     @Test(groups="Integration") // Has a 1 second wait
     public void testEmitsEntityFailureOnlyIfPreviouslyUp() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
         // Make the entity fail
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
 
         EntityTestUtils.assertAttributeEqualsEventually(e1, TestEntity.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
@@ -199,10 +199,10 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testDisablingPreviouslyUpRequirementForEntityFailed() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.ENTITY_FAILED_ONLY_IF_PREVIOUSLY_UP, false));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
 
         EntityTestUtils.assertAttributeEqualsEventually(e1, TestEntity.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
@@ -211,29 +211,29 @@ public class ServiceFailureDetectorTest {
     
     @Test
     public void testDisablingOnFire() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.SERVICE_ON_FIRE_STABILIZATION_DELAY, Duration.PRACTICALLY_FOREVER));
         
         // Make the entity fail
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertEquals(e1.getAttribute(TestEntity.SERVICE_STATE_ACTUAL), Lifecycle.RUNNING);
     }
     
     @Test(groups="Integration") // Has a 1 second wait
     public void testOnFireAfterDelay() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.SERVICE_ON_FIRE_STABILIZATION_DELAY, Duration.ONE_SECOND));
         
         // Make the entity fail
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertEquals(e1.getAttribute(TestEntity.SERVICE_STATE_ACTUAL), Lifecycle.RUNNING);
         Time.sleep(Duration.millis(100));
@@ -243,12 +243,12 @@ public class ServiceFailureDetectorTest {
     
     @Test(groups="Integration") // Has a 1 second wait
     public void testOnFailureDelayFromProblemAndRecover() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.SERVICE_ON_FIRE_STABILIZATION_DELAY, Duration.ONE_SECOND)
             .configure(ServiceFailureDetector.ENTITY_RECOVERED_STABILIZATION_DELAY, Duration.ONE_SECOND));
         
         // Set the entity to healthy
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
         
@@ -272,23 +272,23 @@ public class ServiceFailureDetectorTest {
     
     @Test(groups="Integration") // Has a 1 second wait
     public void testAttendsToServiceState() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         // not counted as failed because not expected to be running
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertNoEventsContinually();
     }
 
     @Test(groups="Integration") // Has a 1 second wait
     public void testOnlyReportsFailureIfRunning() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
         
         // Make the entity fail
         ServiceStateLogic.setExpectedState(e1, Lifecycle.STARTING);
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertNoEventsContinually();
     }
@@ -296,9 +296,9 @@ public class ServiceFailureDetectorTest {
     @Test
     public void testReportsFailureWhenAlreadyDownOnRegisteringPolicy() throws Exception {
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.ENTITY_FAILED_ONLY_IF_PREVIOUSLY_UP, false));
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
@@ -308,7 +308,7 @@ public class ServiceFailureDetectorTest {
     public void testReportsFailureWhenAlreadyOnFireOnRegisteringPolicy() throws Exception {
         ServiceStateLogic.setExpectedState(e1, Lifecycle.ON_FIRE);
 
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
             .configure(ServiceFailureDetector.ENTITY_FAILED_ONLY_IF_PREVIOUSLY_UP, false));
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
@@ -318,11 +318,11 @@ public class ServiceFailureDetectorTest {
     public void testRepublishedFailure() throws Exception {
         Duration republishPeriod = Duration.millis(100);
 
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_FAILED_REPUBLISH_TIME, republishPeriod));
             
         // Set the entity to healthy
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
index ba08666..0801213 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
@@ -104,12 +104,12 @@ public class ServiceReplacerTest {
         app.start(ImmutableList.<Location>of(loc));
 
         ServiceReplacer policy = new ServiceReplacer(new ConfigBag().configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        cluster.addPolicy(policy);
+        cluster.policies().add(policy);
 
         final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
         final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 1);
         
-        e1.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
         
         // Expect e1 to be replaced
         Asserts.succeedsEventually(new Runnable() {
@@ -132,7 +132,7 @@ public class ServiceReplacerTest {
     // fails the startup of the replacement entity (but not the original). 
     @Test
     public void testSetsOnFireWhenFailToReplaceMember() throws Exception {
-        app.subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
+        app.subscriptions().subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
         
         final DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
                 .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
@@ -151,12 +151,12 @@ public class ServiceReplacerTest {
         log.info("started "+app+" for "+JavaClassNames.niceClassAndMethod());
         
         ServiceReplacer policy = new ServiceReplacer(new ConfigBag().configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        cluster.addPolicy(policy);
+        cluster.policies().add(policy);
         
         final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
         final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 0);
         
-        e1.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
 
         // Expect cluster to go on-fire when fails to start replacement
         // Note that we've set up-quorum and running-quorum to be "alwaysTrue" so that we don't get a transient onFire
@@ -179,7 +179,7 @@ public class ServiceReplacerTest {
     
     @Test(groups="Integration") // has a 1 second wait
     public void testDoesNotOnFireWhenFailToReplaceMember() throws Exception {
-        app.subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
+        app.subscriptions().subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
         
         final DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
                 .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
@@ -191,12 +191,12 @@ public class ServiceReplacerTest {
         ServiceReplacer policy = new ServiceReplacer(new ConfigBag()
                 .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
                 .configure(ServiceReplacer.SET_ON_FIRE_ON_FAILURE, false));
-        cluster.addPolicy(policy);
+        cluster.policies().add(policy);
         
         final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
         final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 0);
         
-        e1.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
 
         // Configured to not mark cluster as on fire
         Asserts.succeedsContinually(new Runnable() {
@@ -210,7 +210,7 @@ public class ServiceReplacerTest {
 
     @Test(groups="Integration")  // 1s wait
     public void testStopFailureOfOldEntityDoesNotSetClusterOnFire() throws Exception {
-        app.subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
+        app.subscriptions().subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
         
         final DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
                 .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
@@ -218,13 +218,13 @@ public class ServiceReplacerTest {
                 .configure(DynamicCluster.INITIAL_SIZE, 2));
         app.start(ImmutableList.<Location>of(loc));
         
-        cluster.addPolicy(PolicySpec.create(ServiceReplacer.class)
+        cluster.policies().add(PolicySpec.create(ServiceReplacer.class)
                 .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
         
         final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
         final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 0);
         
-        e1.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
 
         // Expect e1 to be replaced
         Asserts.succeedsEventually(new Runnable() {
@@ -268,7 +268,7 @@ public class ServiceReplacerTest {
      */
     @Test(groups="Integration") // because takes 1.2 seconds
     public void testAbandonsReplacementAfterNumFailures() throws Exception {
-        app.subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
+        app.subscriptions().subscribe(null, ServiceReplacer.ENTITY_REPLACEMENT_FAILED, eventListener);
         
         final DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
                 .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
@@ -280,13 +280,13 @@ public class ServiceReplacerTest {
         ServiceReplacer policy = new ServiceReplacer(new ConfigBag()
                 .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
                 .configure(ServiceReplacer.FAIL_ON_NUM_RECURRING_FAILURES, 3));
-        cluster.addPolicy(policy);
+        cluster.policies().add(policy);
 
         final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
         for (int i = 0; i < 5; i++) {
             final int counter = i+1;
             EntityInternal entity = (EntityInternal) Iterables.get(initialMembers, i);
-            entity.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(entity, "simulate failure"));
+            entity.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(entity, "simulate failure"));
             if (i <= 3) {
                 Asserts.succeedsEventually(new Runnable() {
                     @Override public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
index 11c87cb..b987ed5 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
@@ -84,9 +84,9 @@ public class ServiceRestarterTest {
     @Test
     public void testRestartsOnFailure() throws Exception {
         policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        e1.addPolicy(policy);
+        e1.policies().add(policy);
         
-        e1.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
         
         Asserts.succeedsEventually(new Runnable() {
             @Override public void run() {
@@ -97,9 +97,9 @@ public class ServiceRestarterTest {
     @Test(groups="Integration") // Has a 1 second wait
     public void testDoesNotRestartsWhenHealthy() throws Exception {
         policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        e1.addPolicy(policy);
+        e1.policies().add(policy);
         
-        e1.emit(HASensors.ENTITY_RECOVERED, new FailureDescriptor(e1, "not a failure"));
+        e1.sensors().emit(HASensors.ENTITY_RECOVERED, new FailureDescriptor(e1, "not a failure"));
         
         Asserts.succeedsContinually(new Runnable() {
             @Override public void run() {
@@ -111,12 +111,12 @@ public class ServiceRestarterTest {
     public void testEmitsFailureEventWhenRestarterFails() throws Exception {
         final FailingEntity e2 = app.createAndManageChild(EntitySpec.create(FailingEntity.class)
                 .configure(FailingEntity.FAIL_ON_RESTART, true));
-        app.subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
+        app.subscriptions().subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
 
         policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        e2.addPolicy(policy);
+        e2.policies().add(policy);
 
-        e2.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
+        e2.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
         
         Asserts.succeedsEventually(new Runnable() {
             @Override public void run() {
@@ -132,14 +132,14 @@ public class ServiceRestarterTest {
     public void testDoesNotSetOnFireOnFailure() throws Exception {
         final FailingEntity e2 = app.createAndManageChild(EntitySpec.create(FailingEntity.class)
                 .configure(FailingEntity.FAIL_ON_RESTART, true));
-        app.subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
+        app.subscriptions().subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
 
         policy = new ServiceRestarter(new ConfigBag()
                 .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
                 .configure(ServiceRestarter.SET_ON_FIRE_ON_FAILURE, false));
-        e2.addPolicy(policy);
+        e2.policies().add(policy);
 
-        e2.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
+        e2.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
         
         Asserts.succeedsContinually(new Runnable() {
             @Override public void run() {
@@ -168,16 +168,16 @@ public class ServiceRestarterTest {
                         return null;
                     }}));
         
-        e2.addPolicy(PolicySpec.create(ServiceRestarter.class)
+        e2.policies().add(PolicySpec.create(ServiceRestarter.class)
                 .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
-        e2.subscribe(e2, TestEntity.SEQUENCE, eventListener);
+        e2.subscriptions().subscribe(e2, TestEntity.SEQUENCE, eventListener);
 
         // Cause failure, and wait for entity.restart to be blocking
-        e2.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
+        e2.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
         assertTrue(inRestartLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         
         // Expect other notifications to continue to get through
-        e2.setAttribute(TestEntity.SEQUENCE, 1);
+        e2.sensors().set(TestEntity.SEQUENCE, 1);
         Asserts.succeedsEventually(new Runnable() {
             @Override public void run() {
                 assertEquals(Iterables.getOnlyElement(events).getValue(), 1);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/AbstractLoadBalancingPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/AbstractLoadBalancingPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/AbstractLoadBalancingPolicyTest.java
index eebf16e..f97cbf7 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/AbstractLoadBalancingPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/AbstractLoadBalancingPolicyTest.java
@@ -27,7 +27,6 @@ import java.util.Random;
 import java.util.Set;
 
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.entity.Group;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
@@ -99,7 +98,7 @@ public class AbstractLoadBalancingPolicyTest {
         pool = app.createAndManageChild(EntitySpec.create(BalanceableWorkerPool.class));
         pool.setContents(containerGroup, itemGroup);
         policy = new LoadBalancingPolicy(MutableMap.of("minPeriodBetweenExecs", 1), TEST_METRIC, model);
-        pool.addPolicy(policy);
+        pool.policies().add(policy);
         app.start(ImmutableList.of(loc));
     }
     
@@ -214,7 +213,7 @@ public class AbstractLoadBalancingPolicyTest {
                 .displayName(name));
         LOG.debug("Managing new item {} on container {}", item, container);
         item.move(container);
-        ((EntityLocal)item).setAttribute(TEST_METRIC, (int)workrate);
+        item.sensors().set(TEST_METRIC, (int)workrate);
         return item;
     }
     
@@ -224,7 +223,7 @@ public class AbstractLoadBalancingPolicyTest {
                 .configure(Movable.IMMOVABLE, true));
         LOG.debug("Managed new item {} on container {}", item, container);
         item.move(container);
-        ((EntityLocal)item).setAttribute(TEST_METRIC, (int)workrate);
+        item.sensors().set(TEST_METRIC, (int)workrate);
         return item;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyConcurrencyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyConcurrencyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyConcurrencyTest.java
index d33ed90..f5b45ad 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyConcurrencyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyConcurrencyTest.java
@@ -201,7 +201,7 @@ public class LoadBalancingPolicyConcurrencyTest extends AbstractLoadBalancingPol
                             return;
                         }
                         double jitteredWorkrate = workrate + (random.nextDouble()*jitter*2 - jitter);
-                        ((EntityLocal)item).setAttribute(TEST_METRIC, (int) Math.max(0, jitteredWorkrate));
+                        ((EntityLocal)item).sensors().set(TEST_METRIC, (int) Math.max(0, jitteredWorkrate));
                     }
                 },
                 0, WORKRATE_UPDATE_PERIOD_MS, TimeUnit.MILLISECONDS);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicySoakTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicySoakTest.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicySoakTest.java
index 9e14664..f131442 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicySoakTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicySoakTest.java
@@ -159,7 +159,7 @@ public class LoadBalancingPolicySoakTest extends AbstractLoadBalancingPolicyTest
             
             for (int j = 0; j < numItems; j++) {
                 MockItemEntity item = items.get(j);
-                ((EntityLocal)item).setAttribute(MockItemEntity.TEST_METRIC, itemRates.get(j));
+                ((EntityLocal)item).sensors().set(MockItemEntity.TEST_METRIC, itemRates.get(j));
             }
                 
             // Stop containers, and start others

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyTest.java
index 6396e34..bee3eae 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/LoadBalancingPolicyTest.java
@@ -150,8 +150,8 @@ public class LoadBalancingPolicyTest extends AbstractLoadBalancingPolicyTest {
         MockItemEntity item1 = newItem(app, containerA, "1", 0);
         MockItemEntity item2 = newItem(app, containerA, "2", 0);
 
-        ((EntityLocal)item1).setAttribute(MockItemEntity.TEST_METRIC, 40);
-        ((EntityLocal)item2).setAttribute(MockItemEntity.TEST_METRIC, 40);
+        item1.sensors().set(MockItemEntity.TEST_METRIC, 40);
+        item2.sensors().set(MockItemEntity.TEST_METRIC, 40);
         
         assertWorkratesEventually(
                 ImmutableList.of(containerA, containerB), 
@@ -305,7 +305,7 @@ public class LoadBalancingPolicyTest extends AbstractLoadBalancingPolicyTest {
     @SuppressWarnings({ "unchecked", "rawtypes" })
     @Test
     public void testModelIncludesItemsAndContainersStartedBeforePolicyCreated() {
-        pool.removePolicy(policy);
+        pool.policies().remove(policy);
         policy.destroy();
         
         // Set-up containers and items.
@@ -313,7 +313,7 @@ public class LoadBalancingPolicyTest extends AbstractLoadBalancingPolicyTest {
         newItem(app, containerA, "1", 10);
 
         policy = new LoadBalancingPolicy(MutableMap.of(), TEST_METRIC, model);
-        pool.addPolicy(policy);
+        pool.policies().add(policy);
         
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
             public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockContainerEntityImpl.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockContainerEntityImpl.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockContainerEntityImpl.java
index db997b4..cb93df0 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockContainerEntityImpl.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockContainerEntityImpl.java
@@ -54,9 +54,10 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
     ReentrantLock _lock = new ReentrantLock();
 
     @Override
+    @Deprecated
     public <T> T setAttribute(AttributeSensor<T> attribute, T val) {
         if (LOG.isDebugEnabled()) LOG.debug("Mocks: container {} setting {} to {}", new Object[] {this, attribute, val});
-        return super.setAttribute(attribute, val);
+        return super.sensors().set(attribute, val);
     }
 
     @Override
@@ -104,7 +105,7 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
         if (LOG.isDebugEnabled()) LOG.debug("Mocks: adding item {} to container {}", item, this);
         if (!running || offloading) throw new IllegalStateException("Container "+getDisplayName()+" is not running; cannot add item "+item);
         addMember(item);
-        emit(ITEM_ADDED, item);
+        sensors().emit(ITEM_ADDED, item);
     }
 
     @Override
@@ -112,7 +113,7 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
         if (LOG.isDebugEnabled()) LOG.debug("Mocks: removing item {} from container {}", item, this);
         if (!running) throw new IllegalStateException("Container "+getDisplayName()+" is not running; cannot remove item "+item);
         removeMember(item);
-        emit(ITEM_REMOVED, item);
+        sensors().emit(ITEM_REMOVED, item);
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -137,8 +138,8 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
             Time.sleep(getDelay());
             running = true;
             addLocations(locs);
-            emit(Attributes.LOCATION_CHANGED, null);
-            setAttribute(SERVICE_UP, true);
+            sensors().emit(Attributes.LOCATION_CHANGED, null);
+            sensors().set(SERVICE_UP, true);
         } finally {
             _lock.unlock();
         }
@@ -151,7 +152,7 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
         try {
             running = false;
             Time.sleep(getDelay());
-            setAttribute(SERVICE_UP, false);
+            sensors().set(SERVICE_UP, false);
         } finally {
             _lock.unlock();
         }
@@ -160,7 +161,7 @@ public class MockContainerEntityImpl extends AbstractGroupImpl implements MockCo
     private void stopWithoutLock() {
         running = false;
         Time.sleep(getDelay());
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
     }
 
     public void offloadAndStop(final MockContainerEntity otherContainer) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockItemEntityImpl.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockItemEntityImpl.java b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockItemEntityImpl.java
index 1014605..699fe59 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockItemEntityImpl.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/loadbalancing/MockItemEntityImpl.java
@@ -58,7 +58,7 @@ public class MockItemEntityImpl extends AbstractEntity implements MockItemEntity
     @Override
     public <T> T setAttribute(AttributeSensor<T> attribute, T val) {
         if (LOG.isDebugEnabled()) LOG.debug("Mocks: item {} setting {} to {}", new Object[] {this, attribute, val});
-        return super.setAttribute(attribute, val);
+        return super.sensors().set(attribute, val);
     }
 
     @Override
@@ -84,7 +84,7 @@ public class MockItemEntityImpl extends AbstractEntity implements MockItemEntity
                     if (currentContainer != null) currentContainer.removeItem(MockItemEntityImpl.this);
                     currentContainer = destination;
                     destination.addItem(MockItemEntityImpl.this);
-                    setAttribute(CONTAINER, currentContainer);
+                    sensors().set(CONTAINER, currentContainer);
                 } finally {
                     _lock.unlock();
                 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/extra/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeSaltImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeSaltImpl.java b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeSaltImpl.java
index da93a1e..db505af 100644
--- a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeSaltImpl.java
+++ b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeSaltImpl.java
@@ -134,7 +134,7 @@ public class PostgreSqlNodeSaltImpl extends EffectorStartableImpl implements Pos
     }
 
     protected void connectSensors() {
-        setAttribute(DATASTORE_URL, String.format("postgresql://%s:%s/", getAttribute(HOSTNAME), getAttribute(POSTGRESQL_PORT)));
+        sensors().set(DATASTORE_URL, String.format("postgresql://%s:%s/", getAttribute(HOSTNAME), getAttribute(POSTGRESQL_PORT)));
 
         Location machine = Iterables.get(getLocations(), 0, null);
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltConfigs.java
----------------------------------------------------------------------
diff --git a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltConfigs.java b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltConfigs.java
index bfa98cb..4f7d610 100644
--- a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltConfigs.java
+++ b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltConfigs.java
@@ -46,7 +46,7 @@ public class SaltConfigs {
 
     public static void addToRunList(EntityInternal entity, String...states) {
         for (String state : states) {
-            entity.setConfig(SaltConfig.SALT_RUN_LIST, SetModifications.addItem(state));
+            entity.config().set(SaltConfig.SALT_RUN_LIST, SetModifications.addItem(state));
         }
     }
 
@@ -55,7 +55,7 @@ public class SaltConfigs {
     }
 
     public static void addToFormulas(EntityInternal entity, String formulaName, String formulaUrl) {
-        entity.setConfig(SaltConfig.SALT_FORMULAS.subKey(formulaName), formulaUrl);
+        entity.config().set(SaltConfig.SALT_FORMULAS.subKey(formulaName), formulaUrl);
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -65,7 +65,7 @@ public class SaltConfigs {
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public static void addLaunchAttributes(EntityInternal entity, Map<? extends Object,? extends Object> attributesMap) {
-        entity.setConfig(SaltConfig.SALT_LAUNCH_ATTRIBUTES, MapModifications.add((Map)attributesMap));
+        entity.config().set(SaltConfig.SALT_LAUNCH_ATTRIBUTES, MapModifications.add((Map)attributesMap));
     }
     
     /** replaces the attributes underneath the rootAttribute parameter with the given value;
@@ -77,7 +77,7 @@ public class SaltConfigs {
     /** replaces the attributes underneath the rootAttribute parameter with the given value;
      * see {@link #addLaunchAttributesMap(EntitySpec, Map)} for richer functionality */
     public static void setLaunchAttribute(EntityInternal entity, String rootAttribute, Object value) {
-        entity.setConfig(SaltConfig.SALT_LAUNCH_ATTRIBUTES.subKey(rootAttribute), value);
+        entity.config().set(SaltConfig.SALT_LAUNCH_ATTRIBUTES.subKey(rootAttribute), value);
     }
 
     public static <T> T getRequiredConfig(Entity entity, ConfigKey<T> key) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltLifecycleEffectorTasks.java b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltLifecycleEffectorTasks.java
index 5a404a1..6f3e4f5 100644
--- a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltLifecycleEffectorTasks.java
+++ b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltLifecycleEffectorTasks.java
@@ -133,7 +133,7 @@ public class SaltLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         }
 
         // and set the PID
-        entity().setAttribute(Attributes.PID,
+        entity().sensors().set(Attributes.PID,
                 Integer.parseInt(DynamicTasks.queue(SshEffectorTasks.ssh("cat "+pidFile).runAsRoot()).block().getStdout().trim()));
         return true;
     }
@@ -201,7 +201,7 @@ public class SaltLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         if (DynamicTasks.queue(SshEffectorTasks.isPidRunning(pid).runAsRoot()).get()) {
             throw new IllegalStateException("Process for "+entity()+" in "+pid+" still running after kill");
         }
-        entity().setAttribute(Attributes.PID, null);
+        entity().sensors().set(Attributes.PID, null);
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixFeed.java
----------------------------------------------------------------------
diff --git a/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixFeed.java b/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixFeed.java
index ef26e8c..9ee73b6 100644
--- a/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixFeed.java
+++ b/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixFeed.java
@@ -394,7 +394,7 @@ public class ZabbixFeed extends AbstractFeed {
                     String hostId = result.get("hostids").getAsJsonArray().get(0).getAsString();
                     // Update the registered status if not set
                     if (registered.compareAndSet(false, true)) {
-                        entity.setAttribute(ZabbixMonitored.ZABBIX_AGENT_HOSTID, hostId);
+                        entity.sensors().set(ZabbixMonitored.ZABBIX_AGENT_HOSTID, hostId);
                         log.info("zabbix registered host as id {}", hostId);
                     }
                 } else {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixServerImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixServerImpl.java b/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixServerImpl.java
index 9476673..708c6c1 100644
--- a/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixServerImpl.java
+++ b/sandbox/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/zabbix/ZabbixServerImpl.java
@@ -82,7 +82,7 @@ public class ZabbixServerImpl extends AbstractEntity implements ZabbixServer {
                         .onSuccess(HttpValueFunctions.jsonContents("result", String.class)))
                 .build();
 
-        policy = addPolicy(PolicySpec.create(AgentTrackingPolicy.class)
+        policy = policies().add(PolicySpec.create(AgentTrackingPolicy.class)
                 .displayName("Zabbix Agent Tracker")
                 .configure("group", monitoredEntities));
 
@@ -90,7 +90,7 @@ public class ZabbixServerImpl extends AbstractEntity implements ZabbixServer {
             added(each);
         }
 
-        setAttribute(Startable.SERVICE_UP, true);
+        sensors().set(Startable.SERVICE_UP, true);
     }
 
     public static class AgentTrackingPolicy extends AbstractMembershipTrackingPolicy {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastClusterImpl.java b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastClusterImpl.java
index 9b735ee..83cf15a 100644
--- a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastClusterImpl.java
+++ b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastClusterImpl.java
@@ -67,10 +67,10 @@ public class HazelcastClusterImpl extends DynamicClusterImpl implements Hazelcas
             if (LOG.isInfoEnabled()) {
                 LOG.info(this + " cluster password not provided for " + CLUSTER_PASSWORD.getName() + " : generating random password");
             }
-            setConfig(CLUSTER_PASSWORD, Strings.makeRandomId(12));
+            config().set(CLUSTER_PASSWORD, Strings.makeRandomId(12));
         }
         
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Hazelcast members tracker")
                 .configure("group", this));
     }
@@ -83,7 +83,7 @@ public class HazelcastClusterImpl extends DynamicClusterImpl implements Hazelcas
         @Override
         protected void onEntityAdded(Entity member) {
             if (member.getAttribute(HazelcastNode.NODE_NAME) == null) {
-                ((EntityInternal) member).setAttribute(HazelcastNode.NODE_NAME, "hazelcast-" + nextMemberId.incrementAndGet());
+                ((EntityInternal) member).sensors().set(HazelcastNode.NODE_NAME, "hazelcast-" + nextMemberId.incrementAndGet());
                 if (LOG.isInfoEnabled()) {
                     LOG.info("Node {} added to the cluster", member);
                 }
@@ -120,6 +120,6 @@ public class HazelcastClusterImpl extends DynamicClusterImpl implements Hazelcas
         for (Entity member : getMembers()) {
             clusterNodes.add(member.getAttribute(Attributes.ADDRESS));
         }
-        setAttribute(PUBLIC_CLUSTER_NODES, clusterNodes);
+        sensors().set(PUBLIC_CLUSTER_NODES, clusterNodes);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeImpl.java b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeImpl.java
index d618f0c..6e17737 100644
--- a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeImpl.java
+++ b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeImpl.java
@@ -56,7 +56,7 @@ public class HazelcastNodeImpl extends SoftwareProcessImpl implements HazelcastN
         HostAndPort hp = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, getNodePort());
 
         String nodeUri = String.format("http://%s:%d/hazelcast/rest/cluster", hp.getHostText(), hp.getPort());
-        setAttribute(Attributes.MAIN_URI, URI.create(nodeUri));
+        sensors().set(Attributes.MAIN_URI, URI.create(nodeUri));
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("Node {} is using {} as a main URI", this, nodeUri);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeSshDriver.java b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeSshDriver.java
index 3b664fe..2d67453 100644
--- a/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeSshDriver.java
+++ b/sandbox/nosql/src/main/java/org/apache/brooklyn/entity/nosql/hazelcast/HazelcastNodeSshDriver.java
@@ -87,7 +87,7 @@ public class HazelcastNodeSshDriver extends JavaSoftwareProcessSshDriver impleme
     @Override
     public void launch() {
         
-        entity.setAttribute(HazelcastNode.PID_FILE, Os.mergePathsUnix(getRunDir(), PID_FILENAME));
+        entity.sensors().set(HazelcastNode.PID_FILE, Os.mergePathsUnix(getRunDir(), PID_FILENAME));
         
         String maxHeapMemorySize = getHeapMemorySize();
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/sandbox/nosql/src/test/java/org/apache/brooklyn/entity/nosql/infinispan/Infinispan5ServerIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/sandbox/nosql/src/test/java/org/apache/brooklyn/entity/nosql/infinispan/Infinispan5ServerIntegrationTest.groovy b/sandbox/nosql/src/test/java/org/apache/brooklyn/entity/nosql/infinispan/Infinispan5ServerIntegrationTest.groovy
index 1e68c27..70d8f06 100644
--- a/sandbox/nosql/src/test/java/org/apache/brooklyn/entity/nosql/infinispan/Infinispan5ServerIntegrationTest.groovy
+++ b/sandbox/nosql/src/test/java/org/apache/brooklyn/entity/nosql/infinispan/Infinispan5ServerIntegrationTest.groovy
@@ -90,7 +90,7 @@ class Infinispan5ServerIntegrationTest {
         Application app = new TestApplicationImpl();
         try {
             final Infinispan5Server infini = new Infinispan5Server(parent:app)
-            infini.setConfig(Infinispan5Server.PORT.getConfigKey(), DEFAULT_PORT)
+            infini.config().set(Infinispan5Server.PORT.getConfigKey(), DEFAULT_PORT)
             infini.start([ new LocalhostMachineProvisioningLocation(name:'london') ])
             
             executeUntilSucceeds {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynClusterImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynClusterImpl.java
index 8a9543d..da42fe9 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynClusterImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynClusterImpl.java
@@ -63,7 +63,7 @@ public class BrooklynClusterImpl extends DynamicClusterImpl implements BrooklynC
                         .callable(new MasterChildFinder()))
                 .build());
         
-        addEnricher( Enrichers.builder().transforming(MASTER_NODE)
+        enrichers().add( Enrichers.builder().transforming(MASTER_NODE)
             .uniqueTag("master-node-web-uri")
             .publishing(BrooklynNode.WEB_CONSOLE_URI)
             .computing(EntityFunctions.attribute(BrooklynNode.WEB_CONSOLE_URI))

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
index 11d3baf..747aeab 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
@@ -56,7 +56,7 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
         public Map apply(HttpToolResponse input) {
             Map<?, ?> entitySummary = new Gson().fromJson(input.getContentAsString(), Map.class);
             String catalogItemId = (String)entitySummary.get("catalogItemId");
-            setAttribute(MIRROR_CATALOG_ITEM_ID, catalogItemId);
+            sensors().set(MIRROR_CATALOG_ITEM_ID, catalogItemId);
             return entitySummary;
         }
     }
@@ -74,7 +74,7 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
         connectSensorsAsync();
 
         //start spinning, could take some time before MIRRORED_ENTITY_URL is available for first time mirroring
-        setAttribute(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
+        sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
     }
 
     @Override
@@ -111,8 +111,8 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
             public Void apply(HttpToolResponse input) {
                 Map sensors = new Gson().fromJson(input.getContentAsString(), Map.class);
                 for (Object kv: sensors.entrySet())
-                    setAttribute(Sensors.newSensor(Object.class, ""+((Map.Entry)kv).getKey()), ((Map.Entry)kv).getValue());
-                setAttribute(MIRROR_STATUS, "normal");
+                    sensors().set(Sensors.newSensor(Object.class, ""+((Map.Entry)kv).getKey()), ((Map.Entry)kv).getValue());
+                sensors().set(MIRROR_STATUS, "normal");
                 return null;
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
index e21200d..9706676 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -473,7 +473,7 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
             // web-console is not enabled
             webConsoleUri = null;
         }
-        setAttribute(WEB_CONSOLE_URI, webConsoleUri);
+        sensors().set(WEB_CONSOLE_URI, webConsoleUri);
 
         if (webConsoleUri != null) {
             httpFeed = HttpFeed.builder()
@@ -498,7 +498,7 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
                 // TODO when updating the map, if it would change from empty to empty on a successful run (see in nginx)
                 ServiceNotUpLogic.updateNotUpIndicator(this, WEB_CONSOLE_ACCESSIBLE, "No response from the web console yet");
             }
-            addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+            enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                 .from(WEB_CONSOLE_ACCESSIBLE)
                 .computing(Functionals.ifNotEquals(true).value("URL where Brooklyn listens is not answering correctly") )
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/LocalBrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/LocalBrooklynNodeImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/LocalBrooklynNodeImpl.java
index 9f85ebe..7664d2b 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/LocalBrooklynNodeImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/LocalBrooklynNodeImpl.java
@@ -37,8 +37,8 @@ public class LocalBrooklynNodeImpl extends BrooklynNodeImpl implements LocalBroo
             password = (String) properties.get(String.format(BROOKLYN_WEBCONSOLE_PASSWORD_KEY, user));
         }
         if (Strings.isNonBlank(user) && Strings.isNonBlank(password)) {
-            setConfig(MANAGEMENT_USER, user);
-            setConfig(MANAGEMENT_PASSWORD, password);
+            config().set(MANAGEMENT_USER, user);
+            config().set(MANAGEMENT_PASSWORD, password);
         }
         super.connectSensors();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
index 19b5ce2..7687167 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
@@ -89,7 +89,7 @@ public class BrooklynClusterUpgradeEffectorBody extends EffectorBody<Void> imple
             newConfig.putAll(ConfigBag.newInstance(parameters.get(EXTRA_CONFIG)).getAllConfigAsConfigKeyMap());
             newMemberSpec.configure(newConfig.getAllConfigAsConfigKeyMap());
             
-            entity().setConfig(BrooklynCluster.MEMBER_SPEC, newMemberSpec);
+            entity().config().set(BrooklynCluster.MEMBER_SPEC, newMemberSpec);
             
             log.debug("Upgrading "+entity()+", new "+BrooklynCluster.MEMBER_SPEC+": "+newMemberSpec+" / "+newMemberSpec.getConfig()+" (adding: "+newConfig+")");
             
@@ -99,7 +99,7 @@ public class BrooklynClusterUpgradeEffectorBody extends EffectorBody<Void> imple
         } finally {
             if (!success) {
                 log.debug("Upgrading "+entity()+" failed, will rethrow after restoring "+BrooklynCluster.MEMBER_SPEC+" to: "+origMemberSpec);
-                entity().setConfig(BrooklynCluster.MEMBER_SPEC, origMemberSpec);
+                entity().config().set(BrooklynCluster.MEMBER_SPEC, origMemberSpec);
             }
             
             upgradeInProgress.set(false);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
index 12ca603..021da69 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
@@ -143,10 +143,10 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> {
             @Override
             public void run() {
                 DynamicTasks.waitForLast();
-                ((EntityInternal)entity()).setAttribute(SoftwareProcess.INSTALL_DIR, (String)null);
-                entity().setConfig(SoftwareProcess.INSTALL_UNIQUE_LABEL, (String)null);
+                ((EntityInternal)entity()).sensors().set(SoftwareProcess.INSTALL_DIR, (String)null);
+                entity().config().set(SoftwareProcess.INSTALL_UNIQUE_LABEL, (String)null);
                 entity().getConfigMap().addToLocalBag(parameters.getAllConfig());
-                entity().setAttribute(BrooklynNode.DOWNLOAD_URL, entity().getConfig(DOWNLOAD_URL));
+                entity().sensors().set(BrooklynNode.DOWNLOAD_URL, entity().getConfig(DOWNLOAD_URL));
 
                 // Setting SUGGESTED_VERSION will result in an new empty INSTALL_FOLDER, but clear it
                 // just in case the user specified already installed version.
@@ -178,7 +178,7 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> {
         if (Strings.isBlank(launchParameters)) launchParameters = "";
         else launchParameters += " ";
         launchParameters += "--highAvailability "+HighAvailabilityMode.HOT_STANDBY;
-        ((EntityInternal)dryRunChild).setConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS, launchParameters);
+        ((EntityInternal)dryRunChild).config().set(BrooklynNode.EXTRA_LAUNCH_PARAMETERS, launchParameters);
 
         Entities.manage(dryRunChild);
         final String dryRunNodeUid = dryRunChild.getId();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefAttributeFeed.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefAttributeFeed.java b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefAttributeFeed.java
index 1078d90..d26faa5 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefAttributeFeed.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefAttributeFeed.java
@@ -352,13 +352,13 @@ public class ChefAttributeFeed extends AbstractFeed {
                     }
                 }
                 if (elementForSensor != null) {
-                    entity.setAttribute((AttributeSensor)sensor, TypeCoercions.coerce(elementForSensor.getAsString(), sensor.getTypeToken()));
+                    entity.sensors().set((AttributeSensor)sensor, TypeCoercions.coerce(elementForSensor.getAsString(), sensor.getTypeToken()));
                 } else {
                     log.debug("Entity {}: no Chef attribute matching {}; setting sensor {} to null", new Object[]{
                             entity.getDisplayName(),
                             chefAttributeName,
                             sensor.getName()});
-                    entity.setAttribute(sensor, null);
+                    entity.sensors().set(sensor, null);
                 }
             }
         }
@@ -383,7 +383,7 @@ public class ChefAttributeFeed extends AbstractFeed {
             for (AttributeSensor<?> attribute : chefAttributeSensors.values()) {
                 if (!attribute.getName().startsWith(CHEF_ATTRIBUTE_PREFIX))
                     continue;
-                entity.setAttribute(attribute, null);
+                entity.sensors().set(attribute, null);
             }
         }
 
@@ -393,7 +393,7 @@ public class ChefAttributeFeed extends AbstractFeed {
             for (AttributeSensor<?> attribute : chefAttributeSensors.values()) {
                 if (!attribute.getName().startsWith(CHEF_ATTRIBUTE_PREFIX))
                     continue;
-                entity.setAttribute(attribute, null);
+                entity.sensors().set(attribute, null);
             }
         }
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefConfigs.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefConfigs.java b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefConfigs.java
index 37d89f8..16d5fa0 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefConfigs.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefConfigs.java
@@ -43,7 +43,7 @@ public class ChefConfigs {
 
     public static void addToLaunchRunList(EntityInternal entity, String ...recipes) {
         for (String recipe: recipes)
-            entity.setConfig(ChefConfig.CHEF_LAUNCH_RUN_LIST, SetModifications.addItem(recipe));
+            entity.config().set(ChefConfig.CHEF_LAUNCH_RUN_LIST, SetModifications.addItem(recipe));
     }
 
     public static void addToCookbooksFromGithub(EntitySpec<?> entity, String ...cookbookNames) {
@@ -68,7 +68,7 @@ public class ChefConfigs {
     }
 
     public static void addToCookbooksFromGithub(EntityInternal entity, String cookbookName, String cookbookUrl) {
-        entity.setConfig(ChefConfig.CHEF_COOKBOOK_URLS.subKey(cookbookName), cookbookUrl);
+        entity.config().set(ChefConfig.CHEF_COOKBOOK_URLS.subKey(cookbookName), cookbookUrl);
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -78,7 +78,7 @@ public class ChefConfigs {
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public static void addLaunchAttributes(EntityInternal entity, Map<? extends Object,? extends Object> attributesMap) {
-        entity.setConfig(ChefConfig.CHEF_LAUNCH_ATTRIBUTES, MapModifications.add((Map)attributesMap));
+        entity.config().set(ChefConfig.CHEF_LAUNCH_ATTRIBUTES, MapModifications.add((Map)attributesMap));
     }
     
     /** replaces the attributes underneath the rootAttribute parameter with the given value;
@@ -90,7 +90,7 @@ public class ChefConfigs {
     /** replaces the attributes underneath the rootAttribute parameter with the given value;
      * see {@link #addLaunchAttributesMap(EntitySpec, Map)} for richer functionality */
     public static void setLaunchAttribute(EntityInternal entity, String rootAttribute, Object value) {
-        entity.setConfig(ChefConfig.CHEF_LAUNCH_ATTRIBUTES.subKey(rootAttribute), value);
+        entity.config().set(ChefConfig.CHEF_LAUNCH_ATTRIBUTES.subKey(rootAttribute), value);
     }
 
     public static <T> T getRequiredConfig(Entity entity, ConfigKey<T> key) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
index 869d34d..57c54bf 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
@@ -243,7 +243,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         if (!result) {
             log.warn("No way to check whether "+entity()+" is running; assuming yes");
         }
-        entity().setAttribute(SoftwareProcess.SERVICE_UP, true);
+        entity().sensors().set(SoftwareProcess.SERVICE_UP, true);
     }
     
     protected boolean tryCheckStartPid() {
@@ -256,7 +256,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         }
 
         // and set the PID
-        entity().setAttribute(Attributes.PID, 
+        entity().sensors().set(Attributes.PID, 
                 Integer.parseInt(DynamicTasks.queue(SshEffectorTasks.ssh("cat "+getPidFile()).runAsRoot()).block().getStdout().trim()));
         return true;
     }
@@ -353,7 +353,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         if (DynamicTasks.queue(SshEffectorTasks.isPidRunning(pid).runAsRoot()).get()) {
             throw new IllegalStateException("Process for "+entity()+" in "+pid+" still running after kill");
         }
-        entity().setAttribute(Attributes.PID, null);
+        entity().sensors().set(Attributes.PID, null);
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java
index 9656878..ef161ea 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java
@@ -94,10 +94,10 @@ public class JavaAppUtils {
     }
 
     public static void connectJavaAppServerPolicies(EntityLocal entity, Duration windowPeriod) {
-        entity.addEnricher(new TimeFractionDeltaEnricher<Double>(entity, UsesJavaMXBeans.PROCESS_CPU_TIME, 
+        entity.enrichers().add(new TimeFractionDeltaEnricher<Double>(entity, UsesJavaMXBeans.PROCESS_CPU_TIME, 
                 UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_LAST, TimeUnit.MILLISECONDS));
 
-        entity.addEnricher(new RollingTimeWindowMeanEnricher<Double>(entity,
+        entity.enrichers().add(new RollingTimeWindowMeanEnricher<Double>(entity,
                 UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_LAST, UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_IN_WINDOW,
                 windowPeriod));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
index c5720ca..fe335cd 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
@@ -78,7 +78,7 @@ public abstract class JavaSoftwareProcessSshDriver extends AbstractSoftwareProce
     public JavaSoftwareProcessSshDriver(EntityLocal entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
     }
 
     protected abstract String getLogFileLocation();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxSupport.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxSupport.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxSupport.java
index f633f3c..86c211e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxSupport.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxSupport.java
@@ -88,7 +88,7 @@ public class JmxSupport implements UsesJmx {
     }
 
     <T> void setConfig(ConfigKey<T> key, T value) {
-        ((EntityLocal)getEntity()).setConfig(key, value);
+        ((EntityLocal)getEntity()).config().set(key, value);
     }
 
     public Maybe<SshMachineLocation> getMachine() {
@@ -141,7 +141,7 @@ public class JmxSupport implements UsesJmx {
                 }
             }
 
-            ((EntityLocal)entity).setConfig(JMX_AGENT_MODE, jmxAgentMode);
+            ((EntityLocal)entity).config().set(JMX_AGENT_MODE, jmxAgentMode);
         }
 
         if (isSecure && jmxAgentMode!=JmxAgentModes.JMXMP) {
@@ -152,7 +152,7 @@ public class JmxSupport implements UsesJmx {
     }
 
     public void setJmxUrl() {
-        ((EntityInternal)entity).setAttribute(JMX_URL, getJmxUrl());
+        ((EntityInternal)entity).sensors().set(JMX_URL, getJmxUrl());
     }
 
     public String getJmxUrl() {
@@ -189,13 +189,13 @@ public class JmxSupport implements UsesJmx {
                     log.warn("Ignoring JMX_PORT "+jmxRemotePort+" when configuring agentless JMX on "+getEntity()+"; will use RMI_REGISTRY_PORT "+rmiRegistryPort);
                 }
                 jmxRemotePort = rmiRegistryPort;
-                ((EntityLocal)getEntity()).setAttribute(JMX_PORT, jmxRemotePort);
+                ((EntityLocal)getEntity()).sensors().set(JMX_PORT, jmxRemotePort);
             }
         } else {
             if (jmxRemotePort==null || jmxRemotePort<=0) {
                 throw new IllegalStateException("Invalid JMX_PORT "+jmxRemotePort+" and RMI_REGISTRY_PORT "+rmiRegistryPort+" when configuring JMX "+getJmxAgentMode()+" on "+getEntity());
             }
-            ((EntityLocal)getEntity()).setAttribute(RMI_REGISTRY_PORT, jmxRemotePort);
+            ((EntityLocal)getEntity()).sensors().set(RMI_REGISTRY_PORT, jmxRemotePort);
         }
         return jmxRemotePort;
     }
@@ -213,7 +213,7 @@ public class JmxSupport implements UsesJmx {
         String result = getEntity().getAttribute(JMX_AGENT_LOCAL_PATH);
         if (Strings.isNonBlank(result)) return result;
         result = getJmxAgentJarDestinationFilePathDefault();
-        ((EntityInternal)getEntity()).setAttribute(JMX_AGENT_LOCAL_PATH, result);
+        ((EntityInternal)getEntity()).sensors().set(JMX_AGENT_LOCAL_PATH, result);
         return result;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppImpl.java
index 90da4a9..21865f3 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppImpl.java
@@ -63,7 +63,7 @@ public class VanillaJavaAppImpl extends SoftwareProcessImpl implements VanillaJa
         List<String> newCP = new ArrayList<String>();
         if (cp!=null) newCP.addAll(cp);
         newCP.add(url);
-        setConfig(CLASSPATH, newCP);
+        config().set(CLASSPATH, newCP);
     }
 
     public void addToClasspath(Collection<String> urls) {
@@ -71,7 +71,7 @@ public class VanillaJavaAppImpl extends SoftwareProcessImpl implements VanillaJa
         List<String> newCP = new ArrayList<String>();
         if (cp!=null) newCP.addAll(cp);
         newCP.addAll(urls);
-        setConfig(CLASSPATH, newCP);
+        config().set(CLASSPATH, newCP);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppSshDriver.java
index 2fd57b3..5aa996c 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/VanillaJavaAppSshDriver.java
@@ -111,7 +111,7 @@ public class VanillaJavaAppSshDriver extends JavaSoftwareProcessSshDriver implem
 
         // Transform stdout into list of files in classpath
         if (Strings.isBlank(stdout)) {
-            getEntity().setAttribute(VanillaJavaApp.CLASSPATH_FILES, ImmutableList.of(Os.mergePaths(getRunDir(), "lib")));
+            getEntity().sensors().set(VanillaJavaApp.CLASSPATH_FILES, ImmutableList.of(Os.mergePaths(getRunDir(), "lib")));
         } else {
             // FIXME Cannot handle spaces in paths properly
             Iterable<String> lines = Splitter.on(CharMatcher.BREAKING_WHITESPACE).omitEmptyStrings().trimResults().split(stdout);
@@ -121,7 +121,7 @@ public class VanillaJavaAppSshDriver extends JavaSoftwareProcessSshDriver implem
                             return Os.mergePathsUnix(getRunDir(), "lib", input);
                         }
                     });
-            getEntity().setAttribute(VanillaJavaApp.CLASSPATH_FILES, ImmutableList.copyOf(files));
+            getEntity().sensors().set(VanillaJavaApp.CLASSPATH_FILES, ImmutableList.copyOf(files));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
index c7696e4..6b0792d 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
@@ -107,10 +107,10 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
     @Override
     public void init() {
         super.init();
-        setAttribute(AVAILABLE_COUNT, 0);
-        setAttribute(CLAIMED_COUNT, 0);
-        setAttribute(ENTITY_MACHINE, Maps.<Entity, MachineLocation>newHashMap());
-        setAttribute(MACHINE_ENTITY, Maps.<MachineLocation, Entity>newHashMap());
+        sensors().set(AVAILABLE_COUNT, 0);
+        sensors().set(CLAIMED_COUNT, 0);
+        sensors().set(ENTITY_MACHINE, Maps.<Entity, MachineLocation>newHashMap());
+        sensors().set(MACHINE_ENTITY, Maps.<MachineLocation, Entity>newHashMap());
     }
 
     @Override
@@ -135,15 +135,15 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
         super.stop();
         deleteLocation();
         synchronized (mutex) {
-            setAttribute(AVAILABLE_COUNT, 0);
-            setAttribute(CLAIMED_COUNT, 0);
-            getAttribute(ENTITY_MACHINE).clear();
-            getAttribute(MACHINE_ENTITY).clear();
+            sensors().set(AVAILABLE_COUNT, 0);
+            sensors().set(CLAIMED_COUNT, 0);
+            sensors().get(ENTITY_MACHINE).clear();
+            sensors().get(MACHINE_ENTITY).clear();
         }
     }
 
     private void addMembershipTrackerPolicy() {
-        membershipTracker = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        membershipTracker = policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName(getDisplayName() + " membership tracker")
                 .configure("group", this));
     }
@@ -175,10 +175,10 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
         Location location = getManagementContext().getLocationRegistry().resolve(definition);
         LOG.info("Resolved and registered dynamic location {}: {}", locationName, location);
 
-        setAttribute(LOCATION_SPEC, locationSpec);
-        setAttribute(DYNAMIC_LOCATION, location);
-        setAttribute(LOCATION_NAME, location.getId());
-        setAttribute(DYNAMIC_LOCATION_DEFINITION, definition);
+        sensors().set(LOCATION_SPEC, locationSpec);
+        sensors().set(DYNAMIC_LOCATION, location);
+        sensors().set(LOCATION_NAME, location.getId());
+        sensors().set(DYNAMIC_LOCATION_DEFINITION, definition);
 
         return (ServerPoolLocation) location;
     }
@@ -197,10 +197,10 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
             LOG.debug("{} unregistering dynamic location {}", this, definition);
             getManagementContext().getLocationRegistry().removeDefinedLocation(definition.getId());
         }
-        setAttribute(LOCATION_SPEC, null);
-        setAttribute(DYNAMIC_LOCATION, null);
-        setAttribute(LOCATION_NAME, null);
-        setAttribute(DYNAMIC_LOCATION_DEFINITION, null);
+        sensors().set(LOCATION_SPEC, null);
+        sensors().set(DYNAMIC_LOCATION, null);
+        sensors().set(LOCATION_NAME, null);
+        sensors().set(DYNAMIC_LOCATION_DEFINITION, null);
     }
 
     @Override
@@ -371,7 +371,7 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
     }
 
     private void setEntityStatus(Entity entity, MachinePoolMemberStatus status) {
-        ((EntityInternal) entity).setAttribute(SERVER_STATUS, status);
+        ((EntityInternal) entity).sensors().set(SERVER_STATUS, status);
     }
 
     private Optional<Entity> getMemberWithStatus(MachinePoolMemberStatus status) {
@@ -409,8 +409,8 @@ public class ServerPoolImpl extends DynamicClusterImpl implements ServerPool {
                     claimed++;
                 }
             }
-            setAttribute(AVAILABLE_COUNT, available);
-            setAttribute(CLAIMED_COUNT, claimed);
+            sensors().set(AVAILABLE_COUNT, available);
+            sensors().set(CLAIMED_COUNT, claimed);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
index 6b0e4a8..240f161 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
@@ -113,7 +113,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
     protected void setInstallDir(String installDir) {
         this.installDir = installDir;
-        entity.setAttribute(SoftwareProcess.INSTALL_DIR, installDir);
+        entity.sensors().set(SoftwareProcess.INSTALL_DIR, installDir);
     }
 
     public String getInstallDir() {
@@ -150,7 +150,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
     protected void setInstallLabel() {
         if (getEntity().getConfigRaw(SoftwareProcess.INSTALL_UNIQUE_LABEL, false).isPresentAndNonNull()) return;
-        getEntity().setConfig(SoftwareProcess.INSTALL_UNIQUE_LABEL,
+        getEntity().config().set(SoftwareProcess.INSTALL_UNIQUE_LABEL,
             getEntity().getEntityType().getSimpleName()+
             (Strings.isNonBlank(getVersion()) ? "_"+getVersion() : "")+
             (Strings.isNonBlank(getInstallLabelExtraSalt()) ? "_"+getInstallLabelExtraSalt() : "") );
@@ -169,7 +169,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
     protected void setRunDir(String runDir) {
         this.runDir = runDir;
-        entity.setAttribute(SoftwareProcess.RUN_DIR, runDir);
+        entity.sensors().set(SoftwareProcess.RUN_DIR, runDir);
     }
 
     public String getRunDir() {
@@ -189,7 +189,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
                 log.warn("Using legacy 'brooklyn.dirs.run' setting for "+entity+"; may be removed in future versions.");
                 runDir = Os.mergePathsUnix(runBasedir, entity.getApplication().getId()+"/"+"entities"+"/"+getEntityVersionLabel()+"_"+entity.getId());
                 runDir = Os.tidyPath(runDir);
-                getEntity().setAttribute(SoftwareProcess.RUN_DIR, runDir);
+                getEntity().sensors().set(SoftwareProcess.RUN_DIR, runDir);
                 return runDir;
             }
         }
@@ -205,7 +205,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
         }
 
         expandedInstallDir = val;
-        getEntity().setAttribute(SoftwareProcess.EXPANDED_INSTALL_DIR, val);
+        getEntity().sensors().set(SoftwareProcess.EXPANDED_INSTALL_DIR, val);
     }
 
     public String getExpandedInstallDir() {
@@ -574,7 +574,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
             String pidFile = (usePidFile instanceof CharSequence ? usePidFile : Os.mergePathsUnix(getRunDir(), PID_FILENAME)).toString();
             String processOwner = (String) flags.get(PROCESS_OWNER);
             if (LAUNCHING.equals(phase)) {
-                entity.setAttribute(SoftwareProcess.PID_FILE, pidFile);
+                entity.sensors().set(SoftwareProcess.PID_FILE, pidFile);
                 s.footer.prepend("echo $! > "+pidFile);
             } else if (CHECK_RUNNING.equals(phase)) {
                 // old method, for supplied service, or entity.id

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
index 8e3ea37..4b3da76 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
@@ -63,8 +63,8 @@ public abstract class AbstractSoftwareProcessWinRmDriver extends AbstractSoftwar
 
     public AbstractSoftwareProcessWinRmDriver(EntityLocal entity, WinRmMachineLocation location) {
         super(entity, location);
-        entity.setAttribute(WINDOWS_USERNAME, location.config().get(WinRmMachineLocation.USER));
-        entity.setAttribute(WINDOWS_PASSWORD, location.config().get(WinRmMachineLocation.PASSWORD));
+        entity.sensors().set(WINDOWS_USERNAME, location.config().get(WinRmMachineLocation.USER));
+        entity.sensors().set(WINDOWS_PASSWORD, location.config().get(WinRmMachineLocation.PASSWORD));
     }
 
     /** @see #newScript(Map, String) */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
index 600ab77..c24201a 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
@@ -44,7 +44,7 @@ public class SameServerEntityImpl extends AbstractEntity implements SameServerEn
         
         // Because can have multiple children (similar to groups/clusters/apps), need to
         // monitor their health and indicate this has failed if any of them have failed.
-        addEnricher(ServiceStateLogic.newEnricherFromChildren()
+        enrichers().add(ServiceStateLogic.newEnricherFromChildren()
                 .configure(ComputeServiceIndicatorsFromChildrenAndMembers.UP_QUORUM_CHECK, QuorumCheck.QuorumChecks.all()));
     }