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

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

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master bdcc5ced6 -> 44755eb12


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
index 2956478..cfc8ae1 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
@@ -161,8 +161,8 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
                 "- type: "+CatalogUtils.getVersionedId(appSymbolicName, appVersion);
         origApp = (StartableApplication) createAndStartApplication(yaml);
         BasicEntity origEntity = (BasicEntity) Iterables.getOnlyElement(origApp.getChildren());
-        TestPolicy origPolicy = (TestPolicy) Iterables.getOnlyElement(origEntity.getPolicies());
-        TestEnricher origEnricher = (TestEnricher) Iterables.tryFind(origEntity.getEnrichers(), Predicates.instanceOf(TestEnricher.class)).get();
+        TestPolicy origPolicy = (TestPolicy) Iterables.getOnlyElement(origEntity.policies());
+        TestEnricher origEnricher = (TestEnricher) Iterables.tryFind(origEntity.enrichers(), Predicates.instanceOf(TestEnricher.class)).get();
         assertEquals(origEntity.getCatalogItemId(), appSymbolicName+":"+appVersion);
 
         // Depending on test-mode, delete the catalog item, and then rebind
@@ -223,8 +223,8 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
 
         // Ensure app is still there, and that it is usabe - e.g. "stop" effector functions as expected
         BasicEntity newEntity = (BasicEntity) Iterables.getOnlyElement(newApp.getChildren());
-        Policy newPolicy = Iterables.getOnlyElement(newEntity.getPolicies());
-        Enricher newEnricher = Iterables.tryFind(newEntity.getEnrichers(), Predicates.instanceOf(TestEnricher.class)).get();
+        Policy newPolicy = Iterables.getOnlyElement(newEntity.policies());
+        Enricher newEnricher = Iterables.tryFind(newEntity.enrichers(), Predicates.instanceOf(TestEnricher.class)).get();
         assertEquals(newEntity.getCatalogItemId(), appSymbolicName+":"+appVersion);
 
         newApp.stop();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
index 1f3eb8e..c3c94bc 100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
@@ -111,7 +111,7 @@ public class BrooklynEntityMirrorIntegrationTest {
         
         String catalogItemId = "test-catalog-item:1.0";
         String catalogItemIdGA = "test-catalog-item:1.0-GA";
-        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria");
+        serverApp.sensors().set(TestApplication.MY_ATTRIBUTE, "austria");
         serverApp.setCatalogItemId(catalogItemId);
 
         String serviceId = serverApp.getId();
@@ -127,7 +127,7 @@ public class BrooklynEntityMirrorIntegrationTest {
         assertTrue(mirror.getAttribute(BrooklynEntityMirror.MIRROR_SUMMARY) != null, "entity summary is null");
         log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes());
         
-        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda");
+        serverApp.sensors().set(TestApplication.MY_ATTRIBUTE, "bermuda");
         serverApp.setCatalogItemId(catalogItemIdGA);
         EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda");
         EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemIdGA);
@@ -148,7 +148,7 @@ public class BrooklynEntityMirrorIntegrationTest {
         // check auth is required
         HttpTestUtils.assertHttpStatusCodeEquals(getBaseUri(), 401);
         
-        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria");
+        serverApp.sensors().set(TestApplication.MY_ATTRIBUTE, "austria");
 
         String serviceId = serverApp.getId();
         Entity mirror = localApp.addChild(EntitySpec.create(BrooklynEntityMirror.class)
@@ -163,7 +163,7 @@ public class BrooklynEntityMirrorIntegrationTest {
         EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "austria");
         log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes());
         
-        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda");
+        serverApp.sensors().set(TestApplication.MY_ATTRIBUTE, "bermuda");
         EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda");
 
         serverApp.stop();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
index e6e3fbb..37b45c3 100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
@@ -109,7 +109,7 @@ public class BrooklynNodeRestTest {
             
             EntityTestUtils.assertAttributeEqualsEventually(mirror, Attributes.SERVICE_UP, true);
             
-            ((EntityInternal)newApp).setAttribute(TestEntity.NAME, "foo");
+            ((EntityInternal)newApp).sensors().set(TestEntity.NAME, "foo");
             EntityTestUtils.assertAttributeEqualsEventually(mirror, TestEntity.NAME, "foo");
             log.info("Mirror successfully validated");
             

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
index a050fd8..ed00f61 100644
--- a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
+++ b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
@@ -106,11 +106,11 @@ public class SimulatedJBoss7ServerImpl extends JBoss7ServerImpl {
 
         String managementUri = String.format("http://%s:%s/management/subsystem/web/connector/http/read-resource",
                 hp.getHostText(), hp.getPort());
-        setAttribute(MANAGEMENT_URL, managementUri);
+        sensors().set(MANAGEMENT_URL, managementUri);
 
         if (simulateExternalMonitoring) {
             // TODO What would set this normally, if not doing connectServiceUpIsRunning?
-            setAttribute(SERVICE_PROCESS_IS_RUNNING, true);
+            sensors().set(SERVICE_PROCESS_IS_RUNNING, true);
         } else {
             // if simulating entity, then simulate work of periodic HTTP request; TODO but not parsing JSON response
             String uriToPoll = (simulateEntity) ? "http://localhost:8081" : managementUri;
@@ -135,17 +135,17 @@ public class SimulatedJBoss7ServerImpl extends JBoss7ServerImpl {
                         .callable(new Callable<Boolean>() {
                             private int counter = 0;
                             public Boolean call() {
-                                setAttribute(REQUEST_COUNT, (counter++ % 100));
-                                setAttribute(ERROR_COUNT, (counter++ % 100));
-                                setAttribute(TOTAL_PROCESSING_TIME, (counter++ % 100));
-                                setAttribute(MAX_PROCESSING_TIME, (counter++ % 100));
-                                setAttribute(BYTES_RECEIVED, (long) (counter++ % 100));
-                                setAttribute(BYTES_SENT, (long) (counter++ % 100));
+                                sensors().set(REQUEST_COUNT, (counter++ % 100));
+                                sensors().set(ERROR_COUNT, (counter++ % 100));
+                                sensors().set(TOTAL_PROCESSING_TIME, (counter++ % 100));
+                                sensors().set(MAX_PROCESSING_TIME, (counter++ % 100));
+                                sensors().set(BYTES_RECEIVED, (long) (counter++ % 100));
+                                sensors().set(BYTES_SENT, (long) (counter++ % 100));
                                 return true;
                             }}))
                 .build();
         
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                 .from(MANAGEMENT_URL_UP)
                 .computing(Functionals.ifNotEquals(true).value("Management URL not reachable") )
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
index 30da612..4560050 100644
--- a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
+++ b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
@@ -57,7 +57,7 @@ public class SimulatedMySqlNodeImpl extends MySqlNodeImpl {
     protected void connectSensors() {
         boolean simulateExternalMonitoring = getConfig(SIMULATE_EXTERNAL_MONITORING);
         if (simulateExternalMonitoring) {
-            setAttribute(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MYSQL_PORT)));
+            sensors().set(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MYSQL_PORT)));
             
             feed = FunctionFeed.builder()
                     .entity(this)
@@ -66,7 +66,7 @@ public class SimulatedMySqlNodeImpl extends MySqlNodeImpl {
                             .callable(new Callable<Boolean>() {
                                 private int counter = 0;
                                 public Boolean call() {
-                                    setAttribute(QUERIES_PER_SECOND_FROM_MYSQL, (double)(counter++ % 100));
+                                    sensors().set(QUERIES_PER_SECOND_FROM_MYSQL, (double)(counter++ % 100));
                                     return true;
                                 }})
                             .setOnFailureOrException(false))
@@ -154,7 +154,7 @@ public class SimulatedMySqlNodeImpl extends MySqlNodeImpl {
                 return;
             }
             
-            entity.setAttribute(MySqlNode.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
+            entity.sensors().set(MySqlNode.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
             
             if (entity.getConfig(SKIP_SSH_ON_START)) {
                 // minimal ssh, so that isRunning will subsequently work

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
index d57bf63..c75c8ab 100644
--- a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
+++ b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
@@ -72,8 +72,8 @@ public class SimulatedNginxControllerImpl extends NginxControllerImpl {
 
         // From AbstractController.connectSensors
         if (getUrl()==null) {
-            setAttribute(MAIN_URI, URI.create(inferUrl()));
-            setAttribute(ROOT_URL, inferUrl());
+            sensors().set(MAIN_URI, URI.create(inferUrl()));
+            sensors().set(ROOT_URL, inferUrl());
         }
         addServerPoolMemberTrackingPolicy();
 
@@ -108,14 +108,14 @@ public class SimulatedNginxControllerImpl extends NginxControllerImpl {
         Group urlMappings = getConfig(URL_MAPPINGS);
         if (urlMappings != null) {
             // Listen to the targets of each url-mapping changing
-            subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
+            subscriptions().subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
                     @Override public void onEvent(SensorEvent<Collection<String>> event) {
                         updateNeeded();
                     }
                 });
 
             // Listen to url-mappings being added and removed
-            urlMappingsMemberTrackerPolicy = addPolicy(PolicySpec.create(UrlMappingsMemberTrackerPolicy.class)
+            urlMappingsMemberTrackerPolicy = policies().add(PolicySpec.create(UrlMappingsMemberTrackerPolicy.class)
                     .configure("group", urlMappings));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedTheeTierApp.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedTheeTierApp.java b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedTheeTierApp.java
index 80daba7..0e41beb 100644
--- a/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedTheeTierApp.java
+++ b/usage/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedTheeTierApp.java
@@ -99,20 +99,20 @@ public class SimulatedTheeTierApp extends AbstractApplication {
                         .configure(DynamicCluster.INITIAL_SIZE, 2)
                         .configure(WebAppService.ENABLED_PROTOCOLS, ImmutableSet.of(USE_HTTPS ? "https" : "http")) );
 
-        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(Attributes.MAIN_URI, 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()
                 .aggregating(Startable.SERVICE_UP)
                 .publishing(Startable.SERVICE_UP)
                 .fromHardcodedProducers(ImmutableList.of(web, mysql))

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java b/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
index 7559420..a8dd8da 100644
--- a/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
+++ b/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
@@ -72,7 +72,7 @@ public class SinusoidalLoadGenerator extends AbstractEnricher {
                 try {
                     long time = System.currentTimeMillis();
                     double val = getRequiredConfig(SIN_AMPLITUDE) * (1 + Math.sin( (1.0*time) / getRequiredConfig(SIN_PERIOD_MS) * Math.PI * 2  - Math.PI/2 )) / 2;
-                    entity.setAttribute(getRequiredConfig(TARGET), val);
+                    entity.sensors().set(getRequiredConfig(TARGET), val);
                 } catch (Throwable t) {
                     LOG.warn("Error generating sinusoidal-load metric", t);
                     throw Throwables.propagate(t);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/WebClusterApp.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/WebClusterApp.java b/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/WebClusterApp.java
index 31f5060..7c11803 100644
--- a/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/WebClusterApp.java
+++ b/usage/qa/src/test/java/org/apache/brooklyn/qa/longevity/webcluster/WebClusterApp.java
@@ -72,13 +72,13 @@ public class WebClusterApp extends AbstractApplication {
                 .configure("initialSize", 1)
                 .configure("memberSpec", jbossSpec));
 
-        web.getCluster().addEnricher(Enrichers.builder()
+        web.getCluster().enrichers().add(Enrichers.builder()
                 .aggregating(sinusoidalLoad)
                 .publishing(averageLoad)
                 .fromMembers()
                 .computingAverage()
                 .build());
-        web.getCluster().addPolicy(AutoScalerPolicy.builder()
+        web.getCluster().policies().add(AutoScalerPolicy.builder()
                 .metric(averageLoad)
                 .sizeRange(1, 3)
                 .metricRange(0.3, 0.7)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyResource.java
index f933142..7ec0b22 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyResource.java
@@ -23,10 +23,7 @@ import java.util.Map;
 
 import javax.ws.rs.core.Response;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
 import org.apache.brooklyn.core.policy.Policies;
@@ -39,6 +36,8 @@ import org.apache.brooklyn.rest.transform.ApplicationTransformer;
 import org.apache.brooklyn.rest.transform.PolicyTransformer;
 import org.apache.brooklyn.rest.util.WebResourceUtils;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Function;
 import com.google.common.collect.FluentIterable;
@@ -52,7 +51,7 @@ public class PolicyResource extends AbstractBrooklynRestResource implements Poli
     @Override
     public List<PolicySummary> list( final String application, final String entityToken) {
         final Entity entity = brooklyn().getEntity(application, entityToken);
-        return FluentIterable.from(entity.getPolicies())
+        return FluentIterable.from(entity.policies())
             .transform(new Function<Policy, PolicySummary>() {
                 @Override
                 public PolicySummary apply(Policy policy) {
@@ -67,9 +66,9 @@ public class PolicyResource extends AbstractBrooklynRestResource implements Poli
     @Override
     public Map<String, Boolean> batchConfigRead( String application, String entityToken) {
         // TODO: add test
-        EntityLocal entity = brooklyn().getEntity(application, entityToken);
+        Entity entity = brooklyn().getEntity(application, entityToken);
         Map<String, Boolean> result = Maps.newLinkedHashMap();
-        for (Policy p : entity.getPolicies()) {
+        for (Policy p : entity.policies()) {
             result.put(p.getId(), !p.isSuspended());
         }
         return result;
@@ -80,7 +79,7 @@ public class PolicyResource extends AbstractBrooklynRestResource implements Poli
     @Override
     public PolicySummary addPolicy( String application,String entityToken, String policyTypeName,
             Map<String, String> config) {
-        EntityLocal entity = brooklyn().getEntity(application, entityToken);
+        Entity entity = brooklyn().getEntity(application, entityToken);
         Class<? extends Policy> policyType;
         try {
             policyType = (Class<? extends Policy>) Class.forName(policyTypeName);
@@ -92,7 +91,7 @@ public class PolicyResource extends AbstractBrooklynRestResource implements Poli
             throw Exceptions.propagate(e);
         }
 
-        Policy policy = entity.addPolicy(PolicySpec.create(policyType).configure(config));
+        Policy policy = entity.policies().add(PolicySpec.create(policyType).configure(config));
         log.debug("REST API added policy " + policy + " to " + entity);
 
         return PolicyTransformer.policySummary(entity, policy);
@@ -122,11 +121,11 @@ public class PolicyResource extends AbstractBrooklynRestResource implements Poli
 
     @Override
     public Response destroy(String application, String entityToken, String policyToken) {
-        EntityLocal entity = brooklyn().getEntity(application, entityToken);
+        Entity entity = brooklyn().getEntity(application, entityToken);
         Policy policy = brooklyn().getPolicy(entity, policyToken);
 
         policy.suspend();
-        entity.removePolicy(policy);
+        entity.policies().remove(policy);
         return Response.status(Response.Status.NO_CONTENT).build();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
index 1976d6f..90e434a 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
@@ -118,7 +118,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
             Object newValue = ((Map.Entry)entry).getValue();
             
             AttributeSensor sensor = findSensor(entity, sensorName);
-            entity.setAttribute(sensor, newValue);
+            entity.sensors().set(sensor, newValue);
         }
     }
     
@@ -134,7 +134,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
         AttributeSensor sensor = findSensor(entity, sensorName);
         if (log.isDebugEnabled())
             log.debug("REST user "+Entitlements.getEntitlementContext()+" setting sensor "+sensorName+" to "+newValue);
-        entity.setAttribute(sensor, newValue);
+        entity.sensors().set(sensor, newValue);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 1c16e2a..cbdf70d 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -123,10 +123,10 @@ public class BrooklynRestResourceUtils {
     public Policy getPolicy(Entity entity, String policy) {
         if (policy==null) return null;
 
-        for (Policy p: entity.getPolicies()) {
+        for (Policy p: entity.policies()) {
             if (policy.equals(p.getId())) return p;
         }
-        for (Policy p: entity.getPolicies()) {
+        for (Policy p: entity.policies()) {
             if (policy.equals(p.getDisplayName())) return p;
         }
         
@@ -286,7 +286,7 @@ public class BrooklynRestResourceUtils {
 
                     Entity soleChild = mgmt.getEntityManager().createEntity(toCoreEntitySpec(clazz, name, configO, catalogItemId));
                     instance.addChild(soleChild);
-                    instance.addEnricher(Enrichers.builder()
+                    instance.enrichers().add(Enrichers.builder()
                             .propagatingAllBut(Attributes.SERVICE_UP, Attributes.SERVICE_NOT_UP_INDICATORS, 
                                     Attributes.SERVICE_STATE_ACTUAL, Attributes.SERVICE_STATE_EXPECTED, 
                                     Attributes.SERVICE_PROBLEMS)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/SensorSummaryTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/SensorSummaryTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/SensorSummaryTest.java
index 0355def..a3c6df2 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/SensorSummaryTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/SensorSummaryTest.java
@@ -90,7 +90,7 @@ public class SensorSummaryTest {
     @Test
     public void testSensorWithMultipleOpenUrlActionsRegistered() throws IOException {
         AttributeSensor<String> sensor = Sensors.newStringSensor("sensor1");
-        entity.setAttribute(sensor, "http://myval");
+        entity.sensors().set(sensor, "http://myval");
         RendererHints.register(sensor, RendererHints.namedActionWithUrl());
         RendererHints.register(sensor, RendererHints.namedActionWithUrl());
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
index 1d342d2..2d264f3 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
@@ -335,7 +335,7 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
                 .get(ApplicationSummary.class);
         assertEquals(summary.getStatus(), Status.RUNNING);
 
-        ((EntityLocal)app).setAttribute(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
+        ((EntityLocal)app).sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
         try {
             ApplicationSummary summary2 = client().resource("/v1/applications/"+app.getId())
                     .get(ApplicationSummary.class);
@@ -343,7 +343,7 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
             assertEquals(summary2.getStatus(), Status.ERROR);
             
         } finally {
-            ((EntityLocal)app).setAttribute(Attributes.SERVICE_STATE_ACTUAL, origState);
+            ((EntityLocal)app).sensors().set(Attributes.SERVICE_STATE_ACTUAL, origState);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
index 8e11d82..43e7166 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
@@ -101,9 +101,9 @@ public class DescendantsTest extends BrooklynRestResourceTest {
         assertEquals(sensors.size(), 0);
 
         long v = 0;
-        ((EntityLocal)application).setAttribute(Sensors.newLongSensor("foo"), v);
+        ((EntityLocal)application).sensors().set(Sensors.newLongSensor("foo"), v);
         for (Entity e: entities)
-            ((EntityLocal)e).setAttribute(Sensors.newLongSensor("foo"), v+=123);
+            ((EntityLocal)e).sensors().set(Sensors.newLongSensor("foo"), v+=123);
         
         sensors = client().resource("/v1/applications/"+application.getApplicationId()+"/descendants/sensor/foo")
             .get(new GenericType<Map<String,Object>>() {});

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
index ad606c7..b3d49e5 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
@@ -95,7 +95,7 @@ public class SensorResourceTest extends BrooklynRestResourceTest {
     static void addAmphibianSensor(EntityInternal entity) {
         // Add new sensor
         entity.getMutableEntityType().addSensor(SENSOR);
-        entity.setAttribute(SENSOR, 12345);
+        entity.sensors().set(SENSOR, 12345);
 
         // Register display value hint
         RendererHints.register(SENSOR, RendererHints.displayValue(Functions.compose(StringFunctions.append(" frogs"), Functions.toStringFunction())));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
index 2a464f2..980e844 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
@@ -63,7 +63,7 @@ public class DeployBlueprintTest extends BrooklynRestApiLauncherTestFixture {
         EntitySpec<BrooklynNode> spec = EntitySpec.create(BrooklynNode.class);
         EntityManager mgr = getManagementContextFromJettyServerAttributes(server).getEntityManager();
         BrooklynNode node = mgr.createEntity(spec);
-        ((EntityLocal)node).setAttribute(BrooklynNode.WEB_CONSOLE_URI, webConsoleUri);
+        ((EntityLocal)node).sensors().set(BrooklynNode.WEB_CONSOLE_URI, webConsoleUri);
         mgr.manage(node);
         Map<String, String> params = ImmutableMap.of(DeployBlueprintEffector.BLUEPRINT_CAMP_PLAN.getName(), "{ services: [ serviceType: \"java:"+BasicApplication.class.getName()+"\" ] }");
         String id = node.invoke(BrooklynNode.DEPLOY_BLUEPRINT, params).getUnchecked();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimpleEntity.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimpleEntity.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimpleEntity.java
index 2983f4e..58d24aa 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimpleEntity.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimpleEntity.java
@@ -76,7 +76,7 @@ public class RestMockSimpleEntity extends SoftwareProcessImpl {
             @EffectorParam(name="param2") Integer param2) {
         log.info("Invoked sampleEffector("+param1+","+param2+")");
         String result = ""+param1+param2;
-        setAttribute(SAMPLE_SENSOR, result);
+        sensors().set(SAMPLE_SENSOR, result);
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
index be6d50c..d190614 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
@@ -181,7 +181,7 @@ public class BrooklynRestResourceUtilsTest {
         subapp.setDisplayName("subapp");
         
         TestEntityImpl subentity = new TestEntityImpl(MutableMap.of("displayName", "subentity"), subapp);
-        subentity.addPolicy(new MyPolicy(MutableMap.of("name", "mypolicy")));
+        subentity.policies().add(new MyPolicy(MutableMap.of("name", "mypolicy")));
         subentity.getApplication(); // force this to be cached
         
         app.addChild(subapp);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
index 49abea9..3baa26d 100644
--- a/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
@@ -141,7 +141,7 @@ public class EntityTestUtils {
     public static void assertAttributeChangesEventually(final Entity entity, final AttributeSensor<?> attribute) {
         final Object origValue = entity.getAttribute(attribute);
         final AtomicBoolean changed = new AtomicBoolean();
-        SubscriptionHandle handle = ((EntityLocal)entity).subscribe(entity, attribute, new SensorEventListener<Object>() {
+        SubscriptionHandle handle = entity.subscriptions().subscribe(entity, attribute, new SensorEventListener<Object>() {
             @Override public void onEvent(SensorEvent<Object> event) {
                 if (!Objects.equal(origValue, event.getValue())) {
                     changed.set(true);
@@ -153,7 +153,7 @@ public class EntityTestUtils {
                     assertTrue(changed.get(), entity+" -> "+attribute+" not changed");
                 }});
         } finally {
-            ((EntityLocal)entity).unsubscribe(entity, handle);
+            entity.subscriptions().unsubscribe(entity, handle);
         }
     }
     


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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidDestinationImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidDestinationImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidDestinationImpl.java
index 155e43a..d475c5e 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidDestinationImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidDestinationImpl.java
@@ -61,7 +61,7 @@ public abstract class QpidDestinationImpl extends JMSDestinationImpl implements
         // But tricky for if brooklyn were distributed
         try {
             if (virtualHost == null) virtualHost = getConfig(QpidBroker.VIRTUAL_HOST_NAME);
-            setAttribute(QpidBroker.VIRTUAL_HOST_NAME, virtualHost);
+            sensors().set(QpidBroker.VIRTUAL_HOST_NAME, virtualHost);
             virtualHostManager = new ObjectName(format("org.apache.qpid:type=VirtualHost.VirtualHostManager,VirtualHost=\"%s\"", virtualHost));
             jmxHelper = new JmxHelper((EntityLocal)getParent());
         } catch (MalformedObjectNameException e) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidQueueImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidQueueImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidQueueImpl.java
index e9d6b95..6362c54 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidQueueImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidQueueImpl.java
@@ -35,7 +35,7 @@ public class QpidQueueImpl extends QpidDestinationImpl implements QpidQueue {
     @Override
     public void onManagementStarting() {
         super.onManagementStarting();
-        setAttribute(QUEUE_NAME, getName());
+        sensors().set(QUEUE_NAME, getName());
         try {
             exchange = new ObjectName(format("org.apache.qpid:type=VirtualHost.Exchange,VirtualHost=\"%s\",name=\"%s\",ExchangeType=direct", virtualHost, getExchangeName()));
         } catch (MalformedObjectNameException e) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidTopicImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidTopicImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidTopicImpl.java
index 02454fe..39b0667 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidTopicImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidTopicImpl.java
@@ -34,7 +34,7 @@ public class QpidTopicImpl extends QpidDestinationImpl implements QpidTopic {
     @Override
     public void onManagementStarting() {
         super.onManagementStarting();
-        setAttribute(TOPIC_NAME, getName());
+        sensors().set(TOPIC_NAME, getName());
         try {
             String virtualHost = getParent().getVirtualHost();
             exchange = new ObjectName(format("org.apache.qpid:type=VirtualHost.Exchange,VirtualHost=\"%s\",name=\"%s\",ExchangeType=topic", virtualHost, getExchangeName()));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
index f4026bd..1227365 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
@@ -71,7 +71,7 @@ public class RabbitBrokerImpl extends SoftwareProcessImpl implements RabbitBroke
 
     public void setBrokerUrl() {
         String urlFormat = "amqp://guest:guest@%s:%d/%s";
-        setAttribute(BROKER_URL, format(urlFormat, getAttribute(HOSTNAME), getAttribute(AMQP_PORT), getAttribute(VIRTUAL_HOST_NAME)));
+        sensors().set(BROKER_URL, format(urlFormat, getAttribute(HOSTNAME), getAttribute(AMQP_PORT), getAttribute(VIRTUAL_HOST_NAME)));
     }
 
     public RabbitQueue createQueue(Map properties) {
@@ -95,7 +95,7 @@ public class RabbitBrokerImpl extends SoftwareProcessImpl implements RabbitBroke
         setBrokerUrl();
 
         if (getEnableManagementPlugin()) {
-            setAttribute(MANAGEMENT_URL, format("http://%s:%s/", getAttribute(HOSTNAME), getAttribute(MANAGEMENT_PORT)));
+            sensors().set(MANAGEMENT_URL, format("http://%s:%s/", getAttribute(HOSTNAME), getAttribute(MANAGEMENT_PORT)));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitDestination.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitDestination.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitDestination.java
index 768c36c..2756bf9 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitDestination.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitDestination.java
@@ -47,7 +47,7 @@ public abstract class RabbitDestination extends AbstractEntity implements AmqpEx
         
         exchange = (getConfig(EXCHANGE_NAME) != null) ? getConfig(EXCHANGE_NAME) : getDefaultExchangeName();
         virtualHost = getConfig(RabbitBroker.VIRTUAL_HOST_NAME);
-        setAttribute(RabbitBroker.VIRTUAL_HOST_NAME, virtualHost);
+        sensors().set(RabbitBroker.VIRTUAL_HOST_NAME, virtualHost);
         
         machine = (SshMachineLocation) Iterables.find(getParent().getLocations(), Predicates.instanceOf(SshMachineLocation.class));
         shellEnvironment = getParent().getShellEnvironment();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
index 037085b..03b3d68 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
@@ -39,7 +39,7 @@ public class RabbitQueue extends RabbitDestination implements Queue {
 
     @Override
     public void create() {
-        setAttribute(QUEUE_NAME, getName());
+        sensors().set(QUEUE_NAME, getName());
         super.create();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormDeploymentImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormDeploymentImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormDeploymentImpl.java
index 61d6a4e..7b26ed9 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormDeploymentImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormDeploymentImpl.java
@@ -49,12 +49,12 @@ public class StormDeploymentImpl extends BasicStartableImpl implements StormDepl
             ZooKeeperEnsemble.class).configure(
                 ZooKeeperEnsemble.INITIAL_SIZE, getConfig(ZOOKEEPERS_COUNT)));
         
-        setConfig(Storm.ZOOKEEPER_ENSEMBLE, zooKeeperEnsemble);
+        config().set(Storm.ZOOKEEPER_ENSEMBLE, zooKeeperEnsemble);
         
         Storm nimbus = addChild(EntitySpec.create(Storm.class).configure(ROLE, NIMBUS));
         
-        setConfig(Storm.NIMBUS_ENTITY, nimbus);
-        setConfig(Storm.START_MUTEX, new Object());
+        config().set(Storm.NIMBUS_ENTITY, nimbus);
+        config().set(Storm.START_MUTEX, new Object());
         
         addChild(EntitySpec.create(DynamicCluster.class)
             .configure(DynamicCluster.MEMBER_SPEC, 
@@ -64,11 +64,11 @@ public class StormDeploymentImpl extends BasicStartableImpl implements StormDepl
         
         Storm ui = addChild(EntitySpec.create(Storm.class).configure(ROLE, UI));
         
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(Storm.STORM_UI_URL)
                 .from(ui)
                 .build());
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(Attributes.HOSTNAME)
                 .from(nimbus)
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormImpl.java
index a1fc3d8..71f145c 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormImpl.java
@@ -72,7 +72,7 @@ public class StormImpl extends SoftwareProcessImpl implements Storm {
         Time.sleep(Duration.TEN_SECONDS);
 
         if (getRole() == Role.UI) {
-            setAttribute(STORM_UI_URL, "http://"+getAttribute(Attributes.HOSTNAME)+":"+getAttribute(UI_PORT)+"/");
+            sensors().set(STORM_UI_URL, "http://"+getAttribute(Attributes.HOSTNAME)+":"+getAttribute(UI_PORT)+"/");
         }
 
         if (((JavaSoftwareProcessDriver)getDriver()).isJmxEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/zookeeper/ZooKeeperEnsembleImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/zookeeper/ZooKeeperEnsembleImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/zookeeper/ZooKeeperEnsembleImpl.java
index ee917a6..c2c3e3f 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/zookeeper/ZooKeeperEnsembleImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/zookeeper/ZooKeeperEnsembleImpl.java
@@ -62,7 +62,7 @@ public class ZooKeeperEnsembleImpl extends DynamicClusterImpl implements ZooKeep
         log.info("Initializing the ZooKeeper Ensemble");
         super.init();
 
-        policy = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policy = policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Members tracker")
                 .configure("group", this));
     }
@@ -75,7 +75,7 @@ public class ZooKeeperEnsembleImpl extends DynamicClusterImpl implements ZooKeep
         @Override
         protected void onEntityAdded(Entity member) {
             if (member.getAttribute(ZooKeeperNode.MY_ID) == null) {
-                ((EntityInternal) member).setAttribute(ZooKeeperNode.MY_ID, myId.incrementAndGet());
+                ((EntityInternal) member).sensors().set(ZooKeeperNode.MY_ID, myId.incrementAndGet());
             }
         }
 
@@ -98,7 +98,7 @@ public class ZooKeeperEnsembleImpl extends DynamicClusterImpl implements ZooKeep
         for (Entity zookeeper : getMembers()) {
             zookeeperServers.add(zookeeper.getAttribute(Attributes.HOSTNAME));
         }
-        setAttribute(ZOOKEEPER_SERVERS, zookeeperServers);
+        sensors().set(ZOOKEEPER_SERVERS, zookeeperServers);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/monit/MonitNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/monit/MonitNodeImpl.java b/software/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/monit/MonitNodeImpl.java
index 5af6dff..2702994 100644
--- a/software/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/monit/MonitNodeImpl.java
+++ b/software/monitoring/src/main/java/org/apache/brooklyn/entity/monitoring/monit/MonitNodeImpl.java
@@ -99,7 +99,7 @@ public class MonitNodeImpl extends SoftwareProcessImpl implements MonitNode {
                 .build();
         } else {
             LOG.warn("Location(s) {} not an ssh-machine location, so not polling for status; setting serviceUp immediately", getLocations());
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerImpl.java
----------------------------------------------------------------------
diff --git a/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerImpl.java b/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerImpl.java
index 114acea..120486a 100644
--- a/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerImpl.java
+++ b/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerImpl.java
@@ -106,13 +106,13 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements BindDnsSer
         checkNotNull(getConfig(HOSTNAME_SENSOR), "%s requires value for %s", getClass().getName(), HOSTNAME_SENSOR);
         DynamicGroup entities = addChild(EntitySpec.create(DynamicGroup.class)
                 .configure(DynamicGroup.ENTITY_FILTER, getEntityFilter()));
-        setAttribute(ENTITIES, entities);
-        setAttribute(A_RECORDS, ImmutableMap.<String, String>of());
-        setAttribute(CNAME_RECORDS, ImmutableMultimap.<String, String>of());
-        setAttribute(PTR_RECORDS, ImmutableMap.<String, String>of());
-        setAttribute(ADDRESS_MAPPINGS, ImmutableMultimap.<String, String>of());
+        sensors().set(ENTITIES, entities);
+        sensors().set(A_RECORDS, ImmutableMap.<String, String>of());
+        sensors().set(CNAME_RECORDS, ImmutableMultimap.<String, String>of());
+        sensors().set(PTR_RECORDS, ImmutableMap.<String, String>of());
+        sensors().set(ADDRESS_MAPPINGS, ImmutableMultimap.<String, String>of());
         synchronized (serialMutex) {
-            setAttribute(SERIAL, System.currentTimeMillis());
+            sensors().set(SERIAL, System.currentTimeMillis());
         }
     }
 
@@ -156,12 +156,12 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements BindDnsSer
     protected void preStart() {
         String reverse = getConfig(REVERSE_LOOKUP_NETWORK);
         if (Strings.isBlank(reverse)) reverse = getAttribute(ADDRESS);
-        setAttribute(REVERSE_LOOKUP_CIDR, new Cidr(reverse + "/24"));
+        sensors().set(REVERSE_LOOKUP_CIDR, new Cidr(reverse + "/24"));
         String reverseLookupDomain = Joiner.on('.').join(Iterables.skip(Lists.reverse(Lists.newArrayList(
                 Splitter.on('.').split(reverse))), 1)) + ".in-addr.arpa";
-        setAttribute(REVERSE_LOOKUP_DOMAIN, reverseLookupDomain);
+        sensors().set(REVERSE_LOOKUP_DOMAIN, reverseLookupDomain);
 
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Address tracker")
                 .configure(AbstractMembershipTrackingPolicy.SENSORS_TO_TRACK, ImmutableSet.<Sensor<?>>of(getConfig(HOSTNAME_SENSOR)))
                 .configure(AbstractMembershipTrackingPolicy.GROUP, getEntities()));
@@ -244,10 +244,10 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements BindDnsSer
                     aRecordToCnames.put(ipToARecord.get(address), domainName);
                 }
             }
-            setAttribute(A_RECORDS, ImmutableMap.copyOf(ipToARecord.inverse()));
-            setAttribute(PTR_RECORDS, ImmutableMap.copyOf(octetToName));
-            setAttribute(CNAME_RECORDS, Multimaps.unmodifiableMultimap(aRecordToCnames));
-            setAttribute(ADDRESS_MAPPINGS, Multimaps.unmodifiableMultimap(ipToAllNames));
+            sensors().set(A_RECORDS, ImmutableMap.copyOf(ipToARecord.inverse()));
+            sensors().set(PTR_RECORDS, ImmutableMap.copyOf(octetToName));
+            sensors().set(CNAME_RECORDS, Multimaps.unmodifiableMultimap(aRecordToCnames));
+            sensors().set(ADDRESS_MAPPINGS, Multimaps.unmodifiableMultimap(ipToAllNames));
 
             // Update Bind configuration files and restart the service
             getDriver().updateBindConfiguration();
@@ -303,7 +303,7 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements BindDnsSer
     public long getSerial() {
         synchronized (serialMutex) {
             long next = getAttribute(SERIAL) + 1;
-            setAttribute(SERIAL, next);
+            sensors().set(SERIAL, next);
             return next;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java b/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
index 2f68059..a0c67e0 100644
--- a/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
+++ b/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
@@ -128,7 +128,7 @@ public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplicat
         cluster.resize(1);
         assertDnsEntityEventuallyHasActiveMembers(1);
         EntityLocal e = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
-        e.setAttribute(PrefixAndIdEnricher.SENSOR, " _-pretend.hostname.10.0.0.7.my-cloud.com");
+        e.sensors().set(PrefixAndIdEnricher.SENSOR, " _-pretend.hostname.10.0.0.7.my-cloud.com");
         EntityTestUtils.assertAttributeEqualsEventually(dns, BindDnsServer.A_RECORDS,
                 ImmutableMap.of("pretend-hostname-10-0-0-7-my-cloud-com", e.getAttribute(Attributes.ADDRESS)));
     }
@@ -139,7 +139,7 @@ public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplicat
         cluster.resize(1);
         assertDnsEntityEventuallyHasActiveMembers(1);
         EntityLocal e = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
-        e.setAttribute(PrefixAndIdEnricher.SENSOR, Strings.repeat("a", 171));
+        e.sensors().set(PrefixAndIdEnricher.SENSOR, Strings.repeat("a", 171));
         EntityTestUtils.assertAttributeEqualsEventually(dns, BindDnsServer.A_RECORDS,
                 ImmutableMap.of(Strings.repeat("a", 63), e.getAttribute(Attributes.ADDRESS)));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/PrefixAndIdEnricher.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/PrefixAndIdEnricher.java b/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/PrefixAndIdEnricher.java
index 9c75ace..cf03530 100644
--- a/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/PrefixAndIdEnricher.java
+++ b/software/network/src/test/java/org/apache/brooklyn/entity/network/bind/PrefixAndIdEnricher.java
@@ -46,10 +46,10 @@ public class PrefixAndIdEnricher extends AbstractEnricher {
     @Override
     public void setEntity(final EntityLocal entity) {
         super.setEntity(entity);
-        subscribe(entity, getConfig(MONITOR), new SensorEventListener<Object>() {
+        subscriptions().subscribe(entity, getConfig(MONITOR), new SensorEventListener<Object>() {
             @Override
             public void onEvent(SensorEvent<Object> event) {
-                entity.setAttribute(SENSOR, getConfig(PREFIX) + entity.getId());
+                entity.sensors().set(SENSOR, getConfig(PREFIX) + entity.getId());
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java
index e17d530..79003c2 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterImpl.java
@@ -157,24 +157,24 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
          * subscribe to hostname, and keep an accurate set of current seeds in a sensor;
          * then at nodes we set the initial seeds to be the current seeds when ready (non-empty)
          */
-        subscribeToMembers(this, Attributes.HOSTNAME, new SensorEventListener<String>() {
+        subscriptions().subscribeToMembers(this, Attributes.HOSTNAME, new SensorEventListener<String>() {
             @Override
             public void onEvent(SensorEvent<String> event) {
                 seedTracker.onHostnameChanged(event.getSource(), event.getValue());
             }
         });
-        subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 seedTracker.onMemberRemoved(event.getValue());
             }
         });
-        subscribeToMembers(this, Attributes.SERVICE_UP, new SensorEventListener<Boolean>() {
+        subscriptions().subscribeToMembers(this, Attributes.SERVICE_UP, new SensorEventListener<Boolean>() {
             @Override
             public void onEvent(SensorEvent<Boolean> event) {
                 seedTracker.onServiceUpChanged(event.getSource(), event.getValue());
             }
         });
-        subscribeToMembers(this, Attributes.SERVICE_STATE_ACTUAL, new SensorEventListener<Lifecycle>() {
+        subscriptions().subscribeToMembers(this, Attributes.SERVICE_STATE_ACTUAL, new SensorEventListener<Lifecycle>() {
             @Override
             public void onEvent(SensorEvent<Lifecycle> event) {
                 // trigger a recomputation also when lifecycle state changes, 
@@ -185,7 +185,7 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
         });
         
         // Track the datacenters for this cluster
-        subscribeToMembers(this, CassandraNode.DATACENTER_NAME, new SensorEventListener<String>() {
+        subscriptions().subscribeToMembers(this, CassandraNode.DATACENTER_NAME, new SensorEventListener<String>() {
             @Override
             public void onEvent(SensorEvent<String> event) {
                 Entity member = event.getSource();
@@ -211,7 +211,7 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
                 return Optional.absent();
             }
         });
-        subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 Entity entity = event.getSource();
                 Multimap<String, Entity> datacenterUsage = getAttribute(DATACENTER_USAGE);
@@ -370,7 +370,7 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
     protected void connectSensors() {
         connectEnrichers();
         
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Cassandra Cluster Tracker")
                 .configure("sensorsToTrack", ImmutableSet.of(Attributes.SERVICE_UP, Attributes.HOSTNAME, CassandraNode.THRIFT_PORT))
                 .configure("group", this));
@@ -417,7 +417,7 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
         for (List<? extends AttributeSensor<? extends Number>> es : summingEnricherSetup) {
             AttributeSensor<? extends Number> t = es.get(0);
             AttributeSensor<? extends Number> total = es.get(1);
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(t)
                     .publishing(total)
                     .fromMembers()
@@ -430,7 +430,7 @@ public class CassandraDatacenterImpl extends DynamicClusterImpl implements Cassa
         for (List<? extends AttributeSensor<? extends Number>> es : averagingEnricherSetup) {
             AttributeSensor<Number> t = (AttributeSensor<Number>) es.get(0);
             AttributeSensor<Double> average = (AttributeSensor<Double>) es.get(1);
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(t)
                     .publishing(average)
                     .fromMembers()

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricImpl.java
index 682d352..5aa108d 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricImpl.java
@@ -208,12 +208,12 @@ public class CassandraFabricImpl extends DynamicFabricImpl implements CassandraF
             config().set(CassandraDatacenter.SEED_SUPPLIER, getSeedSupplier());
         
         // track members
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Cassandra Fabric Tracker")
                 .configure("group", this));
 
         // Track first node's startup
-        subscribeToMembers(this, CassandraDatacenter.FIRST_NODE_STARTED_TIME_UTC, new SensorEventListener<Long>() {
+        subscriptions().subscribeToMembers(this, CassandraDatacenter.FIRST_NODE_STARTED_TIME_UTC, new SensorEventListener<Long>() {
             @Override
             public void onEvent(SensorEvent<Long> event) {
                 Long oldval = getAttribute(CassandraDatacenter.FIRST_NODE_STARTED_TIME_UTC);
@@ -228,7 +228,7 @@ public class CassandraFabricImpl extends DynamicFabricImpl implements CassandraF
         });
         
         // Track the datacenters for this cluster
-        subscribeToMembers(this, CassandraDatacenter.DATACENTER_USAGE, new SensorEventListener<Multimap<String,Entity>>() {
+        subscriptions().subscribeToMembers(this, CassandraDatacenter.DATACENTER_USAGE, new SensorEventListener<Multimap<String,Entity>>() {
             @Override
             public void onEvent(SensorEvent<Multimap<String,Entity>> event) {
                 Multimap<String, Entity> usage = calculateDatacenterUsage();
@@ -236,7 +236,7 @@ public class CassandraFabricImpl extends DynamicFabricImpl implements CassandraF
                 sensors().set(DATACENTERS, usage.keySet());
             }
         });
-        subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(this, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 Multimap<String, Entity> usage = calculateDatacenterUsage();
                 sensors().set(DATACENTER_USAGE, usage);
@@ -342,7 +342,7 @@ public class CassandraFabricImpl extends DynamicFabricImpl implements CassandraF
     protected void connectEnrichers() {
         // TODO Aggregate across sub-clusters
 
-        subscribeToMembers(this, SERVICE_UP, new SensorEventListener<Boolean>() {
+        subscriptions().subscribeToMembers(this, SERVICE_UP, new SensorEventListener<Boolean>() {
             @Override public void onEvent(SensorEvent<Boolean> event) {
                 sensors().set(SERVICE_UP, calculateServiceUp());
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
index 1c6742b..e08c99a 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
@@ -517,25 +517,25 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN
     protected void connectEnrichers(Duration windowPeriod) {
         JavaAppUtils.connectJavaAppServerPolicies(this);
 
-        addEnricher(TimeWeightedDeltaEnricher.<Long>getPerSecondDeltaEnricher(this, READ_COMPLETED, READS_PER_SECOND_LAST));
-        addEnricher(TimeWeightedDeltaEnricher.<Long>getPerSecondDeltaEnricher(this, WRITE_COMPLETED, WRITES_PER_SECOND_LAST));
+        enrichers().add(TimeWeightedDeltaEnricher.<Long>getPerSecondDeltaEnricher(this, READ_COMPLETED, READS_PER_SECOND_LAST));
+        enrichers().add(TimeWeightedDeltaEnricher.<Long>getPerSecondDeltaEnricher(this, WRITE_COMPLETED, WRITES_PER_SECOND_LAST));
         
         if (windowPeriod!=null) {
-            addEnricher(new RollingTimeWindowMeanEnricher<Long>(this, THRIFT_PORT_LATENCY, 
+            enrichers().add(new RollingTimeWindowMeanEnricher<Long>(this, THRIFT_PORT_LATENCY, 
                     THRIFT_PORT_LATENCY_IN_WINDOW, windowPeriod));
-            addEnricher(new RollingTimeWindowMeanEnricher<Double>(this, READS_PER_SECOND_LAST, 
+            enrichers().add(new RollingTimeWindowMeanEnricher<Double>(this, READS_PER_SECOND_LAST, 
                     READS_PER_SECOND_IN_WINDOW, windowPeriod));
-            addEnricher(new RollingTimeWindowMeanEnricher<Double>(this, WRITES_PER_SECOND_LAST, 
+            enrichers().add(new RollingTimeWindowMeanEnricher<Double>(this, WRITES_PER_SECOND_LAST, 
                     WRITES_PER_SECOND_IN_WINDOW, windowPeriod));
         }
         
         // service-up checks
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                 .from(THRIFT_PORT_LATENCY)
                 .computing(Functionals.ifEquals(-1L).value("Thrift latency polling failed") )
                 .build());
         
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                 .from(SERVICE_UP_JMX)
                 .computing(Functionals.ifEquals(false).value("JMX reports not up") )
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
index eaa7b7a..6e39f7d 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
@@ -119,13 +119,13 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
         log.info("Initializing the Couchbase cluster...");
         super.init();
         
-        addEnricher(
+        enrichers().add(
             Enrichers.builder()
                 .transforming(COUCHBASE_CLUSTER_UP_NODES)
                 .from(this)
                 .publishing(COUCHBASE_CLUSTER_UP_NODE_ADDRESSES)
                 .computing(new ListOfHostAndPort()).build() );
-        addEnricher(
+        enrichers().add(
             Enrichers.builder()
                 .transforming(COUCHBASE_CLUSTER_UP_NODE_ADDRESSES)
                 .from(this)
@@ -163,14 +163,14 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
             addAveragingMemberEnricher(nodeSensor, enricherSetup.get(nodeSensor));
         }
         
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
             .from(IS_CLUSTER_INITIALIZED).computing(
                 IfFunctions.ifNotEquals(true).value("The cluster is not yet completely initialized")
                     .defaultValue(null).build()).build() );
     }
     
     private void addAveragingMemberEnricher(AttributeSensor<? extends Number> fromSensor, AttributeSensor<? extends Number> toSensor) {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
             .aggregating(fromSensor)
             .publishing(toSensor)
             .fromMembers()
@@ -180,7 +180,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
     }
 
     private void addSummingMemberEnricher(AttributeSensor<? extends Number> source) {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
             .aggregating(source)
             .publishing(source)
             .fromMembers()
@@ -191,13 +191,13 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
 
     @Override
     protected void doStart() {
-        setAttribute(IS_CLUSTER_INITIALIZED, false);
+        sensors().set(IS_CLUSTER_INITIALIZED, false);
         
         super.doStart();
 
         connectSensors();
         
-        setAttribute(BUCKET_CREATION_IN_PROGRESS, false);
+        sensors().set(BUCKET_CREATION_IN_PROGRESS, false);
 
         //start timeout before adding the servers
         Tasks.setBlockingDetails("Pausing while Couchbase stabilizes");
@@ -210,8 +210,8 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
             
             //TODO: select a new primary node if this one fails
             Entity primaryNode = upNodes.get().iterator().next();
-            ((EntityInternal) primaryNode).setAttribute(CouchbaseNode.IS_PRIMARY_NODE, true);
-            setAttribute(COUCHBASE_PRIMARY_NODE, primaryNode);
+            ((EntityInternal) primaryNode).sensors().set(CouchbaseNode.IS_PRIMARY_NODE, true);
+            sensors().set(COUCHBASE_PRIMARY_NODE, primaryNode);
 
             Set<Entity> serversToAdd = MutableSet.<Entity>copyOf(getUpNodes());
 
@@ -233,7 +233,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                     log.warn(this+" is not quorate; will likely fail later, but proceeding for now");
                 }
                 for (Entity server: serversToAdd) {
-                    ((EntityInternal) server).setAttribute(CouchbaseNode.IS_IN_CLUSTER, true);
+                    ((EntityInternal) server).sensors().set(CouchbaseNode.IS_IN_CLUSTER, true);
                 }
             }
                 
@@ -264,7 +264,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                 }
             }
 
-            setAttribute(IS_CLUSTER_INITIALIZED, true);
+            sensors().set(IS_CLUSTER_INITIALIZED, true);
             
         } else {
             throw new IllegalStateException("No up nodes available after starting");
@@ -280,7 +280,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
     }
 
     protected void connectSensors() {
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Controller targets tracker")
                 .configure("group", this));
     }
@@ -324,7 +324,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                     if (!upNodes.get().contains(member)) {
                         Set<Entity> newNodes = Sets.newHashSet(getUpNodes());
                         newNodes.add(member);
-                        setAttribute(COUCHBASE_CLUSTER_UP_NODES, newNodes);
+                        sensors().set(COUCHBASE_CLUSTER_UP_NODES, newNodes);
 
                         //add to set of servers to be added.
                         if (isClusterInitialized()) {
@@ -334,7 +334,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                 } else {
                     Set<Entity> newNodes = Sets.newHashSet();
                     newNodes.add(member);
-                    setAttribute(COUCHBASE_CLUSTER_UP_NODES, newNodes);
+                    sensors().set(COUCHBASE_CLUSTER_UP_NODES, newNodes);
 
                     if (isClusterInitialized()) {
                         addServer(member);
@@ -344,7 +344,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                 Set<Entity> upNodes = getUpNodes();
                 if (upNodes != null && upNodes.contains(member)) {
                     upNodes.remove(member);
-                    setAttribute(COUCHBASE_CLUSTER_UP_NODES, upNodes);
+                    sensors().set(COUCHBASE_CLUSTER_UP_NODES, upNodes);
                     log.info("Removing couchbase node {}: {}; from cluster", new Object[]{this, member});
                 }
             }
@@ -398,7 +398,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
 
     @Override
     protected void initEnrichers() {
-        addEnricher(Enrichers.builder().updatingMap(ServiceStateLogic.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(ServiceStateLogic.SERVICE_NOT_UP_INDICATORS)
             .from(COUCHBASE_CLUSTER_UP_NODES)
             .computing(new Function<Set<Entity>, Object>() {
                 @Override
@@ -479,7 +479,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                 Entities.invokeEffectorWithArgs(this, getPrimaryNode(), CouchbaseNode.SERVER_ADD, webAdmin.toString(), username, password).getUnchecked();
             }
             //FIXME check feedback of whether the server was added.
-            ((EntityInternal) serverToAdd).setAttribute(CouchbaseNode.IS_IN_CLUSTER, true);
+            ((EntityInternal) serverToAdd).sensors().set(CouchbaseNode.IS_IN_CLUSTER, true);
         }
     }
 
@@ -533,7 +533,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
                         if (CouchbaseClusterImpl.this.resetBucketCreation.get() != null) {
                             CouchbaseClusterImpl.this.resetBucketCreation.get().stop();
                         }
-                        setAttribute(CouchbaseCluster.BUCKET_CREATION_IN_PROGRESS, true);
+                        sensors().set(CouchbaseCluster.BUCKET_CREATION_IN_PROGRESS, true);
                         HostAndPort hostAndPort = BrooklynAccessUtils.getBrooklynAccessibleAddress(primaryNode, primaryNode.getAttribute(CouchbaseNode.COUCHBASE_WEB_ADMIN_PORT));
 
                         CouchbaseClusterImpl.this.resetBucketCreation.set(HttpFeed.builder()

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeImpl.java
index 74deb3e..d227a4a 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeImpl.java
@@ -86,14 +86,14 @@ public class CouchbaseNodeImpl extends SoftwareProcessImpl implements CouchbaseN
     public void init() {
         super.init();
 
-        subscribe(this, Attributes.SERVICE_UP, new SensorEventListener<Boolean>() {
+        subscriptions().subscribe(this, Attributes.SERVICE_UP, new SensorEventListener<Boolean>() {
             @Override
             public void onEvent(SensorEvent<Boolean> booleanSensorEvent) {
                 if (Boolean.TRUE.equals(booleanSensorEvent.getValue())) {
                     Integer webPort = getAttribute(CouchbaseNode.COUCHBASE_WEB_ADMIN_PORT);
                     Preconditions.checkNotNull(webPort, CouchbaseNode.COUCHBASE_WEB_ADMIN_PORT+" not set for %s; is an acceptable port available?", this);
                     String hostAndPort = BrooklynAccessUtils.getBrooklynAccessibleAddress(CouchbaseNodeImpl.this, webPort).toString();
-                    setAttribute(CouchbaseNode.COUCHBASE_WEB_ADMIN_URL, URI.create(format("http://%s", hostAndPort)));
+                    sensors().set(CouchbaseNode.COUCHBASE_WEB_ADMIN_URL, URI.create(format("http://%s", hostAndPort)));
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
index 3774ddb..fe2c788 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
@@ -333,7 +333,7 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
 
     @Override
     public void rebalance() {
-        entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "explicitly started");
+        entity.sensors().set(CouchbaseNode.REBALANCE_STATUS, "explicitly started");
         newScript("rebalance")
                 .body.append(
                 couchbaseCli("rebalance") + getCouchbaseHostnameAndCredentials())
@@ -358,7 +358,7 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
                        }
                 ).run();
 
-        entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "waiting for completion");
+        entity.sensors().set(CouchbaseNode.REBALANCE_STATUS, "waiting for completion");
         // Wait until the Couchbase node finishes the re-balancing
         Task<Boolean> reBalance = TaskBuilder.<Boolean>builder()
                 .displayName("Waiting until node is rebalancing")
@@ -387,18 +387,18 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
                 .orSubmitAndBlock()
                 .andWaitForSuccess();
         if (completed) {
-            entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "completed");
+            entity.sensors().set(CouchbaseNode.REBALANCE_STATUS, "completed");
             ServiceStateLogic.ServiceNotUpLogic.clearNotUpIndicator(getEntity(), "rebalancing");
             log.info("Rebalanced cluster via primary node {}", getEntity());
         } else {
-            entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "timed out");
+            entity.sensors().set(CouchbaseNode.REBALANCE_STATUS, "timed out");
             ServiceStateLogic.ServiceNotUpLogic.updateNotUpIndicator(getEntity(), "rebalancing", "rebalance did not complete within time limit");
             log.warn("Timeout rebalancing cluster via primary node {}", getEntity());
         }
     }
 
     private Iterable<HostAndPort> getNodesHostAndPort() {
-        Group group = Iterables.getFirst(getEntity().getGroups(), null);
+        Group group = Iterables.getFirst(getEntity().groups(), null);
         if (group == null) return Lists.newArrayList();
         return Iterables.transform(group.getAttribute(CouchbaseCluster.COUCHBASE_CLUSTER_UP_NODES),
                 new Function<Entity, HostAndPort>() {
@@ -447,7 +447,7 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
                 " --server-add-password=" + BashStringEscapes.wrapBash(password))
                 .failOnNonZeroResultCode()
                 .execute();
-        entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "triggered as part of server-add");
+        entity.sensors().set(CouchbaseNode.REBALANCE_STATUS, "triggered as part of server-add");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayImpl.java
index c2e0395..0b42c76 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayImpl.java
@@ -51,7 +51,7 @@ public class CouchbaseSyncGatewayImpl extends SoftwareProcessImpl implements Cou
         String managementUri = String.format("http://%s:%s",
                 hp.getHostText(), hp.getPort());
 
-        setAttribute(MANAGEMENT_URL, managementUri);
+        sensors().set(MANAGEMENT_URL, managementUri);
 
         httpFeed = HttpFeed.builder()
                 .entity(this)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
index 06078f8..14867de 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
@@ -102,7 +102,7 @@ public class CouchDBNodeImpl extends SoftwareProcessImpl implements CouchDBNode
     protected void postStop() {
         super.postStop();
         // zero our workrate derived workrates.
-        setAttribute(REQUESTS_PER_SECOND_LAST, 0D);
-        setAttribute(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
+        sensors().set(REQUESTS_PER_SECOND_LAST, 0D);
+        sensors().set(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java
index 09184b4..60c1f84 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java
@@ -48,7 +48,7 @@ public class CouchDBNodeSshDriver extends AbstractSoftwareProcessSshDriver imple
     public CouchDBNodeSshDriver(CouchDBNodeImpl entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
     }
 
     public String getLogFileLocation() { return Os.mergePathsUnix(getRunDir(), "couchdb.log"); }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
index ccd84a0..6e35e8b 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeSshDriver.java
@@ -81,7 +81,7 @@ public class ElasticSearchNodeSshDriver extends AbstractSoftwareProcessSshDriver
     @Override
     public void launch() {
         String pidFile = getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME;
-        entity.setAttribute(ElasticSearchNode.PID_FILE, pidFile);
+        entity.sensors().set(ElasticSearchNode.PID_FILE, pidFile);
         StringBuilder commandBuilder = new StringBuilder()
             .append(String.format("%s/bin/elasticsearch -d -p %s", getExpandedInstallDir(), pidFile));
         if (entity.getConfig(ElasticSearchNode.TEMPLATE_CONFIGURATION_URL) != null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientImpl.java
index 7eeed49..419c09e 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientImpl.java
@@ -26,7 +26,7 @@ public class MongoDBClientImpl extends SoftwareProcessImpl implements MongoDBCli
     @Override
     protected void connectSensors() {
         super.connectSensors();
-        setAttribute(Startable.SERVICE_UP, true);
+        sensors().set(Startable.SERVICE_UP, true);
     }
 
     @SuppressWarnings("rawtypes")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java
index 2c95d02..bb29c8b 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBReplicaSetImpl.java
@@ -137,7 +137,7 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB
     
     @Override
     public void init() {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(MongoDBAuthenticationMixins.ROOT_USERNAME)
                 .publishing(MongoDBAuthenticationMixins.ROOT_USERNAME)
                 .fromMembers()
@@ -345,12 +345,12 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB
     public void start(Collection<? extends Location> locations) {
         // Promises that all the cluster's members have SERVICE_UP true on returning.
         super.start(locations);
-        policy = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policy = policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName(getName() + " membership tracker")
                 .configure("group", this));
 
         for (AttributeSensor<Long> sensor: SENSORS_TO_SUM)
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(sensor)
                     .publishing(sensor)
                     .fromMembers()
@@ -361,7 +361,7 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB
         
         // FIXME would it be simpler to have a *subscription* on four or five sensors on allMembers, including SERVICE_UP
         // (which we currently don't check), rather than an enricher, and call to an "update" method?
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(MongoDBServer.REPLICA_SET_PRIMARY_ENDPOINT)
                 .publishing(MongoDBServer.REPLICA_SET_PRIMARY_ENDPOINT)
                 .fromMembers()
@@ -380,7 +380,7 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB
                         }})
                 .build());
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(MongoDBServer.MONGO_SERVER_ENDPOINT)
                 .publishing(REPLICA_SET_ENDPOINTS)
                 .fromMembers()
@@ -398,13 +398,13 @@ public class MongoDBReplicaSetImpl extends DynamicClusterImpl implements MongoDB
                         }})
                 .build());
         
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .transforming(REPLICA_SET_ENDPOINTS)
                 .publishing(DATASTORE_URL)
                 .computing(new EndpointsToDatastoreUrlMapper(this))
                 .build());
 
-        subscribeToMembers(this, MongoDBServer.IS_PRIMARY_FOR_REPLICA_SET, new SensorEventListener<Boolean>() {
+        subscriptions().subscribeToMembers(this, MongoDBServer.IS_PRIMARY_FOR_REPLICA_SET, new SensorEventListener<Boolean>() {
             @Override public void onEvent(SensorEvent<Boolean> event) {
                 if (Boolean.TRUE == event.getValue())
                     sensors().set(PRIMARY_ENTITY, (MongoDBServer)event.getSource());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBServerImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBServerImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBServerImpl.java
index 040199b..2469046 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBServerImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBServerImpl.java
@@ -122,7 +122,7 @@ public class MongoDBServerImpl extends SoftwareProcessImpl implements MongoDBSer
         }
 
         // Take interesting details from STATUS.
-        subscribe(this, STATUS_BSON, new SensorEventListener<BasicBSONObject>() {
+        subscriptions().subscribe(this, STATUS_BSON, new SensorEventListener<BasicBSONObject>() {
                 @Override public void onEvent(SensorEvent<BasicBSONObject> event) {
                     BasicBSONObject map = event.getValue();
                     if (map != null && !map.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/CoLocatedMongoDBRouterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/CoLocatedMongoDBRouterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/CoLocatedMongoDBRouterImpl.java
index f96b517..9648f47 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/CoLocatedMongoDBRouterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/CoLocatedMongoDBRouterImpl.java
@@ -63,7 +63,7 @@ public class CoLocatedMongoDBRouterImpl extends SameServerEntityImpl implements
         router.sensors().set(MongoDBAuthenticationMixins.ROOT_PASSWORD, router.config().get(MongoDBAuthenticationMixins.ROOT_PASSWORD));
         router.sensors().set(MongoDBAuthenticationMixins.ROOT_USERNAME, router.config().get(MongoDBAuthenticationMixins.ROOT_USERNAME));
         router.sensors().set(MongoDBAuthenticationMixins.AUTHENTICATION_DATABASE, router.config().get(MongoDBAuthenticationMixins.AUTHENTICATION_DATABASE));
-        addEnricher(Enrichers.builder().propagating(MongoDBRouter.PORT).from(router).build());
+        enrichers().add(Enrichers.builder().propagating(MongoDBRouter.PORT).from(router).build());
         
         super.doStart(locations);
         sensors().set(Startable.SERVICE_UP, true);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterClusterImpl.java
index a93ad74..48b501c 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterClusterImpl.java
@@ -39,7 +39,7 @@ public class MongoDBRouterClusterImpl extends DynamicClusterImpl implements Mong
     @Override
     public void init() {
         super.init();
-        subscribeToChildren(this, MongoDBRouter.RUNNING, new SensorEventListener<Boolean>() {
+        subscriptions().subscribeToChildren(this, MongoDBRouter.RUNNING, new SensorEventListener<Boolean>() {
             @Override public void onEvent(SensorEvent<Boolean> event) {
                 setAnyRouter();
             }
@@ -49,7 +49,7 @@ public class MongoDBRouterClusterImpl extends DynamicClusterImpl implements Mong
     @Override
     public void start(Collection<? extends Location> locations) {
         super.start(locations);
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Router cluster membership tracker")
                 .configure("group", this));
     }
@@ -67,10 +67,10 @@ public class MongoDBRouterClusterImpl extends DynamicClusterImpl implements Mong
     }
     
     protected void setAnyRouter() {
-        setAttribute(MongoDBRouterCluster.ANY_ROUTER, Iterables.tryFind(getRouters(), 
+        sensors().set(MongoDBRouterCluster.ANY_ROUTER, Iterables.tryFind(getRouters(), 
                 EntityPredicates.attributeEqualTo(Startable.SERVICE_UP, true)).orNull());
 
-        setAttribute(
+        sensors().set(
                 MongoDBRouterCluster.ANY_RUNNING_ROUTER, 
                 Iterables.tryFind(getRouters(), EntityPredicates.attributeEqualTo(MongoDBRouter.RUNNING, true))
                 .orNull());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
index 5f008ea..e0c0f35 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
@@ -74,7 +74,7 @@ public class MongoDBShardClusterImpl extends DynamicClusterImpl implements Mongo
 
     @Override
     public void start(Collection<? extends Location> locations) {
-        subscribeToMembers(this, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+        subscriptions().subscribeToMembers(this, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
             public void onEvent(SensorEvent<Boolean> event) {
                 addShards();
             }
@@ -83,7 +83,7 @@ public class MongoDBShardClusterImpl extends DynamicClusterImpl implements Mongo
         super.start(locations);
         
         MongoDBRouterCluster routers = getParent().getAttribute(MongoDBShardedDeployment.ROUTER_CLUSTER);
-        subscribe(routers, MongoDBRouterCluster.ANY_RUNNING_ROUTER, new SensorEventListener<MongoDBRouter>() {
+        subscriptions().subscribe(routers, MongoDBRouterCluster.ANY_RUNNING_ROUTER, new SensorEventListener<MongoDBRouter>() {
             public void onEvent(SensorEvent<MongoDBRouter> event) {
                 if (event.getValue() != null)
                     addShards();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentImpl.java
index 5cc217a..05ab66c 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentImpl.java
@@ -74,7 +74,7 @@ public class MongoDBShardedDeploymentImpl extends AbstractEntity implements Mong
         MongoDBAuthenticationUtils.setAuthenticationConfig(shardClusterSpec, this);
         sensors().set(SHARD_CLUSTER, addChild(shardClusterSpec));
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(MongoDBConfigServerCluster.CONFIG_SERVER_ADDRESSES)
                 .from(getAttribute(CONFIG_SERVER_CLUSTER))
                 .build());
@@ -97,7 +97,7 @@ public class MongoDBShardedDeploymentImpl extends AbstractEntity implements Mong
                     .get();
 
             if (getConfigRaw(MongoDBShardedDeployment.CO_LOCATED_ROUTER_GROUP, true).isPresent()) {
-                addPolicy(PolicySpec.create(ColocatedRouterTrackingPolicy.class)
+                policies().add(PolicySpec.create(ColocatedRouterTrackingPolicy.class)
                         .displayName("Co-located router tracker")
                         .configure("group", getConfig(MongoDBShardedDeployment.CO_LOCATED_ROUTER_GROUP)));
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
index 7e71b29..8d847e7 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@ -75,7 +75,7 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
                 .configure(SoftwareProcess.CUSTOMIZE_LATCH, DependentConfiguration.attributeWhenReady(master, Attributes.SERVICE_UP))));
         sensors().set(SLAVES, slaves);
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(RedisStore.HOSTNAME, RedisStore.ADDRESS, RedisStore.SUBNET_HOSTNAME, RedisStore.SUBNET_ADDRESS, RedisStore.REDIS_PORT)
                 .from(master)
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterImpl.java
index 5002402..8272815 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterImpl.java
@@ -68,7 +68,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
     public void init() {
         super.init();
         log.info("Initializing the riak cluster...");
-        setAttribute(IS_CLUSTER_INIT, false);
+        sensors().set(IS_CLUSTER_INIT, false);
     }
 
     @Override
@@ -91,7 +91,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                 EntityPredicates.attributeEqualTo(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, true),
                 EntityPredicates.attributeEqualTo(RiakNode.SERVICE_UP, true)));
         if (anyNode.isPresent()) {
-            setAttribute(IS_CLUSTER_INIT, true);
+            sensors().set(IS_CLUSTER_INIT, true);
         } else {
             log.warn("No Riak Nodes are found on the cluster: {}. Initialization Failed", getId());
             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
@@ -105,7 +105,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
     }
 
     protected void connectSensors() {
-        addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("Controller targets tracker")
                 .configure("sensorsToTrack", ImmutableSet.of(RiakNode.SERVICE_UP))
                 .configure("group", this));
@@ -120,7 +120,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                     } })
                  .fromMembers()
                  .build();
-        addEnricher(first);
+        enrichers().add(first);
         
         Map<? extends AttributeSensor<? extends Number>, ? extends AttributeSensor<? extends Number>> enricherSetup = 
             ImmutableMap.<AttributeSensor<? extends Number>, AttributeSensor<? extends Number>>builder()
@@ -136,7 +136,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
     }
 
     private void addAveragingMemberEnricher(AttributeSensor<? extends Number> fromSensor, AttributeSensor<? extends Number> toSensor) {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
             .aggregating(fromSensor)
             .publishing(toSensor)
             .fromMembers()
@@ -146,7 +146,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
     }
 
     private void addSummingMemberEnricher(AttributeSensor<? extends Number> source) {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
             .aggregating(source)
             .publishing(source)
             .fromMembers()
@@ -173,12 +173,12 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                 // flag a first node to be the first node in the riak cluster.
                 Boolean firstNode = getAttribute(IS_FIRST_NODE_SET);
                 if (!Boolean.TRUE.equals(firstNode)) {
-                    setAttribute(IS_FIRST_NODE_SET, Boolean.TRUE);
+                    sensors().set(IS_FIRST_NODE_SET, Boolean.TRUE);
 
                     nodes.put(member, riakName);
-                    setAttribute(RIAK_CLUSTER_NODES, nodes);
+                    sensors().set(RIAK_CLUSTER_NODES, nodes);
 
-                    ((EntityInternal) member).setAttribute(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.TRUE);
+                    ((EntityInternal) member).sensors().set(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.TRUE);
 
                     log.info("Added initial Riak node {}: {}; {} to new cluster", new Object[] { this, member, getRiakName(member) });
                 } else {
@@ -192,7 +192,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                             String anyNodeName = anyNodeInCluster.get().getAttribute(RiakNode.RIAK_NODE_NAME);
                             Entities.invokeEffectorWithArgs(this, member, RiakNode.JOIN_RIAK_CLUSTER, anyNodeName).blockUntilEnded();
                             nodes.put(member, riakName);
-                            setAttribute(RIAK_CLUSTER_NODES, nodes);
+                            sensors().set(RIAK_CLUSTER_NODES, nodes);
                             log.info("Added Riak node {}: {}; {} to cluster", new Object[] { this, member, getRiakName(member) });
                         }
                     } else {
@@ -211,7 +211,7 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                         Entities.invokeEffectorWithArgs(this, anyNodeInCluster.get(), RiakNode.REMOVE_FROM_CLUSTER, getRiakName(member)).blockUntilEnded();
                     }
                     nodes.remove(member);
-                    setAttribute(RIAK_CLUSTER_NODES, nodes);
+                    sensors().set(RIAK_CLUSTER_NODES, nodes);
                     log.info("Removed Riak node {}: {}; {} from cluster", new Object[]{ this, member, getRiakName(member) });
                 }
             }
@@ -232,8 +232,8 @@ public class RiakClusterImpl extends DynamicClusterImpl implements RiakCluster {
                 addressesPbPort.add(riakNode.getAttribute(Attributes.SUBNET_HOSTNAME) + ":" + riakNode.getAttribute(RiakNode.RIAK_PB_PORT));
             }
         }
-        setAttribute(RiakCluster.NODE_LIST, Joiner.on(",").join(addresses));
-        setAttribute(RiakCluster.NODE_LIST_PB_PORT, Joiner.on(",").join(addressesPbPort));
+        sensors().set(RiakCluster.NODE_LIST, Joiner.on(",").join(addresses));
+        sensors().set(RiakCluster.NODE_LIST_PB_PORT, Joiner.on(",").join(addressesPbPort));
     }
 
     protected boolean belongsInServerPool(Entity member) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeImpl.java
index 08773c8..995c469 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeImpl.java
@@ -184,8 +184,8 @@ public class RiakNodeImpl extends SoftwareProcessImpl implements RiakNode {
 
         httpFeed = httpFeedBuilder.build();
 
-        addEnricher(Enrichers.builder().combining(NODE_GETS, NODE_PUTS).computingSum().publishing(NODE_OPS).build());
-        addEnricher(Enrichers.builder().combining(NODE_GETS_TOTAL, NODE_PUTS_TOTAL).computingSum().publishing(NODE_OPS_TOTAL).build());
+        enrichers().add(Enrichers.builder().combining(NODE_GETS, NODE_PUTS).computingSum().publishing(NODE_OPS).build());
+        enrichers().add(Enrichers.builder().combining(NODE_GETS_TOTAL, NODE_PUTS_TOTAL).computingSum().publishing(NODE_OPS_TOTAL).build());
         WebAppServiceMethods.connectWebAppServerPolicies(this);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
index f4fda89..9ec9fb8 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
@@ -100,9 +100,9 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
         // Set package install attribute
         OsDetails osDetails = getMachine().getMachineDetails().getOsDetails();
         if (osDetails.isLinux()) {
-            entity.setAttribute(RiakNode.RIAK_PACKAGE_INSTALL, true);
+            entity.sensors().set(RiakNode.RIAK_PACKAGE_INSTALL, true);
         } else if (osDetails.isMac()) {
-            entity.setAttribute(RiakNode.RIAK_PACKAGE_INSTALL, false);
+            entity.sensors().set(RiakNode.RIAK_PACKAGE_INSTALL, false);
         }
     }
 
@@ -309,7 +309,7 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
         }
 
         //set the riak node name
-        entity.setAttribute(RiakNode.RIAK_NODE_NAME, format("riak@%s", getSubnetHostname()));
+        entity.sensors().set(RiakNode.RIAK_NODE_NAME, format("riak@%s", getSubnetHostname()));
     }
 
     @Override
@@ -335,7 +335,7 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
         launchScript.failOnNonZeroResultCode().execute();
 
         String mainUri = String.format("http://%s:%s/admin", entity.getAttribute(Attributes.HOSTNAME), entity.getAttribute(RiakNode.RIAK_WEB_PORT));
-        entity.setAttribute(Attributes.MAIN_URI, URI.create(mainUri));
+        entity.sensors().set(Attributes.MAIN_URI, URI.create(mainUri));
     }
 
     @Override
@@ -410,7 +410,7 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
 
                 joinClusterScript.execute();
 
-                entity.setAttribute(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.TRUE);
+                entity.sensors().set(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.TRUE);
             } else {
                 log.warn("entity {}: is already in the riak cluster", entity.getId());
             }
@@ -432,7 +432,7 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
 
             leaveClusterScript.execute();
 
-            entity.setAttribute(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.FALSE);
+            entity.sensors().set(RiakNode.RIAK_NODE_HAS_JOINED_CLUSTER, Boolean.FALSE);
         } else {
             log.warn("entity {}: has already left the riak cluster", entity.getId());
         }
@@ -578,7 +578,7 @@ public class RiakNodeSshDriver extends JavaSoftwareProcessSshDriver implements R
         boolean riakOnPath = newScript("riakOnPath")
                 .body.append("which riak")
                 .execute() == 0;
-        entity.setAttribute(RiakNode.RIAK_ON_PATH, riakOnPath);
+        entity.sensors().set(RiakNode.RIAK_ON_PATH, riakOnPath);
     }
 
     private String getRiakName() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/solr/SolrServerImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/solr/SolrServerImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/solr/SolrServerImpl.java
index 3ee54fe..98fa91e 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/solr/SolrServerImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/solr/SolrServerImpl.java
@@ -55,7 +55,7 @@ public class SolrServerImpl extends SoftwareProcessImpl implements SolrServer {
         HostAndPort hp = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, getSolrPort());
 
         String solrUri = String.format("http://%s:%d/solr", hp.getHostText(), hp.getPort());
-        setAttribute(Attributes.MAIN_URI, URI.create(solrUri));
+        sensors().set(Attributes.MAIN_URI, URI.create(solrUri));
 
         httpFeed = HttpFeed.builder()
                 .entity(this)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
index 7051b86..92e5b2f 100644
--- a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
+++ b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
@@ -111,7 +111,7 @@ public class KarafContainerImpl extends SoftwareProcessImpl implements KarafCont
         //FIXME should have a better way of setting config -- firstly, not here!
         //preferred style is to have config auto-applied to attributes, and have default values in their definition, not here
         //use of "properties.{user,password}" is non-standard; is that requried? use default jmxUser, jmxPassword flags?
-        setAttribute(JMX_CONTEXT, String.format("karaf-%s", getConfig(KARAF_NAME.getConfigKey())));
+        sensors().set(JMX_CONTEXT, String.format("karaf-%s", getConfig(KARAF_NAME.getConfigKey())));
         
         ConfigToAttributes.apply(this);
 
@@ -135,7 +135,7 @@ public class KarafContainerImpl extends SoftwareProcessImpl implements KarafCont
                                     // If MBean is unreachable, then mark as service-down
                                     if (Boolean.TRUE.equals(getAttribute(SERVICE_UP))) {
                                         LOG.debug("Entity "+this+" is not reachable on JMX");
-                                        setAttribute(SERVICE_UP, false);
+                                        sensors().set(SERVICE_UP, false);
                                     }
                                     return null;
                                 }}))
@@ -144,21 +144,21 @@ public class KarafContainerImpl extends SoftwareProcessImpl implements KarafCont
         
         
         // INSTANCES aggregates data for the other sensors.
-        subscribe(this, KARAF_INSTANCES, new SensorEventListener<Map>() {
+        subscriptions().subscribe(this, KARAF_INSTANCES, new SensorEventListener<Map>() {
                 @Override public void onEvent(SensorEvent<Map> event) {
-                    Map map = event.getValue();
+                    Map<?,?> map = event.getValue();
                     if (map == null) return;
                     
-                    setAttribute(SERVICE_UP, "Started".equals(map.get("State")));
-                    setAttribute(KARAF_ROOT, (Boolean) map.get("Is Root"));
-                    setAttribute(KARAF_JAVA_OPTS, (String) map.get("JavaOpts"));
-                    setAttribute(KARAF_INSTALL_LOCATION, (String) map.get("Location"));
-                    setAttribute(KARAF_NAME, (String) map.get("Name"));
-                    setAttribute(KARAF_PID, (Integer) map.get("Pid"));
-                    setAttribute(KARAF_SSH_PORT, (Integer) map.get("Ssh Port"));
-                    setAttribute(KARAF_RMI_REGISTRY_PORT, (Integer) map.get("RMI Registry Port"));
-                    setAttribute(KARAF_RMI_SERVER_PORT, (Integer) map.get("RMI Server Port"));
-                    setAttribute(KARAF_STATE, (String) map.get("State"));
+                    sensors().set(SERVICE_UP, "Started".equals(map.get("State")));
+                    sensors().set(KARAF_ROOT, (Boolean) map.get("Is Root"));
+                    sensors().set(KARAF_JAVA_OPTS, (String) map.get("JavaOpts"));
+                    sensors().set(KARAF_INSTALL_LOCATION, (String) map.get("Location"));
+                    sensors().set(KARAF_NAME, (String) map.get("Name"));
+                    sensors().set(KARAF_PID, (Integer) map.get("Pid"));
+                    sensors().set(KARAF_SSH_PORT, (Integer) map.get("Ssh Port"));
+                    sensors().set(KARAF_RMI_REGISTRY_PORT, (Integer) map.get("RMI Registry Port"));
+                    sensors().set(KARAF_RMI_SERVER_PORT, (Integer) map.get("RMI Server Port"));
+                    sensors().set(KARAF_STATE, (String) map.get("State"));
                 }});
         
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
index 8271e79..729351a 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceImpl.java
@@ -106,7 +106,7 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
         
     @Override
     public void setServiceState(Lifecycle state) {
-        setAttribute(HOSTNAME, getHostname());
+        sensors().set(HOSTNAME, getHostname());
         ServiceStateLogic.setExpectedState(this, state);
         if (state==Lifecycle.RUNNING)
             ServiceNotUpLogic.clearNotUpIndicator(this, SERVICE_STATE_ACTUAL);
@@ -130,7 +130,7 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
         }
         endTracker();
         log.debug("Initializing tracker for "+this+", following "+targetEntityProvider);
-        tracker = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+        tracker = policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                 .displayName("GeoDNS targets tracker")
                 .configure("sensorsToTrack", ImmutableSet.of(HOSTNAME, ADDRESS, Attributes.MAIN_URI, WebAppService.ROOT_URL))
                 .configure("group", targetEntityProvider));
@@ -139,7 +139,7 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
     
     protected synchronized void endTracker() {
         if (tracker == null || targetEntityProvider==null) return;
-        removePolicy(tracker);
+        policies().remove(tracker);
         tracker = null;
     }
     
@@ -298,7 +298,7 @@ public abstract class AbstractGeoDnsServiceImpl extends AbstractEntity implement
         reconfigureService(new LinkedHashSet<HostGeoInfo>(m.values()));
         
         if (log.isDebugEnabled()) log.debug("Targets being set as "+entityIdToAddress);
-        setAttribute(TARGETS, entityIdToAddress);
+        sensors().set(TARGETS, entityIdToAddress);
     }
     
     protected String inferHostname(Entity entity) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
index 710ca89..3e88805 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
@@ -61,7 +61,7 @@ public class GeoscalingDnsServiceImpl extends AbstractGeoDnsServiceImpl implemen
         super.init();
         
         // defaulting to randomized subdomains makes deploying multiple applications easier
-        if (getConfig(RANDOMIZE_SUBDOMAIN_NAME)==null) setConfig(RANDOMIZE_SUBDOMAIN_NAME, true); 
+        if (getConfig(RANDOMIZE_SUBDOMAIN_NAME)==null) config().set(RANDOMIZE_SUBDOMAIN_NAME, true); 
         
         Boolean trustAll = getConfig(SSL_TRUST_ALL);
         if (Boolean.TRUE.equals(trustAll)) {
@@ -109,9 +109,9 @@ public class GeoscalingDnsServiceImpl extends AbstractGeoDnsServiceImpl implemen
         
         String fullDomain = smartSubdomainName+"."+primaryDomainName;
         log.info("GeoScaling service will configure redirection for '"+fullDomain+"' domain");
-        setAttribute(GEOSCALING_ACCOUNT, username);
-        setAttribute(MANAGED_DOMAIN, fullDomain);
-        setAttribute(HOSTNAME, getHostname());
+        sensors().set(GEOSCALING_ACCOUNT, username);
+        sensors().set(MANAGED_DOMAIN, fullDomain);
+        sensors().set(HOSTNAME, getHostname());
         
         isConfigured = true;
         
@@ -177,14 +177,14 @@ public class GeoscalingDnsServiceImpl extends AbstractGeoDnsServiceImpl implemen
             smartSubdomain.configure(PROVIDE_CITY_INFO, script);
             if (targetHosts.isEmpty()) {
                 setServiceState(Lifecycle.CREATED);
-                setAttribute(ROOT_URL, null);
-                setAttribute(MAIN_URI, null);
+                sensors().set(ROOT_URL, null);
+                sensors().set(MAIN_URI, null);
             } else {
                 setServiceState(Lifecycle.RUNNING);
                 String domain = getAttribute(MANAGED_DOMAIN);
                 if (!Strings.isEmpty(domain)) {
-                    setAttribute(ROOT_URL, "http://"+domain+"/");
-                    setAttribute(MAIN_URI, URI.create("http://"+domain+"/"));
+                    sensors().set(ROOT_URL, "http://"+domain+"/");
+                    sensors().set(MAIN_URI, URI.create("http://"+domain+"/"));
                 }
             }
         } else {



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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
index 954a80d..40c70b6 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
@@ -108,7 +108,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
 
     protected void setProvisioningLocation(MachineProvisioningLocation val) {
         if (getAttribute(PROVISIONING_LOCATION) != null) throw new IllegalStateException("Cannot change provisioning location: existing="+getAttribute(PROVISIONING_LOCATION)+"; new="+val);
-        setAttribute(PROVISIONING_LOCATION, val);
+        sensors().set(PROVISIONING_LOCATION, val);
     }
     
     protected MachineProvisioningLocation getProvisioningLocation() {
@@ -140,8 +140,8 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         super.initEnrichers();
         ServiceNotUpLogic.updateNotUpIndicator(this, SERVICE_PROCESS_IS_RUNNING, "No information yet on whether this service is running");
         // add an indicator above so that if is_running comes through, the map is cleared and an update is guaranteed
-        addEnricher(EnricherSpec.create(UpdatingNotUpFromServiceProcessIsRunning.class).uniqueTag("service-process-is-running-updating-not-up"));
-        addEnricher(EnricherSpec.create(ServiceNotUpDiagnosticsCollector.class).uniqueTag("service-not-up-diagnostics-collector"));
+        enrichers().add(EnricherSpec.create(UpdatingNotUpFromServiceProcessIsRunning.class).uniqueTag("service-process-is-running-updating-not-up"));
+        enrichers().add(EnricherSpec.create(ServiceNotUpDiagnosticsCollector.class).uniqueTag("service-not-up-diagnostics-collector"));
     }
     
     /**
@@ -220,8 +220,8 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         @Override
         public void setEntity(EntityLocal entity) {
             super.setEntity(entity);
-            subscribe(entity, SERVICE_PROCESS_IS_RUNNING, this);
-            subscribe(entity, Attributes.SERVICE_UP, this);
+            subscriptions().subscribe(entity, SERVICE_PROCESS_IS_RUNNING, this);
+            subscriptions().subscribe(entity, Attributes.SERVICE_UP, this);
             onUpdated();
         }
 
@@ -311,8 +311,8 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         if (serviceProcessIsRunning != null) serviceProcessIsRunning.stop();
         // set null so the SERVICE_UP enricher runs (possibly removing it), then remove so everything is removed
         // TODO race because the is-running check may be mid-task
-        setAttribute(SERVICE_PROCESS_IS_RUNNING, null);
-        removeAttribute(SERVICE_PROCESS_IS_RUNNING);
+        sensors().set(SERVICE_PROCESS_IS_RUNNING, null);
+        sensors().remove(SERVICE_PROCESS_IS_RUNNING);
     }
 
     /**
@@ -339,7 +339,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         // TODO Is there a race where disconnectSensors could leave a task of the feeds still running
         // which could set serviceProcessIsRunning to true again before the task completes and the feed
         // is fully terminated?
-        setAttribute(SoftwareProcess.SERVICE_PROCESS_IS_RUNNING, false);
+        sensors().set(SoftwareProcess.SERVICE_PROCESS_IS_RUNNING, false);
     }
 
     /**
@@ -405,10 +405,10 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         Lifecycle state = getAttribute(SERVICE_STATE_ACTUAL);
         if (state == null || state == Lifecycle.CREATED) {
             // Expect this is a normal start() sequence (i.e. start() will subsequently be called)
-            setAttribute(SERVICE_UP, false);
+            sensors().set(SERVICE_UP, false);
             ServiceStateLogic.setExpectedState(this, Lifecycle.CREATED);
             // force actual to be created because this is expected subsequently
-            setAttribute(SERVICE_STATE_ACTUAL, Lifecycle.CREATED);
+            sensors().set(SERVICE_STATE_ACTUAL, Lifecycle.CREATED);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
index b3b9f83..fec3100 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
@@ -28,8 +28,8 @@ public class VanillaWindowsProcessImpl extends SoftwareProcessImpl implements Va
     @Override
     protected void preStart() {
         super.preStart();
-        setAttribute(RDP_PORT, 3389);
-        setAttribute(WINRM_PORT, 5985);
+        sensors().set(RDP_PORT, 3389);
+        sensors().set(WINRM_PORT, 5985);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
index dad0e04..67c57f8 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
@@ -37,7 +37,7 @@ public class VanillaWindowsProcessWinRmDriver extends AbstractSoftwareProcessWin
     public void start() {
         WinRmMachineLocation machine = (WinRmMachineLocation) location;
         UserAndHostAndPort winrmAddress = UserAndHostAndPort.fromParts(machine.getUser(), machine.getAddress().getHostName(), machine.config().get(WinRmMachineLocation.WINRM_PORT));
-        getEntity().setAttribute(Attributes.WINRM_ADDRESS, winrmAddress);
+        getEntity().sensors().set(Attributes.WINRM_ADDRESS, winrmAddress);
 
         super.start();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
index b8e429b..5e0beb6 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
@@ -374,7 +374,7 @@ public abstract class MachineLifecycleEffectorTasks {
             final Map<String, Object> flags = obtainProvisioningFlags(location);
             if (!(location instanceof LocalhostMachineProvisioningLocation))
                 log.info("Starting {}, obtaining a new location instance in {} with ports {}", new Object[]{entity(), location, flags.get("inboundPorts")});
-            entity().setAttribute(SoftwareProcess.PROVISIONING_LOCATION, location);
+            entity().sensors().set(SoftwareProcess.PROVISIONING_LOCATION, location);
             MachineLocation machine;
             try {
                 machine = Tasks.withBlockingDetails("Provisioning machine in " + location, new ObtainLocationTask(location, flags));
@@ -446,15 +446,15 @@ public abstract class MachineLifecycleEffectorTasks {
             // simply because subnet is still being looked up)
             Maybe<String> lh = Machines.getSubnetHostname(machine);
             Maybe<String> la = Machines.getSubnetIp(machine);
-            if (lh.isPresent()) entity().setAttribute(Attributes.SUBNET_HOSTNAME, lh.get());
-            if (la.isPresent()) entity().setAttribute(Attributes.SUBNET_ADDRESS, la.get());
-            entity().setAttribute(Attributes.HOSTNAME, machine.getAddress().getHostName());
-            entity().setAttribute(Attributes.ADDRESS, machine.getAddress().getHostAddress());
+            if (lh.isPresent()) entity().sensors().set(Attributes.SUBNET_HOSTNAME, lh.get());
+            if (la.isPresent()) entity().sensors().set(Attributes.SUBNET_ADDRESS, la.get());
+            entity().sensors().set(Attributes.HOSTNAME, machine.getAddress().getHostName());
+            entity().sensors().set(Attributes.ADDRESS, machine.getAddress().getHostAddress());
             if (machine instanceof SshMachineLocation) {
                 @SuppressWarnings("resource")
                 SshMachineLocation sshMachine = (SshMachineLocation) machine;
                 UserAndHostAndPort sshAddress = UserAndHostAndPort.fromParts(sshMachine.getUser(), sshMachine.getAddress().getHostName(), sshMachine.getPort());
-                entity().setAttribute(Attributes.SSH_ADDRESS, sshAddress);
+                entity().sensors().set(Attributes.SSH_ADDRESS, sshAddress);
             }
 
             if (Boolean.TRUE.equals(entity().getConfig(SoftwareProcess.OPEN_IPTABLES))) {
@@ -529,8 +529,8 @@ public abstract class MachineLifecycleEffectorTasks {
             resolvedBase = Os.tidyPath(base);
             log.warn("Could not resolve on-box directory for "+entity+" at "+machine+"; using "+resolvedBase+", though this may not be accurate at the target (and may fail shortly)");
         }
-        entity.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, resolvedBase);
-        entity.setConfig(ON_BOX_BASE_DIR_RESOLVED, true);
+        entity.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, resolvedBase);
+        entity.config().set(ON_BOX_BASE_DIR_RESOLVED, true);
         return resolvedBase;
     }
 
@@ -764,7 +764,7 @@ public abstract class MachineLifecycleEffectorTasks {
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.ON_FIRE);
             Exceptions.propagate(e);
         }
-        entity().setAttribute(SoftwareProcess.SERVICE_UP, false);
+        entity().sensors().set(SoftwareProcess.SERVICE_UP, false);
         ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPED);
 
         DynamicTasks.queue("post-stop", new PostStopCustomTask());
@@ -809,7 +809,7 @@ public abstract class MachineLifecycleEffectorTasks {
                 return "Already stopped";
             }
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPING);
-            entity().setAttribute(SoftwareProcess.SERVICE_UP, false);
+            entity().sensors().set(SoftwareProcess.SERVICE_UP, false);
             preStopCustom();
             return null;
         }
@@ -961,10 +961,10 @@ public abstract class MachineLifecycleEffectorTasks {
      */
     protected void clearEntityLocationAttributes(Location machine) {
         entity().removeLocations(ImmutableList.of(machine));
-        entity().setAttribute(Attributes.HOSTNAME, null);
-        entity().setAttribute(Attributes.ADDRESS, null);
-        entity().setAttribute(Attributes.SUBNET_HOSTNAME, null);
-        entity().setAttribute(Attributes.SUBNET_ADDRESS, null);
+        entity().sensors().set(Attributes.HOSTNAME, null);
+        entity().sensors().set(Attributes.ADDRESS, null);
+        entity().sensors().set(Attributes.SUBNET_HOSTNAME, null);
+        entity().sensors().set(Attributes.SUBNET_ADDRESS, null);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricher.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricher.java b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricher.java
index 6d6acf7..fd9c32e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricher.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricher.java
@@ -62,7 +62,7 @@ public class SystemServiceEnricher extends AbstractEnricher implements Enricher
     }
 
     private void subscribeLaunch() {
-        subscribe(entity, Attributes.SERVICE_STATE_ACTUAL, new EntityLaunchListener(this));
+        subscriptions().subscribe(entity, Attributes.SERVICE_STATE_ACTUAL, new EntityLaunchListener(this));
     }
 
     public void onLaunched(Task<?> task) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java b/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
index 652ac76..d3af18c 100644
--- a/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
+++ b/software/base/src/main/java/org/apache/brooklyn/feed/jmx/JmxHelper.java
@@ -167,7 +167,7 @@ public class JmxHelper {
         this(toJmxUrl(entity), entity, entity.getAttribute(UsesJmx.JMX_USER), entity.getAttribute(UsesJmx.JMX_PASSWORD));
         
         if (entity.getAttribute(UsesJmx.JMX_URL) == null) {
-            entity.setAttribute(UsesJmx.JMX_URL, url);
+            entity.sensors().set(UsesJmx.JMX_URL, url);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
index 1c54ba1..5fbd5bd 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
@@ -535,7 +535,7 @@ services:
         // Clear the startup app so it's not started second time, in addition to the rebind state
         // TODO remove this once the startup app is created only if no previous persistence state
         brooklynNode.config().set(BrooklynNode.APP, (String)null);
-        ((EntityLocal)brooklynNode).setAttribute(BrooklynNode.APP, null);
+        ((EntityLocal)brooklynNode).sensors().set(BrooklynNode.APP, null);
         
         // Restart the process; expect persisted state to have been restored, so apps still known about
         brooklynNode.invoke(BrooklynNode.RESTART, ImmutableMap.<String, Object>of(

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeTest.java
index 6c777cf..27f627e 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeTest.java
@@ -97,7 +97,7 @@ public class BrooklynNodeTest {
         // TODO Using BrooklynNodeImpl directly, because want to instantiate a BroolynNodeSshDriver.
         //      Really want to make that easier to test, without going through "wrong" code path for creating entity.
         BrooklynNodeImpl entity = new BrooklynNodeImpl();
-        entity.setConfig(BrooklynNode.SUGGESTED_VERSION, version);
+        entity.config().set(BrooklynNode.SUGGESTED_VERSION, version);
         entity.setParent(app);
         Entities.manage(entity);
         ConfigToAttributes.apply(entity);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/MockBrooklynNode.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/MockBrooklynNode.java b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/MockBrooklynNode.java
index c07d899..32479d7 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/MockBrooklynNode.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/MockBrooklynNode.java
@@ -45,7 +45,7 @@ public class MockBrooklynNode extends AbstractEntity implements BrooklynNode {
         super.init();
         getMutableEntityType().addEffector(SetHighAvailabilityPriorityEffectorBody.SET_HIGH_AVAILABILITY_PRIORITY);
         getMutableEntityType().addEffector(SetHighAvailabilityModeEffectorBody.SET_HIGH_AVAILABILITY_MODE);
-        setAttribute(HA_PRIORITY, 0);
+        sensors().set(HA_PRIORITY, 0);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SameBrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SameBrooklynNodeImpl.java b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SameBrooklynNodeImpl.java
index 9fd2e5c..1277cad 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SameBrooklynNodeImpl.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SameBrooklynNodeImpl.java
@@ -63,7 +63,7 @@ public class SameBrooklynNodeImpl extends AbstractEntity implements BrooklynNode
     
     protected void connectSensors() {
         URI webConsoleUri = getManagementContext().getManagementNodeUri().orNull();
-        setAttribute(WEB_CONSOLE_URI, webConsoleUri);
+        sensors().set(WEB_CONSOLE_URI, webConsoleUri);
 
         if (webConsoleUri != null) {
             httpFeed = HttpFeed.builder()
@@ -77,7 +77,7 @@ public class SameBrooklynNodeImpl extends AbstractEntity implements BrooklynNode
                     .build();
 
         } else {
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
index 9669e02..4346d15 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
@@ -245,11 +245,11 @@ public class SelectMasterEffectorTest extends BrooklynAppUnitTestSupport {
     }
 
     public static void setManagementState(Entity entity, ManagementNodeState state) {
-        ((EntityLocal)entity).setAttribute(BrooklynNode.MANAGEMENT_NODE_STATE, state);
+        ((EntityLocal)entity).sensors().set(BrooklynNode.MANAGEMENT_NODE_STATE, state);
     }
 
     public static void setPriority(Entity entity, int priority) {
-        ((EntityLocal)entity).setAttribute(MockBrooklynNode.HA_PRIORITY, priority);
+        ((EntityLocal)entity).sensors().set(MockBrooklynNode.HA_PRIORITY, priority);
     }
 
     private void selectMaster(DynamicCluster cluster, String id) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/chef/ChefLiveTestSupport.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/chef/ChefLiveTestSupport.java b/software/base/src/test/java/org/apache/brooklyn/entity/chef/ChefLiveTestSupport.java
index f809523..b1772d6 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/chef/ChefLiveTestSupport.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/chef/ChefLiveTestSupport.java
@@ -93,7 +93,7 @@ public class ChefLiveTestSupport extends BrooklynAppLiveTestSupport {
     }
 
     public static void installBrooklynChefHostedConfig(Entity entity) {
-        ((EntityInternal)entity).setConfig(ChefConfig.KNIFE_CONFIG_FILE, ChefLiveTestSupport.installBrooklynChefHostedConfig());
+        ((EntityInternal)entity).config().set(ChefConfig.KNIFE_CONFIG_FILE, ChefLiveTestSupport.installBrooklynChefHostedConfig());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/chef/mysql/TypedToyMySqlEntityChef.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/chef/mysql/TypedToyMySqlEntityChef.java b/software/base/src/test/java/org/apache/brooklyn/entity/chef/mysql/TypedToyMySqlEntityChef.java
index 44a622a..c02dbc6 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/chef/mysql/TypedToyMySqlEntityChef.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/chef/mysql/TypedToyMySqlEntityChef.java
@@ -34,22 +34,22 @@ public class TypedToyMySqlEntityChef extends ChefEntityImpl {
 
         String password = "p4ssw0rd";
         
-        setConfig(CHEF_COOKBOOK_PRIMARY_NAME, "mysql");
-        setConfig(CHEF_COOKBOOK_URLS, ImmutableMap.of(
+        config().set(CHEF_COOKBOOK_PRIMARY_NAME, "mysql");
+        config().set(CHEF_COOKBOOK_URLS, ImmutableMap.of(
             "mysql", GithubUrls.tgz("opscode-cookbooks", "mysql", "v4.0.12"),
             "openssl", GithubUrls.tgz("opscode-cookbooks", "openssl", "v1.1.0"),
             "mysql", GithubUrls.tgz("opscode-cookbooks", "build-essential", "v1.4.4")));
         
-        setConfig(CHEF_LAUNCH_RUN_LIST, ImmutableSet.of("mysql::server"));
-        setConfig(CHEF_LAUNCH_ATTRIBUTES, ImmutableMap.<String,Object>of(
+        config().set(CHEF_LAUNCH_RUN_LIST, ImmutableSet.of("mysql::server"));
+        config().set(CHEF_LAUNCH_ATTRIBUTES, ImmutableMap.<String,Object>of(
             "mysql", ImmutableMap.of(
                 "server_root_password", password,
                 "server_repl_password", password,
                 "server_debian_password", password)));
         
-        setConfig(ChefConfig.PID_FILE, "/var/run/mysqld/mysqld.pid");
+        config().set(ChefConfig.PID_FILE, "/var/run/mysqld/mysqld.pid");
         
-        setConfig(CHEF_MODE, ChefModes.SOLO);
+        config().set(CHEF_MODE, ChefModes.SOLO);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
index 3d14b7f..7c25a4f 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
@@ -251,7 +251,7 @@ public class JavaOptsTest extends BrooklynAppUnitTestSupport {
     public static class TestingNoSensorsVanillaJavaAppImpl extends VanillaJavaAppImpl {
         protected void connectSensors() {
             /* nothing here */
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/java/JmxSupportTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/java/JmxSupportTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/java/JmxSupportTest.java
index 667c270..10fced5 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/java/JmxSupportTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/java/JmxSupportTest.java
@@ -59,7 +59,7 @@ public class JmxSupportTest {
 
     public void testJmxmpJarExistence() {
         app = TestApplication.Factory.newManagedInstanceForTests();
-        app.setConfig(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMXMP);
+        app.config().set(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMXMP);
         JmxSupport support = new JmxSupport(app, null);
         
         Assert.assertEquals(support.getJmxAgentJarMavenArtifact().getArtifactId(),
@@ -72,7 +72,7 @@ public class JmxSupportTest {
     public void testJmxrmiJarExistence() {
         app = TestApplication.Factory.newManagedInstanceForTests();
         JmxSupport support = new JmxSupport(app, null);
-        app.setConfig(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
+        app.config().set(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
         
         Assert.assertEquals(support.getJmxAgentJarMavenArtifact().getArtifactId(),
                 "brooklyn-jmxrmi-agent");
@@ -98,7 +98,7 @@ public class JmxSupportTest {
     @Test(groups="Integration")
     public void testJmxmpJarHostedValidity() {
         app = TestApplication.Factory.newManagedInstanceForTests();
-        app.setConfig(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMXMP);
+        app.config().set(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMXMP);
         JmxSupport support = new JmxSupport(app, null);
 
         // make sure we get a valid jar, big enough (no redirect, and classifier correclty set for this!)
@@ -110,7 +110,7 @@ public class JmxSupportTest {
     public void testJmxrmiJarHostedValidity() {
         app = TestApplication.Factory.newManagedInstanceForTests();
         JmxSupport support = new JmxSupport(app, null);
-        app.setConfig(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
+        app.config().set(JmxSupport.JMX_AGENT_MODE, JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
         
         // make sure we get a valid jar, big enough (no redirect)
         checkValidArchive(MavenRetriever.hostedUrl(support.getJmxAgentJarMavenArtifact()), 4000);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppRebindTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppRebindTest.java
index d10f43a..c2187a4 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppRebindTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppRebindTest.java
@@ -160,13 +160,13 @@ public class VanillaJavaAppRebindTest {
         public void onManagementStarted() {
             super.onManagementStarted();
             LOG.info("mgmt started for "+this);
-            addEnricher(new RollingTimeWindowMeanEnricher<Double>(this, PROCESS_CPU_TIME, AVG1, Duration.TEN_SECONDS));
+            enrichers().add(new RollingTimeWindowMeanEnricher<Double>(this, PROCESS_CPU_TIME, AVG1, Duration.TEN_SECONDS));
         }
         @Override
         protected void connectSensors() {
             super.connectSensors();
             LOG.info("connecting sensors for "+this);
-            addEnricher(new RollingTimeWindowMeanEnricher<Double>(this, PROCESS_CPU_TIME, AVG2, Duration.TEN_SECONDS));
+            enrichers().add(new RollingTimeWindowMeanEnricher<Double>(this, PROCESS_CPU_TIME, AVG2, Duration.TEN_SECONDS));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppTest.java
index 20e3e63..5533d19 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/java/VanillaJavaAppTest.java
@@ -119,7 +119,7 @@ public class VanillaJavaAppTest {
         final VanillaJavaApp javaProcess = app.createAndManageChild(EntitySpec.create(VanillaJavaApp.class)
             .configure("main", "my.Main").configure("classpath", ImmutableList.of("c1", "c2"))
             .configure("args", ImmutableList.of("a1", "a2")));
-        ((EntityLocal)javaProcess).setConfig(UsesJava.JAVA_SYSPROPS, ImmutableMap.of("fooKey", "fooValue", "barKey", "barValue"));
+        ((EntityLocal)javaProcess).config().set(UsesJava.JAVA_SYSPROPS, ImmutableMap.of("fooKey", "fooValue", "barKey", "barValue"));
         // TODO: how to test: launch standalone app that outputs system properties to stdout? Probe via JMX?
     }
 
@@ -243,7 +243,7 @@ public class VanillaJavaAppTest {
         VanillaJavaApp javaProcess = app.createAndManageChild(EntitySpec.create(VanillaJavaApp.class)
             .configure("main", main).configure("classpath", ImmutableList.of(BROOKLYN_THIS_CLASSPATH))
             .configure("args", ImmutableList.of()));
-        ((EntityLocal)javaProcess).setConfig(UsesJmx.JMX_PORT, PortRanges.fromInteger(port));
+        ((EntityLocal)javaProcess).config().set(UsesJmx.JMX_PORT, PortRanges.fromInteger(port));
         app.start(ImmutableList.of(loc));
 
         assertEquals(javaProcess.getAttribute(UsesJmx.JMX_PORT), (Integer)port);
@@ -257,8 +257,8 @@ public class VanillaJavaAppTest {
         final VanillaJavaApp javaProcess = app.createAndManageChild(EntitySpec.create(VanillaJavaApp.class)
             .configure("main", main).configure("classpath", ImmutableList.of(BROOKLYN_THIS_CLASSPATH))
             .configure("args", ImmutableList.of()));
-        ((EntityLocal)javaProcess).setConfig(UsesJmx.JMX_PORT, PortRanges.fromInteger(port));
-        ((EntityLocal)javaProcess).setConfig(UsesJmx.JMX_SSL_ENABLED, true);
+        ((EntityLocal)javaProcess).config().set(UsesJmx.JMX_PORT, PortRanges.fromInteger(port));
+        ((EntityLocal)javaProcess).config().set(UsesJmx.JMX_SSL_ENABLED, true);
         
         app.start(ImmutableList.of(loc));
         // will fail above if JMX can't connect, but also do some add'l checks

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/DoNothingSoftwareProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/DoNothingSoftwareProcessImpl.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/DoNothingSoftwareProcessImpl.java
index 89beda6..d0be73b 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/DoNothingSoftwareProcessImpl.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/DoNothingSoftwareProcessImpl.java
@@ -32,7 +32,7 @@ public class DoNothingSoftwareProcessImpl extends SoftwareProcessImpl implements
     protected void connectSensors() {
         super.connectSensors();
         if (getAttribute(SERVICE_STATE_ACTUAL) == Lifecycle.STARTING) {
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java
index 6da0269..20bc6a6 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityLatchTest.java
@@ -127,7 +127,7 @@ public class SoftwareProcessEntityLatchTest extends BrooklynAppUnitTestSupport {
         assertDriverEventsEquals(entity, preLatchEvents);
 
         assertFalse(task.isDone());
-        ((EntityLocal)triggerEntity).setAttribute(Attributes.SERVICE_UP, true);
+        ((EntityLocal)triggerEntity).sensors().set(Attributes.SERVICE_UP, true);
         task.get(Duration.THIRTY_SECONDS);
         assertDriverEventsEquals(entity, ImmutableList.of("setup", "copyInstallResources", "install", "customize", "copyRuntimeResources", "launch"));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityRebindTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityRebindTest.java
index 104a046..4b6e9ce 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityRebindTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityRebindTest.java
@@ -101,7 +101,7 @@ public class SoftwareProcessEntityRebindTest extends BrooklynAppUnitTestSupport
     public void testCreatesDriverAfterRebind() throws Exception {
         origE = app.createAndManageChild(EntitySpec.create(MyService.class));
         //the entity skips enricher initialization, do it explicitly
-        origE.addEnricher(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
+        origE.enrichers().add(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
 
         MyProvisioningLocation origLoc = mgmt.getLocationManager().createLocation(LocationSpec.create(MyProvisioningLocation.class)
                 .displayName("mylocname"));
@@ -121,7 +121,7 @@ public class SoftwareProcessEntityRebindTest extends BrooklynAppUnitTestSupport
     public void testDoesNotCreateDriverAfterRebind() throws Exception {
         origE = app.createAndManageChild(EntitySpec.create(MyService.class));
         //the entity skips enricher initialization, do it explicitly
-        origE.addEnricher(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
+        origE.enrichers().add(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
         
         MyProvisioningLocation origLoc = mgmt.getLocationManager().createLocation(LocationSpec.create(MyProvisioningLocation.class)
                 .displayName("mylocname"));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
index 0b71a5a..3af7fe5 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
@@ -360,7 +360,7 @@ public class SoftwareProcessEntityTest extends BrooklynAppUnitTestSupport {
         d.events.clear();
 
         if (isEntityStopped) {
-            ((EntityInternal)entity).setAttribute(ServiceStateLogic.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
+            ((EntityInternal)entity).sensors().set(ServiceStateLogic.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
         }
 
         TaskAdaptable<Void> t1 = Entities.submit(entity, Effectors.invocation(entity, Startable.STOP,
@@ -678,21 +678,21 @@ public class SoftwareProcessEntityTest extends BrooklynAppUnitTestSupport {
         public void stop() {
             events.add("stop");
             launched = false;
-            entity.setAttribute(Startable.SERVICE_UP, false);
-            entity.setAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
+            entity.sensors().set(Startable.SERVICE_UP, false);
+            entity.sensors().set(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
         }
     
         @Override
         public void kill() {
             events.add("kill");
             launched = false;
-            entity.setAttribute(Startable.SERVICE_UP, false);
+            entity.sensors().set(Startable.SERVICE_UP, false);
         }
     
         @Override
         public void install() {
             events.add("install");
-            entity.setAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
+            entity.sensors().set(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
         }
     
         @Override
@@ -704,8 +704,8 @@ public class SoftwareProcessEntityTest extends BrooklynAppUnitTestSupport {
         public void launch() {
             events.add("launch");
             launched = true;
-            entity.setAttribute(Startable.SERVICE_UP, true);
-            entity.setAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+            entity.sensors().set(Startable.SERVICE_UP, true);
+            entity.sensors().set(SoftwareProcess.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessSshDriverIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessSshDriverIntegrationTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessSshDriverIntegrationTest.java
index 7dc689c..69aeb0a 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessSshDriverIntegrationTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessSshDriverIntegrationTest.java
@@ -130,7 +130,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
 
     @Test(groups="Integration")
     public void testLocalhostInCustom() throws Exception {
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
 
         MyService entity = app.createAndManageChild(EntitySpec.create(MyService.class));
         app.start(ImmutableList.of(localhost));
@@ -158,7 +158,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
         File tempLocal = new File(tempDataDir, "tempLocal.txt");
         Files.write(tempLocalContent, tempLocal, Charsets.UTF_8);
         
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
 
         MyService entity = app.createAndManageChild(EntitySpec.create(MyService.class));
         app.start(ImmutableList.of(localhost));
@@ -209,7 +209,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
         File tempLocal = new File(tempDataDir, "tempLocal.txt");
         Files.write(tempLocalContent, tempLocal, Charsets.UTF_8);
         
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
 
         MyService entity = app.createAndManageChild(EntitySpec.create(MyService.class));
         app.start(ImmutableList.of(localhost));
@@ -234,7 +234,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
     @Test(groups="Integration")
     public void testPreAndPostLaunchCommands() throws IOException {
         File tempFile = new File(tempDataDir, "tempFile.txt");
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
         app.createAndManageChild(EntitySpec.create(VanillaSoftwareProcess.class)
                 .configure(VanillaSoftwareProcess.CHECK_RUNNING_COMMAND, "")
                 .configure(SoftwareProcess.PRE_LAUNCH_COMMAND, String.format("echo inPreLaunch >> %s", tempFile.getAbsoluteFile()))
@@ -252,7 +252,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
 
     @Test(groups="Integration")
     public void testInstallResourcesCopy() throws IOException {
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
         File template = new File(Os.tmp(), "template.yaml");
         VanillaSoftwareProcess entity = app.createAndManageChild(EntitySpec.create(VanillaSoftwareProcess.class)
                 .configure(VanillaSoftwareProcess.CHECK_RUNNING_COMMAND, "")
@@ -286,7 +286,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
 
     @Test(groups="Integration")
     public void testRuntimeResourcesCopy() throws IOException {
-        localhost.setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
+        localhost.config().set(BrooklynConfigKeys.ONBOX_BASE_DIR, tempDataDir.getAbsolutePath());
         File template = new File(Os.tmp(), "template.yaml");
         VanillaSoftwareProcess entity = app.createAndManageChild(EntitySpec.create(VanillaSoftwareProcess.class)
                 .configure(VanillaSoftwareProcess.CHECK_RUNNING_COMMAND, "")
@@ -364,7 +364,7 @@ public class SoftwareProcessSshDriverIntegrationTest {
         public void launch() {
             events.add("launch");
             launched = true;
-            entity.setAttribute(Startable.SERVICE_UP, true);
+            entity.sensors().set(Startable.SERVICE_UP, true);
         }
         
         @Override
@@ -376,14 +376,14 @@ public class SoftwareProcessSshDriverIntegrationTest {
         public void stop() {
             events.add("stop");
             launched = false;
-            entity.setAttribute(Startable.SERVICE_UP, false);
+            entity.sensors().set(Startable.SERVICE_UP, false);
         }
     
         @Override
         public void kill() {
             events.add("kill");
             launched = false;
-            entity.setAttribute(Startable.SERVICE_UP, false);
+            entity.sensors().set(Startable.SERVICE_UP, false);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasksTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasksTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasksTest.java
index d336ad0..3c1f6c5 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasksTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasksTest.java
@@ -60,7 +60,7 @@ public class MachineLifecycleEffectorTasksTest {
     public static boolean canStop(StopMode stopMode, boolean isEntityStopped) {
         BasicEntityImpl entity = new BasicEntityImpl();
         Lifecycle state = isEntityStopped ? Lifecycle.STOPPED : Lifecycle.RUNNING;
-        entity.setAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL, state);
+        entity.sensors().set(SoftwareProcess.SERVICE_STATE_ACTUAL, state);
         return MachineLifecycleEffectorTasks.canStop(stopMode, entity);
     }
     
@@ -107,7 +107,7 @@ public class MachineLifecycleEffectorTasksTest {
             }
         });
         try {
-            ((EntityLocal) triggerEntity).setAttribute(ready, true);
+            ((EntityLocal) triggerEntity).sensors().set(ready, true);
             task.get(Duration.THIRTY_SECONDS);
         } catch (Throwable t) {
             Exceptions.propagateIfFatal(t);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/StartStopSshDriverTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/StartStopSshDriverTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/StartStopSshDriverTest.java
index 207ff47..33abadd 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/StartStopSshDriverTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/lifecycle/StartStopSshDriverTest.java
@@ -125,7 +125,7 @@ public class StartStopSshDriverTest {
 
     @Test(groups="Integration")
     public void testSshScriptHeaderUsedWhenSpecified() {
-        entity.setConfig(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho hello world");
+        entity.config().set(BrooklynConfigKeys.SSH_CONFIG_SCRIPT_HEADER, "#!/bin/bash -e\necho hello world");
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         driver.execute(ImmutableMap.of("out", out), Arrays.asList("echo goodbye"), "test");
         String s = out.toString();
@@ -137,7 +137,7 @@ public class StartStopSshDriverTest {
 
     @Test(groups="Integration")
     public void testSshCliPickedUpWhenSpecified() {
-        entity.setConfig(BrooklynConfigKeys.SSH_TOOL_CLASS, SshCliTool.class.getName());
+        entity.config().set(BrooklynConfigKeys.SSH_TOOL_CLASS, SshCliTool.class.getName());
         driver.execute(Arrays.asList("echo hi"), "test");
         assertTrue(sshMachineLocation.lastTool instanceof SshCliTool, "expect CLI tool, got "+
                         (sshMachineLocation.lastTool!=null ? ""+sshMachineLocation.lastTool.getClass()+":" : "") + sshMachineLocation.lastTool);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
index c26b01b..0ab5539 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
@@ -143,20 +143,20 @@ public class DynamicToyMySqlEntityBuilder {
                 }
 
                 // and set the PID
-                entity().setAttribute(Attributes.PID, 
+                entity().sensors().set(Attributes.PID, 
                         Integer.parseInt(DynamicTasks.queue(SshEffectorTasks.ssh("cat "+dir(entity)+"/*/data/*.pid")).block().getStdout().trim()));
                 
                 // TODO Without this, tests fail because nothing else sets serviceUp!
                 // Really should set this with a Feed that checks pid periodically.
                 // Should this instead be using SERVICE_NOT_UP_INDICATORS?
-                entity().setAttribute(Attributes.SERVICE_UP, true);
+                entity().sensors().set(Attributes.SERVICE_UP, true);
             }
 
             @Override
             protected String stopProcessesAtMachine() {
                 // TODO Where is best place to set? 
                 // Really should set this with a Feed that checks pid periodically.
-                entity().setAttribute(Attributes.SERVICE_UP, false);
+                entity().sensors().set(Attributes.SERVICE_UP, false);
                 
                 Integer pid = entity().getAttribute(Attributes.PID);
                 if (pid==null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/feed/jmx/JmxFeedTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/feed/jmx/JmxFeedTest.java b/software/base/src/test/java/org/apache/brooklyn/feed/jmx/JmxFeedTest.java
index 6b78930..a90d657 100644
--- a/software/base/src/test/java/org/apache/brooklyn/feed/jmx/JmxFeedTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/feed/jmx/JmxFeedTest.java
@@ -112,12 +112,12 @@ public class JmxFeedTest {
     
     public static class TestEntityWithJmx extends TestEntityImpl {
         @Override public void init() {
-            setAttribute(Attributes.HOSTNAME, "localhost");
-            setAttribute(UsesJmx.JMX_PORT, 
+            sensors().set(Attributes.HOSTNAME, "localhost");
+            sensors().set(UsesJmx.JMX_PORT, 
                     LocalhostMachineProvisioningLocation.obtainPort(PortRanges.fromString("40123+")));
             // only supports no-agent, at the moment
-            setConfig(UsesJmx.JMX_AGENT_MODE, JmxAgentModes.NONE);
-            setAttribute(UsesJmx.RMI_REGISTRY_PORT, -1);  // -1 means to use the JMX_PORT only
+            config().set(UsesJmx.JMX_AGENT_MODE, JmxAgentModes.NONE);
+            sensors().set(UsesJmx.RMI_REGISTRY_PORT, -1);  // -1 means to use the JMX_PORT only
             ConfigToAttributes.apply(this, UsesJmx.JMX_CONTEXT);
         }
     }
@@ -354,7 +354,7 @@ public class JmxFeedTest {
             app2.start(ImmutableList.of(new SimulatedLocation()));
             
             final List<SensorEvent<String>> received = Lists.newArrayList();
-            app2.subscribe(null, EntityWithEmitter.MY_NOTIF, new SensorEventListener<String>() {
+            app2.subscriptions().subscribe(null, EntityWithEmitter.MY_NOTIF, new SensorEventListener<String>() {
                 public void onEvent(SensorEvent<String> event) {
                     received.add(event);
                 }});
@@ -366,7 +366,7 @@ public class JmxFeedTest {
             jmxHelper.addNotificationListener(jmxObjectName, new NotificationListener() {
                     public void handleNotification(Notification notif, Object callback) {
                         if (notif.getType().equals("one")) {
-                            entity.emit(EntityWithEmitter.MY_NOTIF, (String) notif.getUserData());
+                            entity.sensors().emit(EntityWithEmitter.MY_NOTIF, (String) notif.getUserData());
                         }
                     }});
             

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/base/src/test/java/org/apache/brooklyn/feed/jmx/RebindJmxFeedTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/feed/jmx/RebindJmxFeedTest.java b/software/base/src/test/java/org/apache/brooklyn/feed/jmx/RebindJmxFeedTest.java
index f521932..d16bef1 100644
--- a/software/base/src/test/java/org/apache/brooklyn/feed/jmx/RebindJmxFeedTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/feed/jmx/RebindJmxFeedTest.java
@@ -112,7 +112,7 @@ public class RebindJmxFeedTest extends RebindTestFixtureWithApp {
         assertEquals(newFeeds.size(), 1);
         
         // Expect the feed to still be polling
-        newEntity.setAttribute(SENSOR_STRING, null);
+        newEntity.sensors().set(SENSOR_STRING, null);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_STRING, "myval");
     }
 
@@ -124,12 +124,12 @@ public class RebindJmxFeedTest extends RebindTestFixtureWithApp {
             // TODO Auto-generated method stub
             super.start(locs);
             
-            setAttribute(Attributes.HOSTNAME, "localhost");
-            setAttribute(UsesJmx.JMX_PORT, 
+            sensors().set(Attributes.HOSTNAME, "localhost");
+            sensors().set(UsesJmx.JMX_PORT, 
                     LocalhostMachineProvisioningLocation.obtainPort(PortRanges.fromString("40123+")));
             // only supports no-agent, at the moment
-            setConfig(UsesJmx.JMX_AGENT_MODE, JmxAgentModes.NONE);
-            setAttribute(UsesJmx.RMI_REGISTRY_PORT, -1);  // -1 means to use the JMX_PORT only
+            config().set(UsesJmx.JMX_AGENT_MODE, JmxAgentModes.NONE);
+            sensors().set(UsesJmx.RMI_REGISTRY_PORT, -1);  // -1 means to use the JMX_PORT only
             ConfigToAttributes.apply(this, UsesJmx.JMX_CONTEXT);
             
             JmxFeed.Builder feedBuilder = JmxFeed.builder()

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/crate/CrateNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/crate/CrateNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/crate/CrateNodeImpl.java
index 40f0989..f72e2ef 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/crate/CrateNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/crate/CrateNodeImpl.java
@@ -49,9 +49,9 @@ public class CrateNodeImpl extends SoftwareProcessImpl implements CrateNode{
         super.connectSensors();
         connectServiceUpIsRunning();
         jmxFeed = JavaAppUtils.connectMXBeanSensors(this);
-        setAttribute(DATASTORE_URL, "crate://" + getAttribute(HOSTNAME) + ":" + getPort());
+        sensors().set(DATASTORE_URL, "crate://" + getAttribute(HOSTNAME) + ":" + getPort());
         String url = "http://" + getAttribute(HOSTNAME) + ":" + getHttpPort();
-        setAttribute(MANAGEMENT_URL, url);
+        sensors().set(MANAGEMENT_URL, url);
 
         httpFeed = HttpFeed.builder()
                 .entity(this)
@@ -74,7 +74,7 @@ public class CrateNodeImpl extends SoftwareProcessImpl implements CrateNode{
                         .onSuccess(HttpValueFunctions.jsonContents(new String[] {"version", "es_version"}, String.class)))
                 .build();
 
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                 .from(SERVER_OK)
                 .computing(Functionals.ifNotEquals(true).value("Crate server reports it is not ok."))
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
index c23c616..86a8bfb 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
@@ -65,7 +65,7 @@ public class MariaDbNodeImpl extends SoftwareProcessImpl implements MariaDbNode
     @Override
     protected void connectSensors() {
         super.connectSensors();
-        setAttribute(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MARIADB_PORT)));
+        sensors().set(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MARIADB_PORT)));
 
         /*        
          * TODO status gives us things like:
@@ -95,7 +95,7 @@ public class MariaDbNodeImpl extends SoftwareProcessImpl implements MariaDbNode
                     .build();
         } else {
             LOG.warn("Location(s) {} not an ssh-machine location, so not polling for status; setting serviceUp immediately", getLocations());
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
 
@@ -112,14 +112,14 @@ public class MariaDbNodeImpl extends SoftwareProcessImpl implements MariaDbNode
     public String getSocketUid() {
         String result = getAttribute(MariaDbNode.SOCKET_UID);
         if (Strings.isBlank(result))
-            setAttribute(MariaDbNode.SOCKET_UID, (result = Identifiers.makeRandomId(6)));
+            sensors().set(MariaDbNode.SOCKET_UID, (result = Identifiers.makeRandomId(6)));
         return result;
     }
 
     public String getPassword() {
         String result = getAttribute(MariaDbNode.PASSWORD);
         if (Strings.isBlank(result))
-            setAttribute(MariaDbNode.PASSWORD, (result = Identifiers.makeRandomId(6)));
+            sensors().set(MariaDbNode.PASSWORD, (result = Identifiers.makeRandomId(6)));
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
index c7a4936..dedba55 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
@@ -63,7 +63,7 @@ public class MariaDbSshDriver extends AbstractSoftwareProcessSshDriver implement
     public MariaDbSshDriver(MariaDbNodeImpl entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFile());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFile());
     }
 
     public String getOsTag() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlClusterImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlClusterImpl.java
index 63c5779..9cebb21 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlClusterImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlClusterImpl.java
@@ -41,7 +41,6 @@ import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic.ServiceNotUpL
 import org.apache.brooklyn.core.sensor.DependentConfiguration;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.enricher.stock.Enrichers;
-import org.apache.brooklyn.entity.database.DatastoreMixins;
 import org.apache.brooklyn.entity.group.DynamicClusterImpl;
 import org.apache.brooklyn.feed.function.FunctionFeed;
 import org.apache.brooklyn.feed.function.FunctionPollConfig;
@@ -91,12 +90,12 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
     public void init() {
         super.init();
         // Set id supplier in attribute so it is serialized
-        setAttribute(SLAVE_NEXT_SERVER_ID, new NextServerIdSupplier());
-        setAttribute(SLAVE_ID_ADDRESS_MAPPING, new ConcurrentHashMap<String, String>());
+        sensors().set(SLAVE_NEXT_SERVER_ID, new NextServerIdSupplier());
+        sensors().set(SLAVE_ID_ADDRESS_MAPPING, new ConcurrentHashMap<String, String>());
         if (getConfig(SLAVE_PASSWORD) == null) {
-            setAttribute(SLAVE_PASSWORD, Identifiers.makeRandomId(8));
+            sensors().set(SLAVE_PASSWORD, Identifiers.makeRandomId(8));
         } else {
-            setAttribute(SLAVE_PASSWORD, getConfig(SLAVE_PASSWORD));
+            sensors().set(SLAVE_PASSWORD, getConfig(SLAVE_PASSWORD));
         }
         initSubscriptions();
     }
@@ -108,8 +107,8 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
     }
 
     private void initSubscriptions() {
-        subscribeToMembers(this, MySqlNode.SERVICE_PROCESS_IS_RUNNING, new NodeRunningListener(this));
-        subscribe(this, MEMBER_REMOVED, new MemberRemovedListener());
+        subscriptions().subscribeToMembers(this, MySqlNode.SERVICE_PROCESS_IS_RUNNING, new NodeRunningListener(this));
+        subscriptions().subscribe(this, MEMBER_REMOVED, new MemberRemovedListener());
     }
 
     @Override
@@ -122,7 +121,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
         propagateMasterAttribute(MySqlNode.MYSQL_PORT);
         propagateMasterAttribute(MySqlNode.DATASTORE_URL);
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(MySqlNode.DATASTORE_URL)
                 .publishing(SLAVE_DATASTORE_URL_LIST)
                 .computing(Functions.<Collection<String>>identity())
@@ -130,7 +129,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
                 .fromMembers()
                 .build());
 
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(MySqlNode.QUERIES_PER_SECOND_FROM_MYSQL)
                 .publishing(QUERIES_PER_SECOND_FROM_MYSQL_PER_NODE)
                 .fromMembers()
@@ -140,7 +139,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
     }
 
     private void propagateMasterAttribute(AttributeSensor<?> att) {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(att)
                 .publishing(att)
                 .computing(IfFunctions.ifPredicate(CollectionFunctionals.notEmpty())
@@ -227,7 +226,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
                         .description("Polls SHOW SLAVE STATUS"))
                 .build());
 
-            node.addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+            node.enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
                     .from(MySqlSlave.SLAVE_HEALTHY)
                     .computing(Functionals.ifNotEquals(true).value("Slave replication status is not healthy") )
                     .build());
@@ -264,7 +263,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
             Map<String, String> status = MySqlRowParser.parseSingle(result);
             String secondsBehindMaster = status.get("Seconds_Behind_Master");
             if (secondsBehindMaster != null && !"NULL".equals(secondsBehindMaster)) {
-                ((EntityLocal)slave).setAttribute(MySqlSlave.SLAVE_SECONDS_BEHIND_MASTER, new Integer(secondsBehindMaster));
+                slave.sensors().set(MySqlSlave.SLAVE_SECONDS_BEHIND_MASTER, new Integer(secondsBehindMaster));
             }
             return "Yes".equals(status.get("Slave_IO_Running")) && "Yes".equals(status.get("Slave_SQL_Running"));
         }
@@ -309,11 +308,11 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
             Map<String, String> status = MySqlRowParser.parseSingle(binLogInfo);
             String file = status.get("File");
             if (file != null) {
-                ((EntityInternal)master).setAttribute(MySqlMaster.MASTER_LOG_FILE, file);
+                ((EntityInternal)master).sensors().set(MySqlMaster.MASTER_LOG_FILE, file);
             }
             String position = status.get("Position");
             if (position != null) {
-                ((EntityInternal)master).setAttribute(MySqlMaster.MASTER_LOG_POSITION, new Integer(position));
+                ((EntityInternal)master).sensors().set(MySqlMaster.MASTER_LOG_POSITION, new Integer(position));
             }
 
             //NOTE: Will be executed on each start, analogously to the standard CREATION_SCRIPT config
@@ -387,7 +386,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
                     !Boolean.TRUE.equals(node.getAttribute(NODE_REPLICATION_INITIALIZED))) {
 
                 // Events executed sequentially so no need to synchronize here.
-                ((EntityLocal)node).setAttribute(NODE_REPLICATION_INITIALIZED, Boolean.TRUE);
+                node.sensors().set(NODE_REPLICATION_INITIALIZED, Boolean.TRUE);
 
                 DynamicTasks.queueIfPossible(TaskBuilder.builder()
                         .displayName("Configure master-slave replication on node")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlNodeImpl.java
index 5346fcb..dd0aac7 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlNodeImpl.java
@@ -84,7 +84,7 @@ public class MySqlNodeImpl extends SoftwareProcessImpl implements MySqlNode {
     @Override
     protected void connectSensors() {
         super.connectSensors();
-        setAttribute(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MYSQL_PORT)));
+        sensors().set(DATASTORE_URL, String.format("mysql://%s:%s/", getAttribute(HOSTNAME), getAttribute(MYSQL_PORT)));
         
         /*        
          * TODO status gives us things like:
@@ -119,7 +119,7 @@ public class MySqlNodeImpl extends SoftwareProcessImpl implements MySqlNode {
                     .build();
         } else {
             LOG.warn("Location(s) {} not an ssh-machine location, so not polling for status; setting serviceUp immediately", getLocations());
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         }
     }
     
@@ -137,7 +137,7 @@ public class MySqlNodeImpl extends SoftwareProcessImpl implements MySqlNode {
         String result = getAttribute(MySqlNode.SOCKET_UID);
         if (Strings.isBlank(result)) {
             result = Identifiers.makeRandomId(6);
-            setAttribute(MySqlNode.SOCKET_UID, result);
+            sensors().set(MySqlNode.SOCKET_UID, result);
         }
         return result;
     }
@@ -146,7 +146,7 @@ public class MySqlNodeImpl extends SoftwareProcessImpl implements MySqlNode {
         String result = getAttribute(MySqlNode.PASSWORD);
         if (Strings.isBlank(result)) {
             result = Identifiers.makeRandomId(6);
-            setAttribute(MySqlNode.PASSWORD, result);
+            sensors().set(MySqlNode.PASSWORD, result);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
index 313a583..30d9abd 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
@@ -70,7 +70,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
     public MySqlSshDriver(MySqlNodeImpl entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFile());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFile());
     }
 
     public String getOsTag() {
@@ -228,7 +228,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
 
     @Override
     public void launch() {
-        entity.setAttribute(MySqlNode.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
+        entity.sensors().set(MySqlNode.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
         newScript(MutableMap.of("usePidFile", true), LAUNCHING)
             .updateTaskAndFailOnNonZeroResultCode()
             .body.append(format("nohup %s/bin/mysqld --defaults-file=%s --user=`whoami` > %s 2>&1 < /dev/null &", getBaseDir(), getConfigFile(), getLogFile()))

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImplFromScratch.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImplFromScratch.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImplFromScratch.java
index 5f55ae8..96e65a5 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImplFromScratch.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImplFromScratch.java
@@ -133,7 +133,7 @@ public class PostgreSqlNodeChefImplFromScratch extends EffectorStartableImpl imp
     }
     
     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)));
 
         Maybe<SshMachineLocation> machine = Locations.findUniqueSshMachineLocation(getLocations());
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
index 60a53c2..b4d1501 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
@@ -60,7 +60,7 @@ public class PostgreSqlNodeImpl extends SoftwareProcessImpl implements PostgreSq
     protected void connectSensors() {
         super.connectSensors();
         connectServiceUpIsRunning();
-        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)));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index 5ff70fe..475c356 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -80,7 +80,7 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver implem
     public PostgreSqlSshDriver(PostgreSqlNodeImpl entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFile());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFile());
     }
 
     /*
@@ -336,7 +336,7 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver implem
         if(Strings.isEmpty(config)) {
             config = def;
             log.debug(entity + " has no config specified for " + key + "; using default `" + def + "`");
-            entity.setAttribute(key, config);
+            entity.sensors().set(key, config);
         }
         return config;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
index 429c7aa..44f898a 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepNodeImpl.java
@@ -49,12 +49,12 @@ public class RubyRepNodeImpl extends SoftwareProcessImpl implements RubyRepNode
 
         DatastoreCommon leftNode = getConfig(LEFT_DATABASE);
         if (leftNode != null) {
-            setAttribute(LEFT_DATASTORE_URL, Entities.submit(this, DependentConfiguration.attributeWhenReady(leftNode, DatastoreCommon.DATASTORE_URL)).getUnchecked(getDatabaseStartupDelay()));
+            sensors().set(LEFT_DATASTORE_URL, Entities.submit(this, DependentConfiguration.attributeWhenReady(leftNode, DatastoreCommon.DATASTORE_URL)).getUnchecked(getDatabaseStartupDelay()));
         }
 
         DatastoreCommon rightNode = getConfig(RIGHT_DATABASE);
         if (rightNode != null) {
-            setAttribute(RIGHT_DATASTORE_URL, Entities.submit(this, DependentConfiguration.attributeWhenReady(rightNode, DatastoreCommon.DATASTORE_URL)).getUnchecked(getDatabaseStartupDelay()));
+            sensors().set(RIGHT_DATASTORE_URL, Entities.submit(this, DependentConfiguration.attributeWhenReady(rightNode, DatastoreCommon.DATASTORE_URL)).getUnchecked(getDatabaseStartupDelay()));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
index ef58f13..4d0a9ef 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java
@@ -46,7 +46,7 @@ public class RubyRepSshDriver extends AbstractSoftwareProcessSshDriver implement
     public RubyRepSshDriver(EntityLocal entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
     }
 
     protected String getLogFileLocation() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQBrokerImpl.java
index 3e9dd2b..22719d0 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQBrokerImpl.java
@@ -52,7 +52,7 @@ public class ActiveMQBrokerImpl extends JMSBrokerImpl<ActiveMQQueue, ActiveMQTop
     }
     
     public void setBrokerUrl() {
-        setAttribute(BROKER_URL, String.format("tcp://%s:%d", getAttribute(HOSTNAME), getAttribute(OPEN_WIRE_PORT)));
+        sensors().set(BROKER_URL, String.format("tcp://%s:%d", getAttribute(HOSTNAME), getAttribute(OPEN_WIRE_PORT)));
     }
     
     public Integer getJmxPort() {
@@ -89,7 +89,7 @@ public class ActiveMQBrokerImpl extends JMSBrokerImpl<ActiveMQQueue, ActiveMQTop
 
     @Override     
     protected void connectSensors() {
-        setAttribute(BROKER_URL, String.format("tcp://%s:%d", getAttribute(HOSTNAME), getAttribute(OPEN_WIRE_PORT)));
+        sensors().set(BROKER_URL, String.format("tcp://%s:%d", getAttribute(HOSTNAME), getAttribute(OPEN_WIRE_PORT)));
         
         String brokerMbeanName = "org.apache.activemq:type=Broker,brokerName=" + getBrokerName();
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
index daa121e..f696c02 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
@@ -32,7 +32,7 @@ public class ActiveMQQueueImpl extends ActiveMQDestinationImpl implements Active
     @Override
     public void onManagementStarting() {
         super.onManagementStarting();
-        setAttribute(QUEUE_NAME, getName());
+        sensors().set(QUEUE_NAME, getName());
     }
 
     public String getQueueName() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
index 1724b1f..365b7b7 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
@@ -26,7 +26,7 @@ public class ActiveMQTopicImpl extends ActiveMQDestinationImpl implements Active
     @Override
     public void onManagementStarting() {
         super.onManagementStarting();
-        setAttribute(TOPIC_NAME, getName());
+        sensors().set(TOPIC_NAME, getName());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
index 56db260..8804202 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaBrokerImpl.java
@@ -18,21 +18,18 @@
  */
 package org.apache.brooklyn.entity.messaging.kafka;
 
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import javax.management.ObjectName;
 
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.core.entity.Entities;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.entity.messaging.MessageBroker;
 import org.apache.brooklyn.entity.software.base.SoftwareProcessImpl;
 import org.apache.brooklyn.entity.zookeeper.ZooKeeperNode;
 import org.apache.brooklyn.feed.jmx.JmxAttributePollConfig;
 import org.apache.brooklyn.feed.jmx.JmxFeed;
 import org.apache.brooklyn.feed.jmx.JmxHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Functions;
 import com.google.common.base.Objects.ToStringHelper;
@@ -55,7 +52,7 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
     @Override
     public void init() {
         super.init();
-        setAttribute(BROKER_ID, Math.abs(hashCode())); // Must be positive for partitioning to work
+        sensors().set(BROKER_ID, Math.abs(hashCode())); // Must be positive for partitioning to work
     }
 
     @Override
@@ -160,9 +157,9 @@ public class KafkaBrokerImpl extends SoftwareProcessImpl implements MessageBroke
     public void setBrokerUrl() {
         ZooKeeperNode zookeeper = getZookeeper();
         if (zookeeper != null) {
-            setAttribute(BROKER_URL, String.format("zookeeper://%s:%d", zookeeper.getAttribute(HOSTNAME), zookeeper.getZookeeperPort()));
+            sensors().set(BROKER_URL, String.format("zookeeper://%s:%d", zookeeper.getAttribute(HOSTNAME), zookeeper.getZookeeperPort()));
         } else {
-            setAttribute(BROKER_URL, String.format("kafka://%s:%d", getAttribute(HOSTNAME), getKafkaPort()));
+            sensors().set(BROKER_URL, String.format("kafka://%s:%d", getAttribute(HOSTNAME), getKafkaPort()));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
index 3daa097..cb4481c 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/kafka/KafkaClusterImpl.java
@@ -55,7 +55,7 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
     public void init() {
         super.init();
         
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
         ConfigToAttributes.apply(this, BROKER_SPEC);
         ConfigToAttributes.apply(this, ZOOKEEPER);
         ConfigToAttributes.apply(this, ZOOKEEPER_SPEC);
@@ -67,13 +67,13 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
             if (zookeeperSpec == null) {
                 log.debug("creating zookeeper using default spec for {}", this);
                 zookeeperSpec = EntitySpec.create(KafkaZooKeeper.class);
-                setAttribute(ZOOKEEPER_SPEC, zookeeperSpec);
+                sensors().set(ZOOKEEPER_SPEC, zookeeperSpec);
             } else {
                 log.debug("creating zookeeper using custom spec for {}", this);
             }
             zookeeper = addChild(zookeeperSpec);
             if (Entities.isManaged(this)) Entities.manage(zookeeper);
-            setAttribute(ZOOKEEPER, zookeeper);
+            sensors().set(ZOOKEEPER, zookeeper);
         }
 
         log.debug("creating cluster child for {}", this);
@@ -81,14 +81,14 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
         if (brokerSpec == null) {
             log.debug("creating default broker spec for {}", this);
             brokerSpec = EntitySpec.create(KafkaBroker.class);
-            setAttribute(BROKER_SPEC, brokerSpec);
+            sensors().set(BROKER_SPEC, brokerSpec);
         }
         // Relies on initialSize being inherited by DynamicCluster, because key id is identical
         // We add the zookeeper configuration to the KafkaBroker specification here
         DynamicCluster cluster = addChild(EntitySpec.create(DynamicCluster.class)
                 .configure("memberSpec", EntitySpec.create(brokerSpec).configure(KafkaBroker.ZOOKEEPER, zookeeper)));
         if (Entities.isManaged(this)) Entities.manage(cluster);
-        setAttribute(CLUSTER, cluster);
+        sensors().set(CLUSTER, cluster);
         
         connectSensors();
     }
@@ -141,7 +141,7 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
         }
 
         clearLocations();
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
 
         if (errors.size() != 0) {
             throw new CompoundRuntimeException("Error stopping Kafka cluster", errors);
@@ -158,11 +158,11 @@ public class KafkaClusterImpl extends AbstractEntity implements KafkaCluster {
     }
 
     void connectSensors() {
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagatingAllBut(SERVICE_UP)
                 .from(getCluster())
                 .build());
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagating(SERVICE_UP)
                 .from(getZooKeeper())
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
index 72e6280..5b2529c 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
@@ -60,7 +60,7 @@ public class QpidBrokerImpl extends JMSBrokerImpl<QpidQueue, QpidTopic> implemen
 
     public void setBrokerUrl() {
         String urlFormat = "amqp://guest:guest@/%s?brokerlist='tcp://%s:%d'";
-        setAttribute(BROKER_URL, format(urlFormat, getAttribute(VIRTUAL_HOST_NAME), getAttribute(HOSTNAME), getAttribute(AMQP_PORT)));
+        sensors().set(BROKER_URL, format(urlFormat, getAttribute(VIRTUAL_HOST_NAME), getAttribute(HOSTNAME), getAttribute(AMQP_PORT)));
     }
     
     @Override



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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
index 9637235..1e4fb97 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
@@ -62,7 +62,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .minPoolSize(2)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3);
         
@@ -77,15 +77,15 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .minPoolSize(2)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
         
         // 25*4 = 100 -> 2 nodes at 50 each
-        tc.setAttribute(MY_ATTRIBUTE, 25);
+        tc.sensors().set(MY_ATTRIBUTE, 25);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
 
         // Decreases to new min-size
         policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 1);
-        tc.setAttribute(MY_ATTRIBUTE, 0);
+        tc.sensors().set(MY_ATTRIBUTE, 0);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
     
@@ -97,7 +97,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .maxPoolSize(6)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 4);
         
@@ -112,16 +112,16 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .maxPoolSize(6)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         // 200*3 = 600 -> 6 nodes at 100 each
-        tc.setAttribute(MY_ATTRIBUTE, 200);
+        tc.sensors().set(MY_ATTRIBUTE, 200);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 6));
         
         policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 8);
         
         // 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, 8));
     }
     
@@ -132,11 +132,11 @@ public class AutoScalerPolicyReconfigurationTest {
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
                 .metricLowerBound(50).metricUpperBound(100)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.METRIC_LOWER_BOUND, 51);
 
-        tc.setAttribute(MY_ATTRIBUTE, 50);
+        tc.sensors().set(MY_ATTRIBUTE, 50);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
 
@@ -147,11 +147,11 @@ public class AutoScalerPolicyReconfigurationTest {
         AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
                 .metricLowerBound(50).metricUpperBound(100)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.METRIC_UPPER_BOUND, 99);
 
-        tc.setAttribute(MY_ATTRIBUTE, 100);
+        tc.sensors().set(MY_ATTRIBUTE, 100);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
     }
 
@@ -163,11 +163,11 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .resizeUpStabilizationDelay(Duration.TWO_MINUTES)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.RESIZE_UP_STABILIZATION_DELAY, Duration.ZERO);
 
-        tc.setAttribute(MY_ATTRIBUTE, 101);
+        tc.sensors().set(MY_ATTRIBUTE, 101);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
     }
     
@@ -179,11 +179,11 @@ public class AutoScalerPolicyReconfigurationTest {
                 .metricLowerBound(50).metricUpperBound(100)
                 .resizeDownStabilizationDelay(Duration.TWO_MINUTES)
                 .build();
-        tc.addPolicy(policy);
+        tc.policies().add(policy);
 
         policy.config().set(AutoScalerPolicy.RESIZE_DOWN_STABILIZATION_DELAY, Duration.ZERO);
 
-        tc.setAttribute(MY_ATTRIBUTE, 1);
+        tc.sensors().set(MY_ATTRIBUTE, 1);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
index 9cd149a..c324dbe 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
@@ -87,7 +87,7 @@ public class AutoScalerPolicyTest {
                 return ((Resizable)entity).resize(desiredSize);
             }
         });
-        policy = resizable.addPolicy(policySpec);
+        policy = resizable.policies().add(policySpec);
         policyResizes.clear();
     }
 
@@ -109,7 +109,7 @@ public class AutoScalerPolicyTest {
     public void testShrinkColdPool() throws Exception {
         resizable.resize(4);
         // all metrics as per-node here
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(30d/4, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(30d/4, 10, 20));
         
         // expect pool to shrink to 3 (i.e. maximum to have >= 10 per container)
         assertSizeEventually(3);
@@ -119,7 +119,7 @@ public class AutoScalerPolicyTest {
     public void testShrinkColdPoolTotals() throws Exception {
         resizable.resize(4);
         // all metrics as totals here
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(30L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(30L, 4*10L, 4*20L));
         
         // expect pool to shrink to 3 (i.e. maximum to have >= 10 per container)
         assertSizeEventually(3);
@@ -128,7 +128,7 @@ public class AutoScalerPolicyTest {
     @Test
     public void testShrinkColdPoolRoundsUpDesiredNumberOfContainers() throws Exception {
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1L, 4*10L, 4*20L));
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 1));
     }
@@ -137,7 +137,7 @@ public class AutoScalerPolicyTest {
     public void testGrowHotPool() throws Exception {
         resizable.resize(2);
         // all metrics as per-node here
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(21L, 10L, 20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(21L, 10L, 20L));
         
         // expect pool to grow to 3 (i.e. minimum to have <= 20 per container)
         assertSizeEventually(3);
@@ -147,7 +147,7 @@ public class AutoScalerPolicyTest {
     public void testGrowHotPoolTotals() throws Exception {
         resizable.resize(2);
         // all metrics as totals here
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(41L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(41L, 2*10L, 2*20L));
         
         // expect pool to grow to 3 (i.e. minimum to have <= 20 per container)
         assertSizeEventually(3);
@@ -161,50 +161,50 @@ public class AutoScalerPolicyTest {
         policy.config().set(AutoScalerPolicy.RESIZE_DOWN_ITERATION_INCREMENT, 3);
         policy.config().set(AutoScalerPolicy.RESIZE_DOWN_ITERATION_MAX, 3);
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(42/2, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(42/2, 10, 20));
         // expect pool to grow to 4 (i.e. to have <= 20 per container we need 3, but increment is 2)
         assertSizeEventually(4);
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(200/4, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(200/4, 10, 20));
         // a single hot message can only make it go to 8
         assertSizeEventually(8);
         assertEquals(policyResizes, MutableList.of(4, 8));
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(200/8, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(200/8, 10, 20));
         assertSizeEventually(10);
         assertEquals(policyResizes, MutableList.of(4, 8, 10));
         
         // now shrink
         policyResizes.clear();
         policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 2);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
         assertSizeEventually(7);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
         assertSizeEventually(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(1, 10, 20));
         assertSizeEventually(2);
         assertEquals(policyResizes, MutableList.of(7, 4, 2));
     }
 
     @Test
     public void testHasId() throws Exception {
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         policy = AutoScalerPolicy.builder()
                 .minPoolSize(2)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         Assert.assertTrue(policy.getId()!=null);
     }
     
     @Test
     public void testNeverShrinkBelowMinimum() throws Exception {
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         policy = AutoScalerPolicy.builder()
                 .minPoolSize(2)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 0L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 0L, 4*10L, 4*20L));
         
         // expect pool to shrink only to the minimum
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 2));
@@ -212,14 +212,14 @@ public class AutoScalerPolicyTest {
     
     @Test
     public void testNeverGrowAboveMaximmum() throws Exception {
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         policy = AutoScalerPolicy.builder()
                 .maxPoolSize(5)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 1000000L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 1000000L, 4*10L, 4*20L));
         
         // expect pool to grow only to the maximum
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 5));
@@ -228,7 +228,7 @@ public class AutoScalerPolicyTest {
     @Test
     public void testNeverGrowColdPool() throws Exception {
         resizable.resize(2);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1000L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1000L, 2*10L, 2*20L));
         
         Thread.sleep(SHORT_WAIT_MS);
         assertEquals(resizable.getCurrentSize(), (Integer)2);
@@ -238,7 +238,7 @@ public class AutoScalerPolicyTest {
     public void testNeverShrinkHotPool() throws Exception {
         resizable.resizeSleepTime = 0;
         resizable.resize(2);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 0L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 0L, 2*10L, 2*20L));
         
         // if had been a POOL_COLD, would have shrunk to 3
         Thread.sleep(SHORT_WAIT_MS);
@@ -249,10 +249,10 @@ public class AutoScalerPolicyTest {
     public void testConcurrentShrinkShrink() throws Exception {
         resizable.resizeSleepTime = 250;
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 30L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 30L, 4*10L, 4*20L));
         // would cause pool to shrink to 3
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 1L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 1L, 4*10L, 4*20L));
         // now expect pool to shrink to 1
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 1));
@@ -262,10 +262,10 @@ public class AutoScalerPolicyTest {
     public void testConcurrentGrowGrow() throws Exception {
         resizable.resizeSleepTime = 250;
         resizable.resize(2);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 41L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 41L, 2*10L, 2*20L));
         // would cause pool to grow to 3
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 81L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 81L, 2*10L, 2*20L));
         // now expect pool to grow to 5
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 5));
@@ -275,10 +275,10 @@ public class AutoScalerPolicyTest {
     public void testConcurrentGrowShrink() throws Exception {
         resizable.resizeSleepTime = 250;
         resizable.resize(2);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 81L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(2, 81L, 2*10L, 2*20L));
         // would cause pool to grow to 5
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1L, 2*10L, 2*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1L, 2*10L, 2*20L));
         // now expect pool to shrink to 1
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 1));
@@ -288,10 +288,10 @@ public class AutoScalerPolicyTest {
     public void testConcurrentShrinkGrow() throws Exception {
         resizable.resizeSleepTime = 250;
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 1L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 1L, 4*10L, 4*20L));
         // would cause pool to shrink to 1
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 81L, 4*10L, 4*20L));
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 81L, 4*10L, 4*20L));
         // now expect pool to grow to 5
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 5));
@@ -304,9 +304,9 @@ public class AutoScalerPolicyTest {
         // TODO is this too time sensitive? the resize takes only 250ms so if it finishes before the next emit we'd also see size=2
         resizable.resizeSleepTime = 500;
         resizable.resize(4);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 30L, 4*10L, 4*20L)); // shrink to 3
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 20L, 4*10L, 4*20L)); // shrink to 2
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 10L, 4*10L, 4*20L)); // shrink to 1
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 30L, 4*10L, 4*20L)); // shrink to 3
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 20L, 4*10L, 4*20L)); // shrink to 2
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 10L, 4*10L, 4*20L)); // shrink to 1
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 1));
         assertEquals(resizable.sizes, ImmutableList.of(4, 3, 1));
@@ -315,7 +315,7 @@ public class AutoScalerPolicyTest {
 
     @Test
     public void testUsesResizeOperatorOverride() throws Exception {
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         final AtomicInteger counter = new AtomicInteger();
         policy = AutoScalerPolicy.builder()
@@ -325,9 +325,9 @@ public class AutoScalerPolicyTest {
                             return desiredSize;
                         }})
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 21L, 1*10L, 1*20L)); // grow to 2
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 21L, 1*10L, 1*20L)); // grow to 2
         
         Asserts.succeedsEventually(MutableMap.of("timeout",TIMEOUT_MS), new Runnable() {
                 public void run() {
@@ -337,7 +337,7 @@ public class AutoScalerPolicyTest {
     
     @Test
     public void testUsesCustomSensorOverride() throws Exception {
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         @SuppressWarnings("rawtypes")
         BasicNotificationSensor<Map> customPoolHotSensor = new BasicNotificationSensor<Map>(Map.class, "custom.hot", "");
@@ -350,12 +350,12 @@ public class AutoScalerPolicyTest {
                 .poolColdSensor(customPoolColdSensor)
                 .poolOkSensor(customPoolOkSensor)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         
-        resizable.emit(customPoolHotSensor, message(1, 21L, 1*10L, 1*20L)); // grow to 2
+        resizable.sensors().emit(customPoolHotSensor, message(1, 21L, 1*10L, 1*20L)); // grow to 2
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 2));
         
-        resizable.emit(customPoolColdSensor, message(2, 1L, 1*10L, 1*20L)); // shrink to 1
+        resizable.sensors().emit(customPoolColdSensor, message(2, 1L, 1*10L, 1*20L)); // shrink to 1
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 1));
     }
     
@@ -363,19 +363,19 @@ public class AutoScalerPolicyTest {
     public void testResizeUpStabilizationDelayIgnoresBlip() throws Exception {
         long resizeUpStabilizationDelay = 1000L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         policy = AutoScalerPolicy.builder()
                 .resizeUpStabilizationDelay(Duration.of(resizeUpStabilizationDelay, TimeUnit.MILLISECONDS)) 
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         resizable.resize(1);
         
         // Ignores temporary blip
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
         Thread.sleep(resizeUpStabilizationDelay-OVERHEAD_DURATION_MS);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_OK_SENSOR, message(1, 11L, 4*10L, 4*20L)); // but 1 is still adequate
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_OK_SENSOR, message(1, 11L, 4*10L, 4*20L)); // but 1 is still adequate
         
         assertEquals(resizable.getCurrentSize(), (Integer)1);
         Asserts.succeedsContinually(MutableMap.of("duration", 2000L), new Runnable() {
@@ -407,26 +407,26 @@ public class AutoScalerPolicyTest {
     public void testResizeUpStabilizationDelayTakesMaxSustainedDesired() throws Exception {
         long resizeUpStabilizationDelay = 1100L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         policy = AutoScalerPolicy.builder()
                 .resizeUpStabilizationDelay(Duration.of(resizeUpStabilizationDelay, TimeUnit.MILLISECONDS)) 
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         resizable.resize(1);
         
         // Will grow to only the max sustained in this time window 
         // (i.e. to 2 within the first $resizeUpStabilizationDelay milliseconds)
         Stopwatch stopwatch = Stopwatch.createStarted();
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 21L, 1*10L, 1*20L)); // would grow to 2
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 21L, 1*10L, 1*20L)); // would grow to 2
         Thread.sleep(resizeUpStabilizationDelay-OVERHEAD_DURATION_MS);
         
         long postSleepTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 61L, 1*10L, 1*20L)); // would grow to 4
 
         // Wait for it to reach size 2, and confirm take expected time
         // TODO This is time sensitive, and sometimes fails in CI with size=4 if we wait for currentSize==2 (presumably GC kicking in?)
@@ -457,9 +457,9 @@ public class AutoScalerPolicyTest {
     public void testResizeUpStabilizationDelayResizesAfterDelay() {
         final long resizeUpStabilizationDelay = 1000L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
-        policy = resizable.addPolicy(AutoScalerPolicy.builder()
+        policy = resizable.policies().add(AutoScalerPolicy.builder()
                 .resizeUpStabilizationDelay(Duration.of(resizeUpStabilizationDelay, TimeUnit.MILLISECONDS)) 
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .buildSpec());
@@ -468,14 +468,14 @@ public class AutoScalerPolicyTest {
         // After suitable delay, grows to desired
         final long emitTime = System.currentTimeMillis();
         final Map<String, Object> need4 = message(1, 61L, 1*10L, 1*20L);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, need4); // would grow to 4
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, need4); // would grow to 4
         final AtomicInteger emitCount = new AtomicInteger(0);
         
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
             public void run() {
                 if (System.currentTimeMillis() - emitTime > (2+emitCount.get())*resizeUpStabilizationDelay) {
                     //first one may not have been received, in a registration race 
-                    resizable.emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, need4);
+                    resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, need4);
                     emitCount.incrementAndGet();
                 }
                 assertEquals(resizable.getCurrentSize(), (Integer)4);
@@ -489,19 +489,19 @@ public class AutoScalerPolicyTest {
     public void testResizeDownStabilizationDelayIgnoresBlip() throws Exception {
         long resizeStabilizationDelay = 1000L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         policy = AutoScalerPolicy.builder()
                 .resizeDownStabilizationDelay(Duration.of(resizeStabilizationDelay, TimeUnit.MILLISECONDS)) 
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         resizable.resize(2);
         
         // Ignores temporary blip
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1L, 2*10L, 2*20L)); // would shrink to 1
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(2, 1L, 2*10L, 2*20L)); // would shrink to 1
         Thread.sleep(resizeStabilizationDelay-OVERHEAD_DURATION_MS);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_OK_SENSOR, message(2, 20L, 1*10L, 1*20L)); // but 2 is still adequate
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_OK_SENSOR, message(2, 20L, 1*10L, 1*20L)); // but 2 is still adequate
         
         assertEquals(resizable.getCurrentSize(), (Integer)2);
         Asserts.succeedsContinually(MutableMap.of("duration", 2000L), new Runnable() {
@@ -526,26 +526,26 @@ public class AutoScalerPolicyTest {
         long resizeDownStabilizationDelay = 1100L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
         policy.suspend();
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         policy = AutoScalerPolicy.builder()
                 .resizeDownStabilizationDelay(Duration.of(resizeDownStabilizationDelay, TimeUnit.MILLISECONDS))
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         resizable.resize(3);
         
         // Will shrink to only the min sustained in this time window
         // (i.e. to 2 within the first $resizeUpStabilizationDelay milliseconds)
         Stopwatch stopwatch = Stopwatch.createStarted();
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 1L, 3*10L, 3*20L)); // would shrink to 1
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 20L, 3*10L, 3*20L)); // would shrink to 2
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 1L, 3*10L, 3*20L)); // would shrink to 1
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 20L, 3*10L, 3*20L)); // would shrink to 2
         Thread.sleep(resizeDownStabilizationDelay-OVERHEAD_DURATION_MS);
         
         long postSleepTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
         
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 1L, 3*10L, 3*20L)); // would shrink to 1
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(3, 1L, 3*10L, 3*20L)); // would shrink to 1
 
         // Wait for it to reach size 2, and confirm take expected time
         // TODO This is time sensitive, and sometimes fails in CI with size=1 if we wait for currentSize==2 (presumably GC kicking in?)
@@ -576,26 +576,26 @@ public class AutoScalerPolicyTest {
     public void testResizeDownStabilizationDelayResizesAfterDelay() throws Exception {
         final long resizeDownStabilizationDelay = 1000L;
         Duration minPeriodBetweenExecs = Duration.ZERO;
-        resizable.removePolicy(policy);
+        resizable.policies().remove(policy);
         
         policy = AutoScalerPolicy.builder()
                 .resizeDownStabilizationDelay(Duration.of(resizeDownStabilizationDelay, TimeUnit.MILLISECONDS))
                 .minPeriodBetweenExecs(minPeriodBetweenExecs)
                 .build();
-        resizable.addPolicy(policy);
+        resizable.policies().add(policy);
         resizable.resize(2);
         
         // After suitable delay, grows to desired
         final long emitTime = System.currentTimeMillis();
         final Map<String, Object> needJust1 = message(2, 1L, 2*10L, 2*20L);
-        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, needJust1); // would shrink to 1
+        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, needJust1); // would shrink to 1
         final AtomicInteger emitCount = new AtomicInteger(0);
         
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
                 public void run() {
                     if (System.currentTimeMillis() - emitTime > (2+emitCount.get())*resizeDownStabilizationDelay) {
                         //first one may not have been received, in a registration race
-                        resizable.emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, needJust1); // would shrink to 1
+                        resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, needJust1); // would shrink to 1
                         emitCount.incrementAndGet();
                     }
                     assertEquals(resizable.getCurrentSize(), (Integer)1);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/LocallyResizableEntity.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/LocallyResizableEntity.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/LocallyResizableEntity.java
index d5dec9e..5550899 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/LocallyResizableEntity.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/LocallyResizableEntity.java
@@ -45,7 +45,7 @@ public class LocallyResizableEntity extends AbstractEntity implements Resizable
     public LocallyResizableEntity (Entity parent, TestCluster tc) {
         super(parent);
         this.cluster = tc;
-        setAttribute(Startable.SERVICE_UP, true);
+        sensors().set(Startable.SERVICE_UP, true);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/DeltaEnrichersTests.groovy
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/DeltaEnrichersTests.groovy b/policy/src/test/java/org/apache/brooklyn/policy/enricher/DeltaEnrichersTests.groovy
index 2004ebd..3c5f192 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/DeltaEnrichersTests.groovy
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/DeltaEnrichersTests.groovy
@@ -59,7 +59,7 @@ class DeltaEnrichersTests {
     @Test
     public void testDeltaEnricher() {
         DeltaEnricher delta = new DeltaEnricher<Integer>(producer, intSensor, deltaSensor)
-        producer.addEnricher(delta)
+        producer.enrichers().add(delta)
         
         delta.onEvent(intSensor.newEvent(producer, 0))
         delta.onEvent(intSensor.newEvent(producer, 0))
@@ -76,7 +76,7 @@ class DeltaEnrichersTests {
     public void testMonospaceTimeWeightedDeltaEnricher() {
         TimeWeightedDeltaEnricher delta = 
             TimeWeightedDeltaEnricher.<Integer>getPerSecondDeltaEnricher(producer, intSensor, deltaSensor)
-        producer.addEnricher(delta)
+        producer.enrichers().add(delta)
         
         delta.onEvent(intSensor.newEvent(producer, 0), 0)
         assertEquals(producer.getAttribute(deltaSensor), null)
@@ -94,7 +94,7 @@ class DeltaEnrichersTests {
     public void testVariableTimeWeightedDeltaEnricher() {
         TimeWeightedDeltaEnricher delta = 
             TimeWeightedDeltaEnricher.<Integer>getPerSecondDeltaEnricher(producer, intSensor, deltaSensor)
-        producer.addEnricher(delta)
+        producer.enrichers().add(delta)
         
         delta.onEvent(intSensor.newEvent(producer, 0), 0)
         delta.onEvent(intSensor.newEvent(producer, 0), 2000)
@@ -112,7 +112,7 @@ class DeltaEnrichersTests {
     @Test
     public void testPostProcessorCalledForDeltaEnricher() {
         TimeWeightedDeltaEnricher delta = new TimeWeightedDeltaEnricher(producer, intSensor, deltaSensor, 1000, {it+123})
-        producer.addEnricher(delta)
+        producer.enrichers().add(delta)
         
         delta.onEvent(intSensor.newEvent(producer, 0), 0)
         delta.onEvent(intSensor.newEvent(producer, 0), 1000)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetectorTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetectorTest.java b/policy/src/test/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetectorTest.java
index 0aeac73..d361898 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetectorTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/HttpLatencyDetectorTest.java
@@ -76,9 +76,9 @@ public class HttpLatencyDetectorTest {
     
     @Test(groups="Integration")
     public void testPollsUrl() throws Exception {
-        entity.setAttribute(TestEntity.SERVICE_UP, true);
+        entity.sensors().set(TestEntity.SERVICE_UP, true);
         
-        entity.addEnricher(HttpLatencyDetector.builder()
+        entity.enrichers().add(HttpLatencyDetector.builder()
                 .url(baseUrl)
                 .rollup(500, TimeUnit.MILLISECONDS)
                 .period(100, TimeUnit.MILLISECONDS)
@@ -89,7 +89,7 @@ public class HttpLatencyDetectorTest {
     
     @Test(groups="Integration")
     public void testWaitsForSensorThenPolls() throws Exception {
-        entity.addEnricher(HttpLatencyDetector.builder()
+        entity.enrichers().add(HttpLatencyDetector.builder()
                 .url(TEST_URL)
                 .noServiceUp()
                 .rollup(500, TimeUnit.MILLISECONDS)
@@ -102,15 +102,15 @@ public class HttpLatencyDetectorTest {
                 entity, HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_MOST_RECENT, null);
         
         // gets value after url is set, and gets rolling average
-        entity.setAttribute(TEST_URL, baseUrl.toString());
+        entity.sensors().set(TEST_URL, baseUrl.toString());
         assertLatencyAttributesNonNull(entity);
     }
 
     @Test(groups="Integration")
     public void testGetsSensorIfAlredySetThenPolls() throws Exception {
-        entity.setAttribute(TEST_URL, baseUrl.toString());
+        entity.sensors().set(TEST_URL, baseUrl.toString());
         
-        entity.addEnricher(HttpLatencyDetector.builder()
+        entity.enrichers().add(HttpLatencyDetector.builder()
                 .url(TEST_URL)
                 .noServiceUp()
                 .rollup(500, TimeUnit.MILLISECONDS)
@@ -122,9 +122,9 @@ public class HttpLatencyDetectorTest {
 
     @Test(groups="Integration")
     public void testWaitsForServiceUp() throws Exception {
-        entity.setAttribute(TestEntity.SERVICE_UP, false);
+        entity.sensors().set(TestEntity.SERVICE_UP, false);
         
-        entity.addEnricher(HttpLatencyDetector.builder()
+        entity.enrichers().add(HttpLatencyDetector.builder()
                 .url(baseUrl)
                 .period(100, TimeUnit.MILLISECONDS)
                 .build());
@@ -135,7 +135,7 @@ public class HttpLatencyDetectorTest {
                 entity, HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_MOST_RECENT, null);
         
         // gets value after url is set, and gets rolling average
-        entity.setAttribute(TestEntity.SERVICE_UP, true);
+        entity.sensors().set(TestEntity.SERVICE_UP, true);
         assertLatencyAttributesNonNull(entity); 
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/RebindEnricherTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RebindEnricherTest.java b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RebindEnricherTest.java
index 7f3dfb1..434eb99 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RebindEnricherTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RebindEnricherTest.java
@@ -63,12 +63,12 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testDeltaEnricher() throws Exception {
-        origApp.addEnricher(new DeltaEnricher<Integer>(origApp, INT_METRIC, INT_METRIC2));
+        origApp.enrichers().add(new DeltaEnricher<Integer>(origApp, INT_METRIC, INT_METRIC2));
         
         TestApplication newApp = rebind();
 
-        newApp.setAttribute(INT_METRIC, 1);
-        newApp.setAttribute(INT_METRIC, 10);
+        newApp.sensors().set(INT_METRIC, 1);
+        newApp.sensors().set(INT_METRIC, 10);
         EntityTestUtils.assertAttributeEqualsEventually(newApp, INT_METRIC2, 9);
     }
 
@@ -81,17 +81,17 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         webServer.play();
         URL baseUrl = webServer.getUrl("/");
 
-        origApp.addEnricher(HttpLatencyDetector.builder()
+        origApp.enrichers().add(HttpLatencyDetector.builder()
                 .rollup(Duration.of(50, TimeUnit.MILLISECONDS))
                 .period(Duration.of(10, TimeUnit.MILLISECONDS))
                 .url(baseUrl)
                 .build());
-        origApp.setAttribute(Attributes.SERVICE_UP, true);
+        origApp.sensors().set(Attributes.SERVICE_UP, true);
         
         TestApplication newApp = rebind();
 
-        newApp.setAttribute(HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_MOST_RECENT, null);
-        newApp.setAttribute(HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW, null);
+        newApp.sensors().set(HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_MOST_RECENT, null);
+        newApp.sensors().set(HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW, null);
 
         EntityTestUtils.assertAttributeEventuallyNonNull(newApp, HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_MOST_RECENT);
         EntityTestUtils.assertAttributeEventuallyNonNull(newApp, HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW);
@@ -99,29 +99,29 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testRollingMeanEnricher() throws Exception {
-        origApp.addEnricher(new RollingMeanEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, 2));
+        origApp.enrichers().add(new RollingMeanEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, 2));
         
         TestApplication newApp = rebind();
 
-        newApp.setAttribute(INT_METRIC, 10);
+        newApp.sensors().set(INT_METRIC, 10);
         EntityTestUtils.assertAttributeEqualsEventually(newApp, DOUBLE_METRIC, 10d);
     }
 
     @Test
     public void testRollingTimeWindowMeanEnricher() throws Exception {
-        origApp.addEnricher(new RollingTimeWindowMeanEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, Duration.of(10, TimeUnit.MILLISECONDS)));
+        origApp.enrichers().add(new RollingTimeWindowMeanEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, Duration.of(10, TimeUnit.MILLISECONDS)));
         
         TestApplication newApp = rebind();
 
-        newApp.setAttribute(INT_METRIC, 10);
+        newApp.sensors().set(INT_METRIC, 10);
         Time.sleep(Duration.millis(10));
-        newApp.setAttribute(INT_METRIC, 10);
+        newApp.sensors().set(INT_METRIC, 10);
         EntityTestUtils.assertAttributeEqualsEventually(newApp, DOUBLE_METRIC, 10d);
     }
     
     @Test
     public void testTimeFractionDeltaEnricher() throws Exception {
-        origApp.addEnricher(new TimeFractionDeltaEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, TimeUnit.MILLISECONDS));
+        origApp.enrichers().add(new TimeFractionDeltaEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, TimeUnit.MILLISECONDS));
         
         final TestApplication newApp = rebind();
 
@@ -130,14 +130,14 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         Asserts.succeedsEventually(new Runnable() {
             private int counter;
             public void run() {
-                newApp.setAttribute(INT_METRIC, counter++);
+                newApp.sensors().set(INT_METRIC, counter++);
                 assertNotNull(newApp.getAttribute(DOUBLE_METRIC));
             }});
     }
     
     @Test
     public void testTimeWeightedDeltaEnricher() throws Exception {
-        origApp.addEnricher(new TimeWeightedDeltaEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, 1000));
+        origApp.enrichers().add(new TimeWeightedDeltaEnricher<Integer>(origApp, INT_METRIC, DOUBLE_METRIC, 1000));
         
         final TestApplication newApp = rebind();
 
@@ -146,7 +146,7 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         Asserts.succeedsEventually(new Runnable() {
             private int counter;
             public void run() {
-                newApp.setAttribute(INT_METRIC, counter++);
+                newApp.sensors().set(INT_METRIC, counter++);
                 assertNotNull(newApp.getAttribute(DOUBLE_METRIC));
             }});
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricherTest.groovy
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricherTest.groovy b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricherTest.groovy
index 7e5ae62..bb7d2b7 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricherTest.groovy
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingMeanEnricherTest.groovy
@@ -53,9 +53,9 @@ class RollingMeanEnricherTest {
         deltaSensor = new BasicAttributeSensor<Integer>(Integer.class, "delta sensor")
         avgSensor = new BasicAttributeSensor<Double>(Integer.class, "avg sensor")
         
-        producer.addEnricher(new DeltaEnricher<Integer>(producer, intSensor, deltaSensor))
+        producer.enrichers().add(new DeltaEnricher<Integer>(producer, intSensor, deltaSensor))
         averager = new RollingMeanEnricher<Integer>(producer, deltaSensor, avgSensor, 4)
-        producer.addEnricher(averager)
+        producer.enrichers().add(averager)
     }
 
     @AfterMethod(alwaysRun=true)
@@ -71,7 +71,7 @@ class RollingMeanEnricherTest {
     @Test
     public void testZeroWindowSize() {
         averager = new RollingMeanEnricher<Integer>(producer, deltaSensor, avgSensor, 0)
-        producer.addEnricher(averager)
+        producer.enrichers().add(averager)
         
         averager.onEvent(intSensor.newEvent(producer, 10))
         assertEquals(averager.getAverage(), null)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricherTest.groovy
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricherTest.groovy b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricherTest.groovy
index bd9c13f..492d672 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricherTest.groovy
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/RollingTimeWindowMeanEnricherTest.groovy
@@ -57,9 +57,9 @@ class RollingTimeWindowMeanEnricherTest {
         deltaSensor = new BasicAttributeSensor<Integer>(Integer.class, "delta sensor")
         avgSensor = new BasicAttributeSensor<Double>(Integer.class, "avg sensor")
         
-        producer.addEnricher(new DeltaEnricher<Integer>(producer, intSensor, deltaSensor))
+        producer.enrichers().add(new DeltaEnricher<Integer>(producer, intSensor, deltaSensor))
         averager = new RollingTimeWindowMeanEnricher<Integer>(producer, deltaSensor, avgSensor, timePeriod)
-        producer.addEnricher(averager)
+        producer.enrichers().add(averager)
     }
 
     @AfterMethod(alwaysRun=true)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricherTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricherTest.java b/policy/src/test/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricherTest.java
index bd18631..6f260a1 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricherTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/enricher/TimeFractionDeltaEnricherTest.java
@@ -66,7 +66,7 @@ public class TimeFractionDeltaEnricherTest {
     @Test
     public void testCalculatesFractions() {
         TimeFractionDeltaEnricher<Integer> enricher = new TimeFractionDeltaEnricher<Integer>(producer, intSensor, fractionSensor, TimeUnit.MILLISECONDS);
-        producer.addEnricher(enricher);
+        producer.enrichers().add(enricher);
         
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 0, 1000000L));
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 0, 1001000L));
@@ -85,7 +85,7 @@ public class TimeFractionDeltaEnricherTest {
     @Test
     public void testConvertsTimeUnits() {
         TimeFractionDeltaEnricher<Integer> enricher = new TimeFractionDeltaEnricher<Integer>(producer, intSensor, fractionSensor, TimeUnit.MICROSECONDS);
-        producer.addEnricher(enricher);
+        producer.enrichers().add(enricher);
         
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 0, 1000000L));
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 1000000, 1001000L));
@@ -95,7 +95,7 @@ public class TimeFractionDeltaEnricherTest {
     @Test
     public void testConverts100NanosTimeBlocks() {
         TimeFractionDeltaEnricher<Integer> enricher = new TimeFractionDeltaEnricher<Integer>(producer, intSensor, fractionSensor, 100);
-        producer.addEnricher(enricher);
+        producer.enrichers().add(enricher);
         
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 0, 1000000L));
         enricher.onEvent(new BasicSensorEvent<Integer>(intSensor, producer, 10000000, 1001000L));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/followthesun/AbstractFollowTheSunPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/AbstractFollowTheSunPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/AbstractFollowTheSunPolicyTest.java
index ba62dc7..bd1ef6f 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/AbstractFollowTheSunPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/AbstractFollowTheSunPolicyTest.java
@@ -102,13 +102,13 @@ public class AbstractFollowTheSunPolicyTest {
         pool = app.createAndManageChild(EntitySpec.create(FollowTheSunPool.class));
         pool.setContents(containerGroup, itemGroup);
         policy = new FollowTheSunPolicy(MockItemEntity.ITEM_USAGE_METRIC, model, FollowTheSunParameters.newDefault());
-        pool.addPolicy(policy);
+        pool.policies().add(policy);
         app.start(ImmutableList.of(loc1, loc2));
     }
     
     @AfterMethod(alwaysRun=true)
     public void tearDown() {
-        if (pool != null && policy != null) pool.removePolicy(policy);
+        if (pool != null && policy != null) pool.policies().remove(policy);
         if (app != null) Entities.destroyAll(app.getManagementContext());
         MockItemEntityImpl.totalMoveCount.set(0);
         MockItemEntityImpl.lastMoveTime.set(0);
@@ -229,7 +229,7 @@ public class AbstractFollowTheSunPolicyTest {
     protected static MockItemEntity newItem(TestApplication app, MockContainerEntity container, String name, Map<? extends Entity, Double> workpattern) {
         MockItemEntity item = newItem(app, container, name);
         if (workpattern != null) {
-            ((EntityLocal)item).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, (Map) workpattern);
+            ((EntityLocal)item).sensors().set(MockItemEntity.ITEM_USAGE_METRIC, (Map) workpattern);
         }
         return item;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicySoakTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicySoakTest.java b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicySoakTest.java
index 44be76b..9649193 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicySoakTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicySoakTest.java
@@ -211,7 +211,7 @@ public class FollowTheSunPolicySoakTest extends AbstractFollowTheSunPolicyTest {
                     double jitteredWorkrate = Math.max(0, baseWorkrate + (random.nextDouble()*jitter*2 - jitter));
                     workrates.put(source, jitteredWorkrate);
                 }
-                ((EntityLocal)item).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, workrates);
+                ((EntityLocal)item).sensors().set(MockItemEntity.ITEM_USAGE_METRIC, workrates);
             }
 
             // 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/followthesun/FollowTheSunPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicyTest.java
index 325400e..a334cd7 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/followthesun/FollowTheSunPolicyTest.java
@@ -28,7 +28,6 @@ import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.sensor.SensorEvent;
 import org.apache.brooklyn.api.sensor.SensorEventListener;
@@ -59,7 +58,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         final MockContainerEntity containerA = newContainer(app, loc1, "A");
         final MockItemEntity item1 = newItem(app, containerA, "1");
         final MockItemEntity item2 = newItem(app, containerA, "2");
-        ((EntityLocal)item2).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 11d));
+        item2.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 11d));
         
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
             @Override public void run() {
@@ -73,7 +72,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
     
     @Test
     public void testPolicyAcceptsLocationFinder() {
-        pool.removePolicy(policy);
+        pool.policies().remove(policy);
         
         Function<Entity, Location> customLocationFinder = new Function<Entity, Location>() {
             @Override public Location apply(Entity input) {
@@ -86,7 +85,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
                 model, 
                 FollowTheSunParameters.newDefault());
         
-        pool.addPolicy(customPolicy);
+        pool.policies().add(customPolicy);
         
         final MockContainerEntity containerA = newContainer(app, loc1, "A");
         
@@ -116,7 +115,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item1 = newItem(app, containerA, "1");
         MockItemEntity item2 = newItem(app, containerB, "2");
 
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
         
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.<MockItemEntity>of(), containerB, ImmutableList.of(item1, item2)));
     }
@@ -129,7 +128,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item1 = newItem(app, containerA, "1");
         MockItemEntity item2 = newItem(app, containerB, "2");
 
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 0.1d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 0.1d));
         
         Thread.sleep(SHORT_WAIT_MS);
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item1), containerB, ImmutableList.of(item2)));
@@ -144,7 +143,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item2 = newItem(app, containerA, "2");
         MockItemEntity item3 = newItem(app, containerB, "3");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 100.1d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 100.1d));
         
         Thread.sleep(SHORT_WAIT_MS);
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item1, item2), containerB, ImmutableList.of(item3)));
@@ -158,8 +157,8 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item1 = newItem(app, containerA, "1");
         MockItemEntity item2 = newItem(app, containerB, "2");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 100d));
-        ((EntityLocal)item2).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 100d));
+        item2.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
         
         Thread.sleep(SHORT_WAIT_MS);
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item1), containerB, ImmutableList.of(item2)));
@@ -174,7 +173,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item2 = newItem(app, containerA, "2");
         MockItemEntity item3 = newItem(app, containerB, "3");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 1000d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 1000d));
         
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item2), containerB, ImmutableList.of(item1, item3)));
         
@@ -193,7 +192,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item2 = newItem(app, containerA, "2");
         MockItemEntity item3 = newItem(app, containerB, "3");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 1000d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d, item3, 1000d));
         
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item2), containerB, ImmutableList.of(item1, item3)));
         
@@ -209,7 +208,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item1 = newLockedItem(app, containerA, "1");
         MockItemEntity item2 = newItem(app, containerB, "2");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
         
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item1), containerB, ImmutableList.of(item2)));
     }
@@ -221,7 +220,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         MockItemEntity item1 = newLockedItem(app, containerA, "1");
         MockItemEntity item2 = newItem(app, containerA, "2");
         
-        ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 100d));
+        item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item1, 100d));
         
         assertItemDistributionEventually(ImmutableMap.of(containerA, ImmutableList.of(item1, item2), containerB, ImmutableList.<MockItemEntity>of()));
     }
@@ -247,7 +246,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         final long minPeriodBetweenExecs = 1000;
         final long timePrecision = 250;
         
-        pool.removePolicy(policy);
+        pool.policies().remove(policy);
         
         MockContainerEntity containerA = newContainer(app, loc1, "A");
         MockContainerEntity containerB = newContainer(app, loc2, "B");
@@ -261,7 +260,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
             model,
             FollowTheSunParameters.newDefault());
     
-        pool.addPolicy(customPolicy);
+        pool.policies().add(customPolicy);
         
         // Record times that things are moved, by lisening to the container sensor being set
         final Stopwatch stopwatch = Stopwatch.createStarted();
@@ -269,7 +268,7 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         final List<Long> eventTimes = Lists.newCopyOnWriteArrayList();
         final Semaphore semaphore = new Semaphore(0);
         
-        app.subscribe(item1, Movable.CONTAINER, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(item1, Movable.CONTAINER, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 long eventTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
                 LOG.info("Received {} at {}", event, eventTime);
@@ -280,12 +279,12 @@ public class FollowTheSunPolicyTest extends AbstractFollowTheSunPolicyTest {
         String errmsg = "";
         for (int i = 0; i < MAX_ATTEMPTS; i++) {
             // Set the workrate, causing the policy to move item1 to item2's location, and wait for it to happen
-            ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
+            item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item2, 100d));
             assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
             assertEquals(item1.getAttribute(Movable.CONTAINER), containerB);
             
             // now cause item1 to be moved to item3's location, and wait for it to happen
-            ((EntityLocal)item1).setAttribute(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item3, 100d));
+            item1.sensors().set(MockItemEntity.ITEM_USAGE_METRIC, ImmutableMap.<Entity,Double>of(item3, 100d));
             assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
             assertEquals(item1.getAttribute(Movable.CONTAINER), containerA);
             

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/ha/ConnectionFailureDetectorTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ConnectionFailureDetectorTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ConnectionFailureDetectorTest.java
index 6faf6ac..1b34c11 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ConnectionFailureDetectorTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ConnectionFailureDetectorTest.java
@@ -122,7 +122,7 @@ public class ConnectionFailureDetectorTest {
     public void testNotNotifiedOfFailuresForHealthy() throws Exception {
         // Create members before and after the policy is registered, to test both scenarios
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress));
         
         assertNoEventsContinually();
@@ -130,7 +130,7 @@ public class ConnectionFailureDetectorTest {
     
     @Test
     public void testNotifiedOfFailure() throws Exception {
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress));
 
         stopServerSocket();
@@ -141,7 +141,7 @@ public class ConnectionFailureDetectorTest {
     
     @Test
     public void testNotifiedOfRecovery() throws Exception {
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress));
         
         stopServerSocket();
@@ -157,7 +157,7 @@ public class ConnectionFailureDetectorTest {
     public void testReportsFailureWhenAlreadyDownOnRegisteringPolicy() throws Exception {
         stopServerSocket();
 
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress));
 
         assertHasEventEventually(HASensors.CONNECTION_FAILED, Predicates.<Object>equalTo(app), null);
@@ -165,7 +165,7 @@ public class ConnectionFailureDetectorTest {
 
     @Test(groups="Integration") // Because slow
     public void testNotNotifiedOfTemporaryFailuresDuringStabilisationDelay() throws Exception {
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_FAILED_STABILIZATION_DELAY, Duration.ONE_MINUTE));
         
@@ -180,7 +180,7 @@ public class ConnectionFailureDetectorTest {
     public void testNotifiedOfFailureAfterStabilisationDelay() throws Exception {
         final int stabilisationDelay = 1000;
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_FAILED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
@@ -194,7 +194,7 @@ public class ConnectionFailureDetectorTest {
     public void testFailuresThenUpDownResetsStabilisationCount() throws Exception {
         final long stabilisationDelay = 1000;
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_FAILED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
@@ -213,7 +213,7 @@ public class ConnectionFailureDetectorTest {
     public void testNotNotifiedOfTemporaryRecoveryDuringStabilisationDelay() throws Exception {
         final long stabilisationDelay = 1000;
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
@@ -232,7 +232,7 @@ public class ConnectionFailureDetectorTest {
     public void testNotifiedOfRecoveryAfterStabilisationDelay() throws Exception {
         final int stabilisationDelay = 1000;
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
@@ -249,7 +249,7 @@ public class ConnectionFailureDetectorTest {
     public void testRecoversThenDownUpResetsStabilisationCount() throws Exception {
         final long stabilisationDelay = 1000;
         
-        app.addPolicy(PolicySpec.create(ConnectionFailureDetector.class)
+        app.policies().add(PolicySpec.create(ConnectionFailureDetector.class)
                 .configure(ConnectionFailureDetector.ENDPOINT, serverSocketAddress)
                 .configure(ConnectionFailureDetector.CONNECTION_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/ha/HaPolicyRebindTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/HaPolicyRebindTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/HaPolicyRebindTest.java
index 242a33b..05f4ba4 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/HaPolicyRebindTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/HaPolicyRebindTest.java
@@ -77,13 +77,13 @@ public class HaPolicyRebindTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testServiceRestarterWorksAfterRebind() throws Exception {
-        origEntity.addPolicy(PolicySpec.create(ServiceRestarter.class)
+        origEntity.policies().add(PolicySpec.create(ServiceRestarter.class)
                 .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
         
         TestApplication newApp = rebind();
         final TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
         
-        newEntity.emit(HASensors.ENTITY_FAILED, new FailureDescriptor(origEntity, "simulate failure"));
+        newEntity.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(origEntity, "simulate failure"));
         
         Asserts.succeedsEventually(new Runnable() {
             @Override public void run() {
@@ -99,7 +99,7 @@ public class HaPolicyRebindTest extends RebindTestFixtureWithApp {
                 .configure(DynamicCluster.INITIAL_SIZE, 3));
         origApp.start(ImmutableList.<Location>of(origLoc));
 
-        origCluster.addPolicy(PolicySpec.create(ServiceReplacer.class)
+        origCluster.policies().add(PolicySpec.create(ServiceReplacer.class)
                 .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
 
         // rebind
@@ -113,7 +113,7 @@ public class HaPolicyRebindTest extends RebindTestFixtureWithApp {
         newApp.getManagementContext().getSubscriptionManager().subscribe(e1, HASensors.ENTITY_FAILED, eventListener);
         newApp.getManagementContext().getSubscriptionManager().subscribe(e1, HASensors.ENTITY_RECOVERED, eventListener);
         
-        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 HaPolicyRebindTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testServiceFailureDetectorWorksAfterRebind() throws Exception {
-        origEntity.addEnricher(EnricherSpec.create(ServiceFailureDetector.class));
+        origEntity.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class));
 
         // rebind
         TestApplication newApp = rebind();
@@ -140,11 +140,11 @@ public class HaPolicyRebindTest extends RebindTestFixtureWithApp {
 
         newApp.getManagementContext().getSubscriptionManager().subscribe(newEntity, HASensors.ENTITY_FAILED, eventListener);
 
-        newEntity.setAttribute(TestEntity.SERVICE_UP, true);
+        newEntity.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(newEntity, Lifecycle.RUNNING);
         
         // trigger the failure
-        newEntity.setAttribute(TestEntity.SERVICE_UP, false);
+        newEntity.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(newEntity), null);
         assertEquals(events.size(), 1, "events="+events);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorStabilizationTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorStabilizationTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorStabilizationTest.java
index 1090b11..8c67489 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorStabilizationTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceFailureDetectorStabilizationTest.java
@@ -73,7 +73,7 @@ public class ServiceFailureDetectorStabilizationTest {
         managementContext = new LocalManagementContextForTests();
         app = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext);
         e1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(e1, Lifecycle.RUNNING);
         
         app.getManagementContext().getSubscriptionManager().subscribe(
@@ -101,12 +101,12 @@ public class ServiceFailureDetectorStabilizationTest {
     
     @Test(groups="Integration") // Because slow
     public void testNotNotifiedOfTemporaryFailuresDuringStabilisationDelay() throws Exception {
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_FAILED_STABILIZATION_DELAY, Duration.ONE_MINUTE));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         Thread.sleep(100);
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
 
         assertNoEventsContinually();
     }
@@ -115,10 +115,10 @@ public class ServiceFailureDetectorStabilizationTest {
     public void testNotifiedOfFailureAfterStabilisationDelay() throws Exception {
         final int stabilisationDelay = 1000;
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_FAILED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
@@ -129,15 +129,15 @@ public class ServiceFailureDetectorStabilizationTest {
         LOG.debug("Running testFailuresThenUpDownResetsStabilisationCount");
         final long stabilisationDelay = 1000;
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_FAILED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
 
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         Thread.sleep(OVERHEAD);
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
         
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
@@ -147,16 +147,16 @@ public class ServiceFailureDetectorStabilizationTest {
     public void testNotNotifiedOfTemporaryRecoveryDuringStabilisationDelay() throws Exception {
         final long stabilisationDelay = 1000;
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
         events.clear();
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         Thread.sleep(100);
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
 
         assertNoEventsContinually(Duration.of(stabilisationDelay + OVERHEAD));
     }
@@ -165,14 +165,14 @@ public class ServiceFailureDetectorStabilizationTest {
     public void testNotifiedOfRecoveryAfterStabilisationDelay() throws Exception {
         final int stabilisationDelay = 1000;
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
         events.clear();
 
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
         assertHasEventEventually(HASensors.ENTITY_RECOVERED, Predicates.<Object>equalTo(e1), null);
     }
@@ -181,19 +181,19 @@ public class ServiceFailureDetectorStabilizationTest {
     public void testRecoversThenDownUpResetsStabilisationCount() throws Exception {
         final long stabilisationDelay = 1000;
         
-        e1.addEnricher(EnricherSpec.create(ServiceFailureDetector.class)
+        e1.enrichers().add(EnricherSpec.create(ServiceFailureDetector.class)
                 .configure(ServiceFailureDetector.ENTITY_RECOVERED_STABILIZATION_DELAY, Duration.of(stabilisationDelay)));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         assertHasEventEventually(HASensors.ENTITY_FAILED, Predicates.<Object>equalTo(e1), null);
         events.clear();
         
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
         
-        e1.setAttribute(TestEntity.SERVICE_UP, false);
+        e1.sensors().set(TestEntity.SERVICE_UP, false);
         Thread.sleep(OVERHEAD);
-        e1.setAttribute(TestEntity.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.SERVICE_UP, true);
         assertNoEventsContinually(Duration.of(stabilisationDelay - OVERHEAD));
 
         assertHasEventEventually(HASensors.ENTITY_RECOVERED, Predicates.<Object>equalTo(e1), null);


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

Posted by al...@apache.org.
Use entity.sensors().* etc, instead of deprecated methods


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

Branch: refs/heads/master
Commit: 4d08310c3b60a299086af179a35d8449b24e81ce
Parents: 8636eb3
Author: Aled Sage <al...@gmail.com>
Authored: Mon Sep 21 14:48:29 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Oct 5 15:41:26 2015 +0100

----------------------------------------------------------------------
 .../org/apache/brooklyn/api/policy/Policy.java  |   2 +-
 .../core/enricher/AbstractEnricher.java         |   4 +-
 .../core/entity/AbstractApplication.java        |   2 +-
 .../brooklyn/core/entity/AbstractEntity.java    |  20 +--
 .../apache/brooklyn/core/entity/Entities.java   |   4 +-
 .../brooklyn/core/entity/EntityAdjuncts.java    |   2 +-
 .../core/entity/EntityAndAttribute.java         |   2 +-
 .../brooklyn/core/entity/EntityDynamicType.java |  12 +-
 .../brooklyn/core/entity/EntityFunctions.java   |   2 +-
 .../entity/lifecycle/ServiceStateLogic.java     |  14 +-
 .../core/feed/AttributePollHandler.java         |   2 +-
 .../brooklyn/core/feed/ConfigToAttributes.java  |   2 +-
 .../access/PortForwardManagerClient.java        |   2 +-
 .../core/mgmt/internal/LocalEntityManager.java  |   3 +-
 .../mgmt/persist/BrooklynPersistenceUtils.java  |   4 +-
 .../mgmt/rebind/BasicEntityRebindSupport.java   |   7 +-
 .../rebind/PeriodicDeltaChangeListener.java     |   4 +-
 .../mgmt/rebind/dto/MementosGenerators.java     |   4 +-
 .../core/objs/AbstractEntityAdjunct.java        |   4 +-
 .../core/objs/proxy/InternalEntityFactory.java  |  10 +-
 .../objs/proxy/InternalLocationFactory.java     |   2 +-
 .../apache/brooklyn/core/policy/Policies.java   |   4 +-
 .../brooklyn/core/sensor/StaticSensor.java      |   2 +-
 .../core/server/entity/BrooklynMetricsImpl.java |  14 +-
 .../stock/AbstractAggregatingEnricher.java      |   8 +-
 .../enricher/stock/AbstractAggregator.java      |  10 +-
 .../stock/AbstractMultipleSensorAggregator.java |   4 +-
 .../enricher/stock/AbstractTransformer.java     |   2 +-
 .../stock/AbstractTypeTransformingEnricher.java |   2 +-
 .../brooklyn/enricher/stock/AddingEnricher.java |   6 +-
 .../brooklyn/enricher/stock/Aggregator.java     |   6 +-
 .../brooklyn/enricher/stock/Combiner.java       |   2 +-
 .../stock/CustomAggregatingEnricher.java        |   2 +-
 .../apache/brooklyn/enricher/stock/Joiner.java  |   2 +-
 .../brooklyn/enricher/stock/Propagator.java     |   6 +-
 .../stock/SensorPropagatingEnricher.java        |  10 +-
 .../stock/SensorTransformingEnricher.java       |   4 +-
 .../entity/group/AbstractGroupImpl.java         |  28 ++--
 .../group/AbstractMembershipTrackingPolicy.java |   8 +-
 .../entity/group/DynamicClusterImpl.java        |  22 +--
 .../entity/group/DynamicFabricImpl.java         |   8 +-
 .../brooklyn/entity/group/DynamicGroupImpl.java |   6 +-
 .../entity/group/DynamicMultiGroupImpl.java     |   4 +-
 .../entity/stock/BasicStartableImpl.java        |   4 +-
 .../brooklyn/entity/stock/DataEntityImpl.java   |   4 +-
 .../entity/stock/DelegateEntityImpl.java        |   6 +-
 .../windows/WindowsPerformanceCounterFeed.java  |   6 +-
 .../winrm/AdvertiseWinrmLoginPolicy.java        |   4 +-
 .../brooklyn/util/core/flags/FlagUtils.java     |   2 +-
 .../config/MapConfigKeyAndFriendsMoreTest.java  | 100 ++++++------
 ...apListAndOtherStructuredConfigKeyTest.groovy | 112 +++++++-------
 .../core/enricher/BasicEnricherTest.java        |  12 +-
 .../core/enricher/EnricherConfigTest.java       |  18 +--
 .../brooklyn/core/entity/AttributeMapTest.java  |   2 +-
 .../brooklyn/core/entity/AttributeTest.java     |   4 +-
 .../entity/ConfigEntityInheritanceTest.java     |   6 +-
 .../core/entity/DependentConfigurationTest.java |  44 +++---
 .../brooklyn/core/entity/EntitiesTest.java      |   6 +-
 .../core/entity/EntityFunctionsTest.java        |   4 +-
 .../core/entity/EntityLocationsTest.java        |   8 +-
 .../core/entity/EntityPreManagementTest.java    |  14 +-
 .../core/entity/EntityPredicatesTest.java       |   4 +-
 .../core/entity/EntityRegistrationTest.java     |   4 +-
 .../brooklyn/core/entity/EntitySpecTest.java    |  12 +-
 .../core/entity/EntitySubscriptionTest.java     |  44 +++---
 .../brooklyn/core/entity/EntityTypeTest.java    |   4 +-
 .../core/entity/PolicyRegistrationTest.java     |  48 +++---
 .../downloads/BasicDownloadsRegistryTest.java   |  26 ++--
 .../DownloadProducerFromLocalRepoTest.java      |   6 +-
 .../DownloadProducerFromPropertiesTest.java     |   6 +-
 .../downloads/DownloadSubstitutersTest.java     |   8 +-
 .../core/entity/hello/HelloEntityImpl.java      |   4 +-
 .../core/entity/hello/LocalEntitiesTest.java    |  16 +-
 .../entity/internal/ConfigMapGroovyTest.groovy  |   2 +-
 .../core/entity/internal/ConfigMapTest.java     |  14 +-
 .../EntityConfigMapUsageLegacyTest.java         |  32 ++--
 .../internal/EntityConfigMapUsageTest.java      |  20 +--
 .../entity/lifecycle/ServiceStateLogicTest.java |   8 +-
 .../core/location/LocationPredicatesTest.java   |   2 +-
 .../access/BrooklynAccessUtilsTest.java         |   2 +-
 .../access/PortForwardManagerRebindTest.java    |   4 +-
 .../ha/HighAvailabilityManagerInMemoryTest.java |   2 +-
 .../HighAvailabilityManagerSplitBrainTest.java  |   2 +-
 .../brooklyn/core/mgmt/ha/HotStandbyTest.java   |  16 +-
 .../internal/EntityExecutionManagerTest.java    |   4 +-
 .../internal/LocalSubscriptionManagerTest.java  |  16 +-
 .../mgmt/osgi/OsgiVersionMoreEntityTest.java    |   6 +-
 ...ntoPersisterInMemorySizeIntegrationTest.java |   4 +-
 .../BrooklynMementoPersisterTestFixture.java    |   4 +-
 .../core/mgmt/rebind/CheckpointEntityTest.java  |   4 +-
 .../mgmt/rebind/RebindCatalogEntityTest.java    |   2 +-
 .../core/mgmt/rebind/RebindEnricherTest.java    |  48 +++---
 .../rebind/RebindEntityDynamicTypeInfoTest.java |   6 +-
 .../core/mgmt/rebind/RebindEntityTest.java      |  36 ++---
 .../core/mgmt/rebind/RebindFailuresTest.java    |   8 +-
 .../core/mgmt/rebind/RebindFeedTest.java        |   8 +-
 .../core/mgmt/rebind/RebindFeedWithHaTest.java  |   4 +-
 .../core/mgmt/rebind/RebindManagerTest.java     |   2 +-
 .../core/mgmt/rebind/RebindPolicyTest.java      |  50 +++---
 .../transformer/CompoundTransformerTest.java    |   4 +-
 .../core/policy/basic/BasicPolicyTest.java      |   6 +-
 .../core/policy/basic/PolicyConfigTest.java     |  22 +--
 .../policy/basic/PolicySubscriptionTest.java    |  30 ++--
 .../core/sensor/http/HttpRequestSensorTest.java |   2 +-
 .../ssh/SshCommandSensorIntegrationTest.java    |   2 +-
 .../core/server/entity/BrooklynMetricsTest.java |   4 +-
 .../core/test/entity/TestClusterImpl.java       |   2 +-
 .../core/test/entity/TestEntityImpl.java        |   6 +-
 .../EntityCleanupLongevityTestFixture.java      |   6 +-
 .../qa/performance/EntityPerformanceTest.java   |   6 +-
 .../EntityPersistencePerformanceTest.java       |   8 +-
 ...stomAggregatingEnricherDeprecatedTest.groovy |  46 +++---
 .../stock/CustomAggregatingEnricherTest.java    | 120 +++++++--------
 .../brooklyn/enricher/stock/EnrichersTest.java  | 151 +++++++++----------
 ...SensorPropagatingEnricherDeprecatedTest.java |  26 ++--
 .../stock/SensorPropagatingEnricherTest.java    |  58 +++----
 .../TransformingEnricherDeprecatedTest.groovy   |   4 +-
 .../stock/TransformingEnricherTest.java         |   4 +-
 .../YamlRollingTimeWindowMeanEnricherTest.java  |   4 +-
 .../YamlTimeWeightedDeltaEnricherTest.java      |   4 +-
 .../entity/group/DynamicClusterTest.java        |   2 +-
 ...DynamicClusterWithAvailabilityZonesTest.java |  14 +-
 .../brooklyn/entity/group/DynamicGroupTest.java |  49 +++---
 .../entity/group/DynamicMultiGroupTest.java     |  26 ++--
 .../entity/group/GroupPickUpEntitiesTest.java   |  16 +-
 .../apache/brooklyn/entity/group/GroupTest.java |  10 +-
 .../group/MembershipTrackingPolicyTest.java     |  44 +++---
 .../feed/function/FunctionFeedTest.java         |   4 +-
 .../apache/brooklyn/feed/http/HttpFeedTest.java |   4 +-
 .../feed/ssh/SshFeedIntegrationTest.java        |   2 +-
 .../WindowsPerformanceCounterFeedLiveTest.java  |   2 +-
 ...stMachineProvisioningLocationRebindTest.java |   2 +-
 .../brooklyn/util/core/task/TasksTest.java      |  12 +-
 .../util/core/task/ssh/SshTasksTest.java        |   4 +-
 .../util/core/text/TemplateProcessorTest.java   |   2 +-
 .../brooklyn/demo/CumulusRDFApplication.java    |   2 +-
 .../brooklyn/demo/ResilientMongoDbApp.java      |  10 +-
 .../demo/WebClusterDatabaseExample.java         |   8 +-
 .../demo/WebClusterDatabaseExampleApp.java      |   8 +-
 .../demo/WebClusterDatabaseExampleGroovy.groovy |   2 +-
 .../apache/brooklyn/demo/WebClusterExample.java |   2 +-
 ...lusterDatabaseExampleAppIntegrationTest.java |   6 +-
 .../policy/jclouds/os/CreateUserPolicy.java     |   4 +-
 .../location/jclouds/LiveTestEntity.java        |   8 +-
 .../jclouds/RebindJcloudsLocationLiveTest.java  |   2 +-
 .../policy/autoscaling/AutoScalerPolicy.java    |  10 +-
 .../brooklyn/policy/enricher/DeltaEnricher.java |   2 +-
 .../policy/enricher/HttpLatencyDetector.java    |   6 +-
 .../policy/enricher/RollingMeanEnricher.java    |   2 +-
 .../enricher/RollingTimeWindowMeanEnricher.java |   2 +-
 .../enricher/TimeFractionDeltaEnricher.java     |   2 +-
 .../enricher/TimeWeightedDeltaEnricher.java     |   4 +-
 .../policy/followthesun/FollowTheSunPolicy.java |  16 +-
 .../followthesun/FollowTheSunPoolImpl.java      |  28 ++--
 .../policy/ha/AbstractFailureDetector.java      |   4 +-
 .../policy/ha/ConditionalSuspendPolicy.java     |   6 +-
 .../policy/ha/ServiceFailureDetector.java       |   4 +-
 .../brooklyn/policy/ha/ServiceReplacer.java     |   4 +-
 .../brooklyn/policy/ha/ServiceRestarter.java    |   4 +-
 .../BalanceableWorkerPoolImpl.java              |  26 ++--
 .../ItemsInContainersGroupImpl.java             |   6 +-
 .../loadbalancing/LoadBalancingPolicy.java      |  18 +--
 .../autoscaling/AutoScalerPolicyMetricTest.java |  60 ++++----
 .../autoscaling/AutoScalerPolicyRebindTest.java |  10 +-
 .../AutoScalerPolicyReconfigurationTest.java    |  32 ++--
 .../autoscaling/AutoScalerPolicyTest.java       | 132 ++++++++--------
 .../autoscaling/LocallyResizableEntity.java     |   2 +-
 .../policy/enricher/DeltaEnrichersTests.groovy  |   8 +-
 .../enricher/HttpLatencyDetectorTest.java       |  18 +--
 .../policy/enricher/RebindEnricherTest.java     |  32 ++--
 .../enricher/RollingMeanEnricherTest.groovy     |   6 +-
 .../RollingTimeWindowMeanEnricherTest.groovy    |   4 +-
 .../enricher/TimeFractionDeltaEnricherTest.java |   6 +-
 .../AbstractFollowTheSunPolicyTest.java         |   6 +-
 .../FollowTheSunPolicySoakTest.java             |   2 +-
 .../followthesun/FollowTheSunPolicyTest.java    |  35 +++--
 .../ha/ConnectionFailureDetectorTest.java       |  20 +--
 .../brooklyn/policy/ha/HaPolicyRebindTest.java  |  14 +-
 ...ServiceFailureDetectorStabilizationTest.java |  44 +++---
 .../policy/ha/ServiceFailureDetectorTest.java   |  78 +++++-----
 .../brooklyn/policy/ha/ServiceReplacerTest.java |  28 ++--
 .../policy/ha/ServiceRestarterTest.java         |  28 ++--
 .../AbstractLoadBalancingPolicyTest.java        |   7 +-
 .../LoadBalancingPolicyConcurrencyTest.java     |   2 +-
 .../LoadBalancingPolicySoakTest.java            |   2 +-
 .../loadbalancing/LoadBalancingPolicyTest.java  |   8 +-
 .../loadbalancing/MockContainerEntityImpl.java  |  15 +-
 .../loadbalancing/MockItemEntityImpl.java       |   4 +-
 .../postgresql/PostgreSqlNodeSaltImpl.java      |   2 +-
 .../brooklyn/entity/salt/SaltConfigs.java       |   8 +-
 .../entity/salt/SaltLifecycleEffectorTasks.java |   4 +-
 .../entity/monitoring/zabbix/ZabbixFeed.java    |   2 +-
 .../monitoring/zabbix/ZabbixServerImpl.java     |   4 +-
 .../nosql/hazelcast/HazelcastClusterImpl.java   |   8 +-
 .../nosql/hazelcast/HazelcastNodeImpl.java      |   2 +-
 .../nosql/hazelcast/HazelcastNodeSshDriver.java |   2 +-
 .../Infinispan5ServerIntegrationTest.groovy     |   2 +-
 .../brooklynnode/BrooklynClusterImpl.java       |   2 +-
 .../brooklynnode/BrooklynEntityMirrorImpl.java  |   8 +-
 .../entity/brooklynnode/BrooklynNodeImpl.java   |   4 +-
 .../brooklynnode/LocalBrooklynNodeImpl.java     |   4 +-
 .../BrooklynClusterUpgradeEffectorBody.java     |   4 +-
 .../BrooklynNodeUpgradeEffectorBody.java        |   8 +-
 .../brooklyn/entity/chef/ChefAttributeFeed.java |   8 +-
 .../brooklyn/entity/chef/ChefConfigs.java       |   8 +-
 .../entity/chef/ChefLifecycleEffectorTasks.java |   6 +-
 .../brooklyn/entity/java/JavaAppUtils.java      |   4 +-
 .../java/JavaSoftwareProcessSshDriver.java      |   2 +-
 .../apache/brooklyn/entity/java/JmxSupport.java |  12 +-
 .../entity/java/VanillaJavaAppImpl.java         |   4 +-
 .../entity/java/VanillaJavaAppSshDriver.java    |   4 +-
 .../entity/machine/pool/ServerPoolImpl.java     |  40 ++---
 .../base/AbstractSoftwareProcessSshDriver.java  |  12 +-
 .../AbstractSoftwareProcessWinRmDriver.java     |   4 +-
 .../software/base/SameServerEntityImpl.java     |   2 +-
 .../software/base/SoftwareProcessImpl.java      |  20 +--
 .../base/VanillaWindowsProcessImpl.java         |   4 +-
 .../base/VanillaWindowsProcessWinRmDriver.java  |   2 +-
 .../MachineLifecycleEffectorTasks.java          |  28 ++--
 .../system_service/SystemServiceEnricher.java   |   2 +-
 .../org/apache/brooklyn/feed/jmx/JmxHelper.java |   2 +-
 .../BrooklynNodeIntegrationTest.java            |   2 +-
 .../entity/brooklynnode/BrooklynNodeTest.java   |   2 +-
 .../entity/brooklynnode/MockBrooklynNode.java   |   2 +-
 .../brooklynnode/SameBrooklynNodeImpl.java      |   4 +-
 .../brooklynnode/SelectMasterEffectorTest.java  |   4 +-
 .../entity/chef/ChefLiveTestSupport.java        |   2 +-
 .../chef/mysql/TypedToyMySqlEntityChef.java     |  12 +-
 .../brooklyn/entity/java/JavaOptsTest.java      |   2 +-
 .../brooklyn/entity/java/JmxSupportTest.java    |   8 +-
 .../entity/java/VanillaJavaAppRebindTest.java   |   4 +-
 .../entity/java/VanillaJavaAppTest.java         |   8 +-
 .../base/DoNothingSoftwareProcessImpl.java      |   2 +-
 .../base/SoftwareProcessEntityLatchTest.java    |   2 +-
 .../base/SoftwareProcessEntityRebindTest.java   |   4 +-
 .../base/SoftwareProcessEntityTest.java         |  14 +-
 ...SoftwareProcessSshDriverIntegrationTest.java |  18 +--
 .../MachineLifecycleEffectorTasksTest.java      |   4 +-
 .../base/lifecycle/StartStopSshDriverTest.java  |   4 +-
 .../mysql/DynamicToyMySqlEntityBuilder.java     |   6 +-
 .../apache/brooklyn/feed/jmx/JmxFeedTest.java   |  12 +-
 .../brooklyn/feed/jmx/RebindJmxFeedTest.java    |  10 +-
 .../entity/database/crate/CrateNodeImpl.java    |   6 +-
 .../database/mariadb/MariaDbNodeImpl.java       |   8 +-
 .../database/mariadb/MariaDbSshDriver.java      |   2 +-
 .../entity/database/mysql/MySqlClusterImpl.java |  29 ++--
 .../entity/database/mysql/MySqlNodeImpl.java    |   8 +-
 .../entity/database/mysql/MySqlSshDriver.java   |   4 +-
 .../PostgreSqlNodeChefImplFromScratch.java      |   2 +-
 .../database/postgresql/PostgreSqlNodeImpl.java |   2 +-
 .../postgresql/PostgreSqlSshDriver.java         |   4 +-
 .../database/rubyrep/RubyRepNodeImpl.java       |   4 +-
 .../database/rubyrep/RubyRepSshDriver.java      |   2 +-
 .../messaging/activemq/ActiveMQBrokerImpl.java  |   4 +-
 .../messaging/activemq/ActiveMQQueueImpl.java   |   2 +-
 .../messaging/activemq/ActiveMQTopicImpl.java   |   2 +-
 .../entity/messaging/kafka/KafkaBrokerImpl.java |  13 +-
 .../messaging/kafka/KafkaClusterImpl.java       |  16 +-
 .../entity/messaging/qpid/QpidBrokerImpl.java   |   2 +-
 .../messaging/qpid/QpidDestinationImpl.java     |   2 +-
 .../entity/messaging/qpid/QpidQueueImpl.java    |   2 +-
 .../entity/messaging/qpid/QpidTopicImpl.java    |   2 +-
 .../messaging/rabbit/RabbitBrokerImpl.java      |   4 +-
 .../messaging/rabbit/RabbitDestination.java     |   2 +-
 .../entity/messaging/rabbit/RabbitQueue.java    |   2 +-
 .../messaging/storm/StormDeploymentImpl.java    |  10 +-
 .../entity/messaging/storm/StormImpl.java       |   2 +-
 .../entity/zookeeper/ZooKeeperEnsembleImpl.java |   6 +-
 .../entity/monitoring/monit/MonitNodeImpl.java  |   2 +-
 .../entity/network/bind/BindDnsServerImpl.java  |  28 ++--
 .../bind/BindDnsServerIntegrationTest.java      |   4 +-
 .../network/bind/PrefixAndIdEnricher.java       |   4 +-
 .../cassandra/CassandraDatacenterImpl.java      |  18 +--
 .../nosql/cassandra/CassandraFabricImpl.java    |  10 +-
 .../nosql/cassandra/CassandraNodeImpl.java      |  14 +-
 .../nosql/couchbase/CouchbaseClusterImpl.java   |  36 ++---
 .../nosql/couchbase/CouchbaseNodeImpl.java      |   4 +-
 .../nosql/couchbase/CouchbaseNodeSshDriver.java |  12 +-
 .../couchbase/CouchbaseSyncGatewayImpl.java     |   2 +-
 .../entity/nosql/couchdb/CouchDBNodeImpl.java   |   4 +-
 .../nosql/couchdb/CouchDBNodeSshDriver.java     |   2 +-
 .../ElasticSearchNodeSshDriver.java             |   2 +-
 .../entity/nosql/mongodb/MongoDBClientImpl.java |   2 +-
 .../nosql/mongodb/MongoDBReplicaSetImpl.java    |  14 +-
 .../entity/nosql/mongodb/MongoDBServerImpl.java |   2 +-
 .../sharding/CoLocatedMongoDBRouterImpl.java    |   2 +-
 .../sharding/MongoDBRouterClusterImpl.java      |   8 +-
 .../sharding/MongoDBShardClusterImpl.java       |   4 +-
 .../sharding/MongoDBShardedDeploymentImpl.java  |   4 +-
 .../entity/nosql/redis/RedisClusterImpl.java    |   2 +-
 .../entity/nosql/riak/RiakClusterImpl.java      |  26 ++--
 .../entity/nosql/riak/RiakNodeImpl.java         |   4 +-
 .../entity/nosql/riak/RiakNodeSshDriver.java    |  14 +-
 .../entity/nosql/solr/SolrServerImpl.java       |   2 +-
 .../entity/osgi/karaf/KarafContainerImpl.java   |  28 ++--
 .../entity/dns/AbstractGeoDnsServiceImpl.java   |   8 +-
 .../geoscaling/GeoscalingDnsServiceImpl.java    |  16 +-
 .../entity/proxy/AbstractControllerImpl.java    |  20 +--
 .../AbstractNonProvisionedControllerImpl.java   |   8 +-
 .../entity/proxy/nginx/NginxControllerImpl.java |  12 +-
 .../entity/proxy/nginx/NginxSshDriver.java      |  12 +-
 .../entity/proxy/nginx/UrlMappingImpl.java      |  10 +-
 .../ControlledDynamicWebAppClusterImpl.java     |  20 +--
 .../entity/webapp/DynamicWebAppClusterImpl.java |  12 +-
 .../entity/webapp/DynamicWebAppFabricImpl.java  |   4 +-
 .../webapp/JavaWebAppSoftwareProcessImpl.java   |  10 +-
 .../entity/webapp/JavaWebAppSshDriver.java      |   4 +-
 .../entity/webapp/WebAppServiceMethods.java     |   8 +-
 .../entity/webapp/jboss/JBoss6SshDriver.java    |   2 +-
 .../entity/webapp/jboss/JBoss7ServerImpl.java   |   4 +-
 .../entity/webapp/jboss/JBoss7SshDriver.java    |   4 +-
 .../entity/webapp/jetty/Jetty6ServerImpl.java   |   2 +-
 .../webapp/nodejs/NodeJsWebAppServiceImpl.java  |   4 +-
 .../webapp/nodejs/NodeJsWebAppSshDriver.java    |   4 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |  10 +-
 .../geoscaling/GeoscalingIntegrationTest.java   |  12 +-
 .../entity/proxy/AbstractControllerTest.java    |  50 +++---
 .../brooklyn/entity/proxy/StubAppServer.java    |   8 +-
 .../proxy/TrackingAbstractControllerImpl.java   |   2 +-
 .../brooklyn/entity/proxy/UrlMappingTest.java   |   4 +-
 .../nginx/NginxHttpsSslIntegrationTest.java     |   4 +-
 .../AbstractWebAppFixtureIntegrationTest.java   |   4 +-
 ...lledDynamicWebAppClusterIntegrationTest.java |   2 +-
 .../ControlledDynamicWebAppClusterTest.java     |   4 +-
 .../entity/webapp/DynamicWebAppClusterTest.java |   4 +-
 .../entity/webapp/DynamicWebAppFabricTest.java  |   4 +-
 .../webapp/ElasticCustomLocationTest.java       |   4 +-
 .../webapp/TomcatAutoScalerPolicyTest.java      |   2 +-
 .../test/entity/TestJavaWebAppEntity.java       |   8 +-
 .../test/entity/TestJavaWebAppEntityImpl.java   |   2 +-
 .../camp/brooklyn/DslAndRebindYamlTest.java     |   4 +-
 .../EnrichersSlightlySimplerYamlTest.java       |  14 +-
 .../camp/brooklyn/EnrichersYamlTest.java        |   4 +-
 .../brooklyn/JavaWebAppsIntegrationTest.java    |   2 +-
 .../camp/brooklyn/PoliciesYamlTest.java         |   8 +-
 .../TestSensorAndEffectorInitializer.java       |   4 +-
 .../CatalogOsgiVersionMoreEntityTest.java       |   6 +-
 .../brooklyn/catalog/CatalogYamlPolicyTest.java |   6 +-
 .../brooklyn/catalog/CatalogYamlRebindTest.java |   8 +-
 .../BrooklynEntityMirrorIntegrationTest.java    |   8 +-
 .../brooklynnode/BrooklynNodeRestTest.java      |   2 +-
 .../qa/load/SimulatedJBoss7ServerImpl.java      |  18 +--
 .../qa/load/SimulatedMySqlNodeImpl.java         |   6 +-
 .../qa/load/SimulatedNginxControllerImpl.java   |   8 +-
 .../brooklyn/qa/load/SimulatedTheeTierApp.java  |   6 +-
 .../webcluster/SinusoidalLoadGenerator.java     |   2 +-
 .../qa/longevity/webcluster/WebClusterApp.java  |   4 +-
 .../brooklyn/rest/resources/PolicyResource.java |  19 ++-
 .../brooklyn/rest/resources/SensorResource.java |   4 +-
 .../rest/util/BrooklynRestResourceUtils.java    |   6 +-
 .../brooklyn/rest/domain/SensorSummaryTest.java |   2 +-
 .../rest/resources/ApplicationResourceTest.java |   4 +-
 .../rest/resources/DescendantsTest.java         |   4 +-
 .../rest/resources/SensorResourceTest.java      |   2 +-
 .../brooklynnode/DeployBlueprintTest.java       |   2 +-
 .../testing/mocks/RestMockSimpleEntity.java     |   2 +-
 .../util/BrooklynRestResourceUtilsTest.java     |   2 +-
 .../apache/brooklyn/test/EntityTestUtils.java   |   4 +-
 358 files changed, 1910 insertions(+), 1908 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java b/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
index 171bff7..957da0a 100644
--- a/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
+++ b/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
@@ -65,7 +65,7 @@ public interface Policy extends EntityAdjunct, Rebindable, Configurable {
     <T> T getConfig(ConfigKey<T> key);
     
     /**
-     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().setConfig(key, val)}
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().set(key, val)}
      */
     @Deprecated
     <T> T setConfig(ConfigKey<T> key, T val);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java b/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
index 0dc36f6..8c3f41e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
@@ -106,9 +106,9 @@ public abstract class AbstractEnricher extends AbstractEntityAdjunct implements
                 if (Objects.equal(oldValue, newVal))
                     return;
             }
-            entity.setAttribute((AttributeSensor<T>)sensor, newVal);
+            entity.sensors().set((AttributeSensor<T>)sensor, newVal);
         } else { 
-            entity.emit(sensor, newVal);
+            entity.sensors().emit(sensor, newVal);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/AbstractApplication.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractApplication.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractApplication.java
index 03bfe31..e000997 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractApplication.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractApplication.java
@@ -200,7 +200,7 @@ public abstract class AbstractApplication extends AbstractEntity implements Star
         logApplicationLifecycle("Stopping");
 
         ServiceStateLogic.ServiceNotUpLogic.updateNotUpIndicator(this, Attributes.SERVICE_STATE_ACTUAL, "Application stopping");
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
         setExpectedStateAndRecordLifecycleEvent(Lifecycle.STOPPING);
         try {
             doStop();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
index e432717..b1b1d27 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
@@ -644,7 +644,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
         // TODO not holding synchronization lock while notifying risks out-of-order if addChild+removeChild called in rapid succession.
         // But doing notification in synchronization block may risk deadlock?
         if (changed) {
-            emit(AbstractEntity.CHILD_ADDED, child);
+            sensors().emit(AbstractEntity.CHILD_ADDED, child);
         }
         return child;
     }
@@ -682,7 +682,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
         }
         
         if (changed) {
-            emit(AbstractEntity.CHILD_REMOVED, child);
+            sensors().emit(AbstractEntity.CHILD_REMOVED, child);
         }
         return changed;
     }
@@ -721,7 +721,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             getApplication();
             
             if (changed) {
-                emit(AbstractEntity.GROUP_ADDED, group);
+                sensors().emit(AbstractEntity.GROUP_ADDED, group);
             }
         }
 
@@ -731,7 +731,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             getApplication();
             
             if (changed) {
-                emit(AbstractEntity.GROUP_REMOVED, group);
+                sensors().emit(AbstractEntity.GROUP_REMOVED, group);
             }
         }
     }
@@ -847,7 +847,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             }
             
             for (Location loc : truelyNewLocations) {
-                emit(AbstractEntity.LOCATION_ADDED, loc);
+                sensors().emit(AbstractEntity.LOCATION_ADDED, loc);
             }
         }
         
@@ -869,7 +869,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             locations.set(MutableList.<Location>builder().addAll(oldLocations).removeAll(removedLocations).buildImmutable());
             
             for (Location loc : trulyRemovedLocations) {
-                emit(AbstractEntity.LOCATION_REMOVED, loc);
+                sensors().emit(AbstractEntity.LOCATION_REMOVED, loc);
             }
         }
         
@@ -1577,8 +1577,8 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
     // these enrichers do nothing unless Attributes.SERVICE_NOT_UP_INDICATORS are used
     // and/or SERVICE_STATE_EXPECTED 
     protected void initEnrichers() {
-        addEnricher(ServiceNotUpLogic.newEnricherForServiceUpIfNotUpIndicatorsEmpty());
-        addEnricher(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
+        enrichers().add(ServiceNotUpLogic.newEnricherForServiceUpIfNotUpIndicatorsEmpty());
+        enrichers().add(ServiceStateLogic.newEnricherForServiceStateFromProblemsAndUp());
     }
     
     // -------- POLICIES --------------------
@@ -1632,7 +1632,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             ((AbstractPolicy)policy).setEntity(AbstractEntity.this);
             
             getManagementSupport().getEntityChangeListener().onPolicyAdded(policy);
-            emit(AbstractEntity.POLICY_ADDED, new PolicyDescriptor(policy));
+            sensors().emit(AbstractEntity.POLICY_ADDED, new PolicyDescriptor(policy));
         }
 
         @Override
@@ -1649,7 +1649,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             
             if (changed) {
                 getManagementSupport().getEntityChangeListener().onPolicyRemoved(policy);
-                emit(AbstractEntity.POLICY_REMOVED, new PolicyDescriptor(policy));
+                sensors().emit(AbstractEntity.POLICY_REMOVED, new PolicyDescriptor(policy));
             }
             return changed;
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
index c2c2195..a9616d8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
@@ -377,14 +377,14 @@ public class Entities {
 
         if (!e.getPolicies().isEmpty()) {
             out.append(currentIndentation+tab+tab+"Policies:\n");
-            for (Policy policy : e.getPolicies()) {
+            for (Policy policy : e.policies()) {
                 dumpInfo(policy, out, currentIndentation+tab+tab+tab, tab);
             }
         }
 
         if (!e.getEnrichers().isEmpty()) {
             out.append(currentIndentation+tab+tab+"Enrichers:\n");
-            for (Enricher enricher : e.getEnrichers()) {
+            for (Enricher enricher : e.enrichers()) {
                 dumpInfo(enricher, out, currentIndentation+tab+tab+tab, tab);
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/EntityAdjuncts.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityAdjuncts.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityAdjuncts.java
index f5a6633..fc1daf4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityAdjuncts.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityAdjuncts.java
@@ -53,7 +53,7 @@ public class EntityAdjuncts {
         ComputeServiceIndicatorsFromChildrenAndMembers.DEFAULT_UNIQUE_TAG_UP);
     
     public static List<Enricher> getNonSystemEnrichers(Entity entity) {
-        List<Enricher> result = MutableList.copyOf(entity.getEnrichers());
+        List<Enricher> result = MutableList.copyOf(entity.enrichers());
         Iterator<Enricher> ri = result.iterator();
         while (ri.hasNext()) {
             if (isSystemEnricher(ri.next())) ri.remove();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/EntityAndAttribute.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityAndAttribute.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityAndAttribute.java
index e1ae639..037722c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityAndAttribute.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityAndAttribute.java
@@ -67,7 +67,7 @@ public class EntityAndAttribute<T> implements Supplier<T> {
     }
 
     public void setValue(T val) {
-        ((EntityLocal)entity).setAttribute(attribute, val);
+        ((EntityLocal)entity).sensors().set(attribute, val);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/EntityDynamicType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityDynamicType.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityDynamicType.java
index 6d65f41..3634f73 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityDynamicType.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityDynamicType.java
@@ -125,9 +125,9 @@ public class EntityDynamicType extends BrooklynDynamicType<Entity, AbstractEntit
         Effector<?> oldEffector = effectors.put(newEffector.getName(), newEffector);
         invalidateSnapshot();
         if (oldEffector!=null)
-            instance.emit(AbstractEntity.EFFECTOR_CHANGED, newEffector.getName());
+            instance.sensors().emit(AbstractEntity.EFFECTOR_CHANGED, newEffector.getName());
         else
-            instance.emit(AbstractEntity.EFFECTOR_ADDED, newEffector.getName());
+            instance.sensors().emit(AbstractEntity.EFFECTOR_ADDED, newEffector.getName());
     }
 
     /**
@@ -158,7 +158,7 @@ public class EntityDynamicType extends BrooklynDynamicType<Entity, AbstractEntit
         Effector<?> removed = effectors.remove(effector.getName());
         invalidateSnapshot();
         if (removed != null) {
-            instance.emit(AbstractEntity.EFFECTOR_REMOVED, removed.getName());
+            instance.sensors().emit(AbstractEntity.EFFECTOR_REMOVED, removed.getName());
         }
     }
 
@@ -184,7 +184,7 @@ public class EntityDynamicType extends BrooklynDynamicType<Entity, AbstractEntit
     public void addSensor(Sensor<?> newSensor) {
         sensors.put(newSensor.getName(), newSensor);
         invalidateSnapshot();
-        instance.emit(AbstractEntity.SENSOR_ADDED, newSensor);
+        instance.sensors().emit(AbstractEntity.SENSOR_ADDED, newSensor);
     }
     
     /**
@@ -199,7 +199,7 @@ public class EntityDynamicType extends BrooklynDynamicType<Entity, AbstractEntit
     public void addSensorIfAbsent(Sensor<?> newSensor) {
         Sensor<?> prev = addSensorIfAbsentWithoutPublishing(newSensor);
         if (prev == null) {
-            instance.emit(AbstractEntity.SENSOR_ADDED, newSensor);
+            instance.sensors().emit(AbstractEntity.SENSOR_ADDED, newSensor);
         }
     }
     
@@ -218,7 +218,7 @@ public class EntityDynamicType extends BrooklynDynamicType<Entity, AbstractEntit
         Sensor<?> result = sensors.remove(sensorName);
         if (result != null) {
             invalidateSnapshot();
-            instance.emit(AbstractEntity.SENSOR_REMOVED, result);
+            instance.sensors().emit(AbstractEntity.SENSOR_REMOVED, result);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/EntityFunctions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityFunctions.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityFunctions.java
index 7ec70a1..331fb7d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityFunctions.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityFunctions.java
@@ -95,7 +95,7 @@ public class EntityFunctions {
                         ((EntityInternal)input).removeAttribute(sensor);
                     } else {
                         value = TypeCoercions.coerce(value, sensor.getTypeToken());
-                        ((EntityInternal)input).setAttribute(sensor, value);
+                        ((EntityInternal)input).sensors().set(sensor, value);
                     }
                 }
                 return null;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java b/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java
index c2606c1..e64e41e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java
@@ -146,7 +146,7 @@ public class ServiceStateLogic {
         };
         
         if (!Entities.isNoLongerManaged(entity)) { 
-            entity.modifyAttribute(sensor, modifier);
+            entity.sensors().modify(sensor, modifier);
         }
     }
     
@@ -169,9 +169,9 @@ public class ServiceStateLogic {
                 }
             }
         }
-        ((EntityInternal)entity).setAttribute(Attributes.SERVICE_STATE_EXPECTED, new Lifecycle.Transition(state, new Date()));
+        ((EntityInternal)entity).sensors().set(Attributes.SERVICE_STATE_EXPECTED, new Lifecycle.Transition(state, new Date()));
         
-        Maybe<Enricher> enricher = EntityAdjuncts.tryFindWithUniqueTag(entity.getEnrichers(), ComputeServiceState.DEFAULT_ENRICHER_UNIQUE_TAG);
+        Maybe<Enricher> enricher = EntityAdjuncts.tryFindWithUniqueTag(entity.enrichers(), ComputeServiceState.DEFAULT_ENRICHER_UNIQUE_TAG);
         if (enricher.isPresent() && enricher.get() instanceof ComputeServiceState) {
             ((ComputeServiceState)enricher.get()).onEvent(null);
         }
@@ -265,9 +265,9 @@ public class ServiceStateLogic {
                 suppressDuplicates = true;
             }
             
-            subscribe(entity, SERVICE_PROBLEMS, this);
-            subscribe(entity, SERVICE_UP, this);
-            subscribe(entity, SERVICE_STATE_EXPECTED, this);
+            subscriptions().subscribe(entity, SERVICE_PROBLEMS, this);
+            subscriptions().subscribe(entity, SERVICE_UP, this);
+            subscriptions().subscribe(entity, SERVICE_STATE_EXPECTED, this);
             onEvent(null);
         }
 
@@ -577,7 +577,7 @@ public class ServiceStateLogic {
         }
 
         public void addTo(Entity entity) {
-            entity.addEnricher(this);
+            entity.enrichers().add(this);
         }
 
         public ComputeServiceIndicatorsFromChildrenAndMembersSpec checkChildrenAndMembers() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/feed/AttributePollHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/feed/AttributePollHandler.java b/core/src/main/java/org/apache/brooklyn/core/feed/AttributePollHandler.java
index c266836..a82f5d9 100644
--- a/core/src/main/java/org/apache/brooklyn/core/feed/AttributePollHandler.java
+++ b/core/src/main/java/org/apache/brooklyn/core/feed/AttributePollHandler.java
@@ -226,7 +226,7 @@ public class AttributePollHandler<V> implements PollHandler<V> {
             if (suppressDuplicates && Objects.equal(coercedV, entity.getAttribute(sensor))) {
                 // no change; nothing
             } else {
-                entity.setAttribute(sensor, coercedV);
+                entity.sensors().set(sensor, coercedV);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/feed/ConfigToAttributes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/feed/ConfigToAttributes.java b/core/src/main/java/org/apache/brooklyn/core/feed/ConfigToAttributes.java
index d455e80..dc81d2a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/feed/ConfigToAttributes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/feed/ConfigToAttributes.java
@@ -45,7 +45,7 @@ public class ConfigToAttributes {
         T v = entity.getAttribute(key);
         if (v!=null) return v;
         v = key.getAsSensorValue(entity);
-        if (v!=null) entity.setAttribute(key, v);
+        if (v!=null) entity.sensors().set(key, v);
         return v;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java b/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
index d0199a0..fb27ada 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
@@ -395,7 +395,7 @@ public class PortForwardManagerClient implements PortForwardManager {
 
     @Override
     public <T> T setConfig(ConfigKey<T> key, T val) {
-        return getDelegate().setConfig(key, val);
+        return getDelegate().config().set(key, val);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
index a142782..8589eb1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
@@ -700,8 +700,7 @@ public class LocalEntityManager implements EntityManagerInternal {
         
         if (!getLastManagementTransitionMode(e.getId()).isReadOnly()) {
             e.clearParent();
-            Collection<Group> groups = e.getGroups();
-            for (Group group : groups) {
+            for (Group group : e.groups()) {
                 if (!Entities.isNoLongerManaged(group)) group.removeMember(e);
             }
             if (e instanceof Group) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynPersistenceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynPersistenceUtils.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynPersistenceUtils.java
index 3c0c1d3..ee79764 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynPersistenceUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynPersistenceUtils.java
@@ -171,9 +171,9 @@ public class BrooklynPersistenceUtils {
             result.entity(instance.getId(), serializer.toString(newObjectMemento(instance)));
             for (Feed instanceAdjunct: ((EntityInternal)instance).feeds().getFeeds())
                 result.feed(instanceAdjunct.getId(), serializer.toString(newObjectMemento(instanceAdjunct)));
-            for (Enricher instanceAdjunct: instance.getEnrichers())
+            for (Enricher instanceAdjunct: instance.enrichers())
                 result.enricher(instanceAdjunct.getId(), serializer.toString(newObjectMemento(instanceAdjunct)));
-            for (Policy instanceAdjunct: instance.getPolicies())
+            for (Policy instanceAdjunct: instance.policies())
                 result.policy(instanceAdjunct.getId(), serializer.toString(newObjectMemento(instanceAdjunct)));
         }
         for (CatalogItem<?,?> instance: mgmt.getCatalog().getCatalogItems())

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
index 0d80698..abfc85d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
@@ -1,5 +1,4 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
  * regarding copyright ownership.  The ASF licenses this file
@@ -108,7 +107,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
                 Object value = entry.getValue();
                 @SuppressWarnings("unused") // just to ensure we can load the declared type? or maybe not needed
                 Class<?> type = (key.getType() != null) ? key.getType() : rebindContext.loadClass(key.getTypeName());
-                entity.setConfig((ConfigKey<Object>)key, value);
+                entity.config().set((ConfigKey<Object>)key, value);
             } catch (ClassNotFoundException e) {
                 throw Throwables.propagate(e);
             }
@@ -124,7 +123,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
             AbstractPolicy policy = (AbstractPolicy) rebindContext.lookup().lookupPolicy(policyId);
             if (policy != null) {
                 try {
-                    entity.addPolicy(policy);
+                    entity.policies().add(policy);
                 } catch (Exception e) {
                     rebindContext.getExceptionHandler().onAddPolicyFailed(entity, policy, e);
                 }
@@ -142,7 +141,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
             AbstractEnricher enricher = (AbstractEnricher) rebindContext.lookup().lookupEnricher(enricherId);
             if (enricher != null) {
                 try {
-                    entity.addEnricher(enricher);
+                    entity.enrichers().add(enricher);
                 } catch (Exception e) {
                     rebindContext.getExceptionHandler().onAddEnricherFailed(entity, enricher, e);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
index 21f7719..e0c15df 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
@@ -475,8 +475,8 @@ public class PeriodicDeltaChangeListener implements ChangeListener {
             removeFromCollector(instance);
             if (instance instanceof Entity) {
                 Entity entity = (Entity) instance;
-                for (BrooklynObject adjunct : entity.getPolicies()) removeFromCollector(adjunct);
-                for (BrooklynObject adjunct : entity.getEnrichers()) removeFromCollector(adjunct);
+                for (BrooklynObject adjunct : entity.policies()) removeFromCollector(adjunct);
+                for (BrooklynObject adjunct : entity.enrichers()) removeFromCollector(adjunct);
                 for (BrooklynObject adjunct : ((EntityInternal)entity).feeds().getFeeds()) removeFromCollector(adjunct);
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
index b49bf52..e5d0359 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
@@ -206,11 +206,11 @@ public class MementosGenerators {
             builder.children.add(child.getId()); 
         }
         
-        for (Policy policy : entity.getPolicies()) {
+        for (Policy policy : entity.policies()) {
             builder.policies.add(policy.getId()); 
         }
         
-        for (Enricher enricher : entity.getEnrichers()) {
+        for (Enricher enricher : entity.enrichers()) {
             builder.enrichers.add(enricher.getId()); 
         }
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
index 69c52ff..8200ea8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
@@ -461,9 +461,9 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
         
         T newVal = TypeCoercions.coerce(val, sensor.getTypeToken());
         if (sensor instanceof AttributeSensor) {
-            entity.setAttribute((AttributeSensor<T>)sensor, newVal);
+            entity.sensors().set((AttributeSensor<T>)sensor, newVal);
         } else { 
-            entity.emit(sensor, newVal);
+            entity.sensors().emit(sensor, newVal);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
index af7dd77..f258cdc 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
@@ -243,7 +243,7 @@ public class InternalEntityFactory extends InternalFactory {
             ((AbstractEntity)entity).configure(MutableMap.copyOf(spec.getFlags()));
             
             for (Map.Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
-                ((EntityLocal)entity).setConfig((ConfigKey)entry.getKey(), entry.getValue());
+                entity.config().set((ConfigKey)entry.getKey(), entry.getValue());
             }
 
             Entity parent = spec.getParent();
@@ -294,19 +294,19 @@ public class InternalEntityFactory extends InternalFactory {
                 }
                 
                 for (Enricher enricher : spec.getEnrichers()) {
-                    entity.addEnricher(enricher);
+                    entity.enrichers().add(enricher);
                 }
                 
                 for (EnricherSpec<?> enricherSpec : spec.getEnricherSpecs()) {
-                    entity.addEnricher(policyFactory.createEnricher(enricherSpec));
+                    entity.enrichers().add(policyFactory.createEnricher(enricherSpec));
                 }
                 
                 for (Policy policy : spec.getPolicies()) {
-                    entity.addPolicy((AbstractPolicy)policy);
+                    entity.policies().add((AbstractPolicy)policy);
                 }
                 
                 for (PolicySpec<?> policySpec : spec.getPolicySpecs()) {
-                    entity.addPolicy(policyFactory.createPolicy(policySpec));
+                    entity.policies().add(policyFactory.createPolicy(policySpec));
                 }
                                 
                 for (Entity child: entity.getChildren()) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
index 9391a57..3bb9cba 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
@@ -116,7 +116,7 @@ public class InternalLocationFactory extends InternalFactory {
             }
             
             for (Map.Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
-                ((AbstractLocation)loc).setConfig((ConfigKey)entry.getKey(), entry.getValue());
+                ((AbstractLocation)loc).config().set((ConfigKey)entry.getKey(), entry.getValue());
             }
             for (Entry<Class<?>, Object> entry : spec.getExtensions().entrySet()) {
                 ((LocationInternal)loc).addExtension((Class)entry.getKey(), entry.getValue());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/policy/Policies.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/policy/Policies.java b/core/src/main/java/org/apache/brooklyn/core/policy/Policies.java
index 3fa69a4..6ef9038 100644
--- a/core/src/main/java/org/apache/brooklyn/core/policy/Policies.java
+++ b/core/src/main/java/org/apache/brooklyn/core/policy/Policies.java
@@ -46,7 +46,7 @@ public class Policies {
             @Override
             public void setEntity(EntityLocal entity) {
                 super.setEntity(entity);
-                entity.subscribe(entity, sensor, listenerFromValueClosure(code));
+                entity.subscriptions().subscribe(entity, sensor, listenerFromValueClosure(code));
             }
         };
     }
@@ -57,7 +57,7 @@ public class Policies {
             @Override
             public void setEntity(EntityLocal entity) {
                 super.setEntity(entity);
-                entity.subscribe(remoteEntity, remoteSensor, listenerFromValueClosure(code));
+                entity.subscriptions().subscribe(remoteEntity, remoteSensor, listenerFromValueClosure(code));
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
index b017315..5dac80a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/StaticSensor.java
@@ -64,7 +64,7 @@ public class StaticSensor<T> extends AddSensor<T> {
         Maybe<T> v = Tasks.resolving(value).as((Class<T>)sensor.getType()).timeout(ValueResolver.PRETTY_QUICK_WAIT).getMaybe();
         if (v.isPresent()) {
             log.debug(this+" setting sensor "+sensor+" to "+v.get());
-            entity.setAttribute(sensor, v.get());
+            entity.sensors().set(sensor, v.get());
         } else {
             log.debug(this+" not setting sensor "+sensor+"; cannot resolve "+value);
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsImpl.java b/core/src/main/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsImpl.java
index a4a0a8e..fd9488c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsImpl.java
@@ -70,17 +70,17 @@ public class BrooklynMetricsImpl extends AbstractEntity implements BrooklynMetri
         LocalSubscriptionManager subsManager = (LocalSubscriptionManager) (managementContext != null ? managementContext.getSubscriptionManager() : null);
         
         if (managementContext != null) {
-            setAttribute(TOTAL_EFFECTORS_INVOKED, ((ManagementContextInternal)managementContext).getTotalEffectorInvocations());
+            sensors().set(TOTAL_EFFECTORS_INVOKED, ((ManagementContextInternal)managementContext).getTotalEffectorInvocations());
         }
         if (execManager != null) {
-            setAttribute(TOTAL_TASKS_SUBMITTED, execManager.getTotalTasksSubmitted());
-            setAttribute(NUM_INCOMPLETE_TASKS, execManager.getNumIncompleteTasks());
-            setAttribute(NUM_ACTIVE_TASKS, execManager.getNumActiveTasks());
+            sensors().set(TOTAL_TASKS_SUBMITTED, execManager.getTotalTasksSubmitted());
+            sensors().set(NUM_INCOMPLETE_TASKS, execManager.getNumIncompleteTasks());
+            sensors().set(NUM_ACTIVE_TASKS, execManager.getNumActiveTasks());
         }
         if (subsManager != null) {
-            setAttribute(TOTAL_EVENTS_PUBLISHED, subsManager.getTotalEventsPublished());
-            setAttribute(TOTAL_EVENTS_DELIVERED, subsManager.getTotalEventsDelivered());
-            setAttribute(NUM_SUBSCRIPTIONS, subsManager.getNumSubscriptions());
+            sensors().set(TOTAL_EVENTS_PUBLISHED, subsManager.getTotalEventsPublished());
+            sensors().set(TOTAL_EVENTS_DELIVERED, subsManager.getTotalEventsDelivered());
+            sensors().set(NUM_SUBSCRIPTIONS, subsManager.getNumSubscriptions());
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregatingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregatingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregatingEnricher.java
index 2d25a75..a082201 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregatingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregatingEnricher.java
@@ -85,7 +85,7 @@ public abstract class AbstractAggregatingEnricher<S,T> extends AbstractEnricher
 
     public void addProducer(Entity producer) {
         if (LOG.isDebugEnabled()) LOG.debug("{} linked ({}, {}) to {}", new Object[] {this, producer, source, target});
-        subscribe(producer, source, this);
+        subscriptions().subscribe(producer, source, this);
         synchronized (values) {
             S vo = values.get(producer);
             if (vo==null) {
@@ -105,7 +105,7 @@ public abstract class AbstractAggregatingEnricher<S,T> extends AbstractEnricher
     // TODO If producer removed but then get (queued) event from it after this method returns,  
     public S removeProducer(Entity producer) {
         if (LOG.isDebugEnabled()) LOG.debug("{} unlinked ({}, {}) from {}", new Object[] {this, producer, source, target});
-        unsubscribe(producer);
+        subscriptions().unsubscribe(producer);
         S removed = values.remove(producer);
         onUpdated();
         return removed;
@@ -144,12 +144,12 @@ public abstract class AbstractAggregatingEnricher<S,T> extends AbstractEnricher
         }
         
         if (allMembers) {
-            subscribe(entity, Changeable.MEMBER_ADDED, new SensorEventListener<Entity>() {
+            subscriptions().subscribe(entity, Changeable.MEMBER_ADDED, new SensorEventListener<Entity>() {
                 @Override public void onEvent(SensorEvent<Entity> it) {
                     if (filter.apply(it.getValue())) addProducer(it.getValue());
                 }
             });
-            subscribe(entity, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+            subscriptions().subscribe(entity, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
                 @Override public void onEvent(SensorEvent<Entity> it) {
                     removeProducer(it.getValue());
                 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregator.java
index 926b769..1d9870d 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractAggregator.java
@@ -137,7 +137,7 @@ public abstract class AbstractAggregator<T,U> extends AbstractEnricher implement
     }
 
     protected void setEntitySubscribeProducerMemberEvents() {
-        subscribe(producer, Changeable.MEMBER_ADDED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(producer, Changeable.MEMBER_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 if (entityFilter.apply(event.getValue())) {
                     addProducerMember(event.getValue());
@@ -145,7 +145,7 @@ public abstract class AbstractAggregator<T,U> extends AbstractEnricher implement
                 }
             }
         });
-        subscribe(producer, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(producer, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 removeProducer(event.getValue());
                 onUpdated();
@@ -165,13 +165,13 @@ public abstract class AbstractAggregator<T,U> extends AbstractEnricher implement
     }
 
     protected void setEntitySubscribingProducerChildrenEvents() {
-        subscribe(producer, AbstractEntity.CHILD_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(producer, AbstractEntity.CHILD_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 removeProducer(event.getValue());
                 onUpdated();
             }
         });
-        subscribe(producer, AbstractEntity.CHILD_ADDED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(producer, AbstractEntity.CHILD_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 if (entityFilter.apply(event.getValue())) {
                     addProducerChild(event.getValue());
@@ -212,7 +212,7 @@ public abstract class AbstractAggregator<T,U> extends AbstractEnricher implement
     // TODO If producer removed but then get (queued) event from it after this method returns,  
     protected void removeProducer(Entity producer) {
         if (LOG.isDebugEnabled()) LOG.debug("{} stopped listening to {}", new Object[] {this, producer });
-        unsubscribe(producer);
+        subscriptions().unsubscribe(producer);
         onProducerRemoved(producer);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractMultipleSensorAggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractMultipleSensorAggregator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractMultipleSensorAggregator.java
index 1d76168..d63aa57 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractMultipleSensorAggregator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractMultipleSensorAggregator.java
@@ -63,14 +63,14 @@ public abstract class AbstractMultipleSensorAggregator<U> extends AbstractAggreg
         BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(producer),
             "{} subscribing to children of {}", this, producer);
         for (Sensor<?> sourceSensor: getSourceSensors()) {
-            subscribeToChildren(producer, sourceSensor, this);
+            subscriptions().subscribeToChildren(producer, sourceSensor, this);
         }
     }
 
     @Override
     protected void addProducerHardcoded(Entity producer) {
         for (Sensor<?> sourceSensor: getSourceSensors()) {
-            subscribe(producer, sourceSensor, this);
+            subscriptions().subscribe(producer, sourceSensor, this);
         }
         onProducerAdded(producer);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTransformer.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTransformer.java
index ab41c1a..89ebb1a 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTransformer.java
@@ -71,7 +71,7 @@ public abstract class AbstractTransformer<T,U> extends AbstractEnricher implemen
             return;
         }
         
-        subscribe(producer, sourceSensor, this);
+        subscriptions().subscribe(producer, sourceSensor, this);
         
         if (sourceSensor instanceof AttributeSensor) {
             Object value = producer.getAttribute((AttributeSensor<?>)sourceSensor);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTypeTransformingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTypeTransformingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTypeTransformingEnricher.java
index 1469829..e15322f 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTypeTransformingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AbstractTypeTransformingEnricher.java
@@ -56,7 +56,7 @@ public abstract class AbstractTypeTransformingEnricher<T,U> extends AbstractEnri
     public void setEntity(EntityLocal entity) {
         super.setEntity(entity);
         if (producer==null) producer = entity;
-        subscribe(producer, source, this);
+        subscriptions().subscribe(producer, source, this);
         
         if (source instanceof AttributeSensor) {
             Object value = producer.getAttribute((AttributeSensor)source);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/AddingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/AddingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/AddingEnricher.java
index 941d745..860cec2 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/AddingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/AddingEnricher.java
@@ -58,7 +58,7 @@ public class AddingEnricher extends AbstractEnricher implements SensorEventListe
         super.setEntity(entity);
         
         for (Sensor source: sources) {
-            subscribe(entity, source, this);
+            subscriptions().subscribe(entity, source, this);
             if (source instanceof AttributeSensor) {
                 Object value = entity.getAttribute((AttributeSensor)source);
                 if (value!=null)
@@ -73,9 +73,9 @@ public class AddingEnricher extends AbstractEnricher implements SensorEventListe
         Number value = recompute();
         Number typedValue = cast(value, (Class<? extends Number>)target.getType());
         if (target instanceof AttributeSensor) {
-            entity.setAttribute((AttributeSensor)target, typedValue);
+            entity.sensors().set((AttributeSensor)target, typedValue);
         } else if (typedValue!=null)
-            entity.emit((Sensor)target, typedValue);
+            entity.sensors().emit((Sensor)target, typedValue);
     }
 
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
index e42d2cb..2892427 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
@@ -121,12 +121,12 @@ public class Aggregator<T,U> extends AbstractAggregator<T,U> implements SensorEv
     protected void setEntityBeforeSubscribingProducerChildrenEvents() {
         BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(producer),
             "{} subscribing to children of {}", this, producer);
-        subscribeToChildren(producer, sourceSensor, this);
+        subscriptions().subscribeToChildren(producer, sourceSensor, this);
     }
 
     @Override
     protected void addProducerHardcoded(Entity producer) {
-        subscribe(producer, sourceSensor, this);
+        subscriptions().subscribe(producer, sourceSensor, this);
         onProducerAdded(producer);
     }
 
@@ -138,7 +138,7 @@ public class Aggregator<T,U> extends AbstractAggregator<T,U> implements SensorEv
 
     @Override
     protected void addProducerMember(Entity producer) {
-        subscribe(producer, sourceSensor, this);
+        subscriptions().subscribe(producer, sourceSensor, this);
         onProducerAdded(producer);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/Combiner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Combiner.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Combiner.java
index 6819a33..d0c1efd 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Combiner.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Combiner.java
@@ -93,7 +93,7 @@ public class Combiner<T,U> extends AbstractEnricher implements SensorEventListen
         checkState(sourceSensors.size() > 0, "must specify at least one sourceSensor");
 
         for (Sensor<T> sourceSensor : sourceSensors) {
-            subscribe(producer, sourceSensor, this);
+            subscriptions().subscribe(producer, sourceSensor, this);
         }
         
         for (Sensor<T> sourceSensor : sourceSensors) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricher.java
index 0a03dca..5ff360f 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricher.java
@@ -113,7 +113,7 @@ public class CustomAggregatingEnricher<S,T> extends AbstractAggregatingEnricher<
     @Override
     public void onUpdated() {
         try {
-            entity.setAttribute(target, getAggregate());
+            entity.sensors().set(target, getAggregate());
         } catch (Throwable t) {
             LOG.warn("Error calculating and setting aggregate for enricher "+this, t);
             throw Throwables.propagate(t);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/Joiner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Joiner.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Joiner.java
index 5cd2071..2e24676 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Joiner.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Joiner.java
@@ -73,7 +73,7 @@ public class Joiner<T> extends AbstractEnricher implements SensorEventListener<T
         this.sourceSensor = (AttributeSensor<T>) getRequiredConfig(SOURCE_SENSOR);
         this.targetSensor = (Sensor<String>) getRequiredConfig(TARGET_SENSOR);
         
-        subscribe(producer, sourceSensor, this);
+        subscriptions().subscribe(producer, sourceSensor, this);
         
         Object value = producer.getAttribute((AttributeSensor<?>)sourceSensor);
         // TODO would be useful to have a convenience to "subscribeAndThenIfItIsAlreadySetRunItOnce"

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
index 0cf601c..7265da9 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
@@ -147,10 +147,10 @@ public class Propagator extends AbstractEnricher implements SensorEventListener<
                 "Nothing to propagate; detected: propagatingAll (%s, excluding %s), sensorMapping (%s)", propagatingAll, getConfig(PROPAGATING_ALL_BUT), sensorMapping);
 
         if (propagatingAll) {
-            subscribe(producer, null, this);
+            subscriptions().subscribe(producer, null, this);
         } else {
             for (Sensor<?> sensor : sensorMapping.keySet()) {
-                subscribe(producer, sensor, this);
+                subscriptions().subscribe(producer, sensor, this);
             }
         }
         
@@ -191,7 +191,7 @@ public class Propagator extends AbstractEnricher implements SensorEventListener<
                 Object v = producer.getAttribute((AttributeSensor<?>)s);
                 // TODO we should keep a timestamp for the source sensor and echo it 
                 // (this pretends timestamps are current, which probably isn't the case when we are propagating)
-                if (v != null || includeNullValues) entity.setAttribute(destinationSensor, v);
+                if (v != null || includeNullValues) entity.sensors().set(destinationSensor, v);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricher.java
index 4c198f8..f266a80 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricher.java
@@ -131,7 +131,7 @@ public class SensorPropagatingEnricher extends AbstractEnricher implements Senso
     public void setEntity(EntityLocal entity) {
         super.setEntity(entity);
         for (Sensor<?> s: sensors) {
-            subscribe(source, s, this);
+            subscriptions().subscribe(source, s, this);
         }
     }
     
@@ -146,9 +146,9 @@ public class SensorPropagatingEnricher extends AbstractEnricher implements Senso
                 new Object[] {this, event, entity, (sourceSensor == destinationSensor ? "" : " (as "+destinationSensor+")")});
         
         if (event.getSensor() instanceof AttributeSensor) {
-            entity.setAttribute((AttributeSensor)destinationSensor, event.getValue());
+            entity.sensors().set((AttributeSensor)destinationSensor, event.getValue());
         } else {
-            entity.emit((Sensor)destinationSensor, event.getValue());
+            entity.sensors().emit((Sensor)destinationSensor, event.getValue());
         }       
     }
 
@@ -163,14 +163,14 @@ public class SensorPropagatingEnricher extends AbstractEnricher implements Senso
             if (s instanceof AttributeSensor) {
                 AttributeSensor destinationSensor = (AttributeSensor<?>) getDestinationSensor(s);
                 Object v = source.getAttribute((AttributeSensor)s);
-                if (v != null || includeNullValues) entity.setAttribute(destinationSensor, v);
+                if (v != null || includeNullValues) entity.sensors().set(destinationSensor, v);
             }
         }
     }
 
     /** convenience, to be called by the host */
     public SensorPropagatingEnricher addToEntityAndEmitAll(Entity host) {
-        host.addEnricher(this);
+        host.enrichers().add(this);
         emitAllAttributes();
         return this;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorTransformingEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorTransformingEnricher.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorTransformingEnricher.java
index 92319f1..339d9b8 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorTransformingEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/SensorTransformingEnricher.java
@@ -60,9 +60,9 @@ public class SensorTransformingEnricher<T,U> extends AbstractTypeTransformingEnr
     public void onEvent(SensorEvent event) {
         if (accept((T)event.getValue())) {
             if (target instanceof AttributeSensor)
-                entity.setAttribute((AttributeSensor)target, compute((T)event.getValue()));
+                entity.sensors().set((AttributeSensor)target, compute((T)event.getValue()));
             else 
-                entity.emit(target, compute((T)event.getValue()));
+                entity.sensors().emit(target, compute((T)event.getValue()));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
index 74f75f7..7ece9bf 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
@@ -92,8 +92,8 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
     @Override
     public void init() {
         super.init();
-        setAttribute(GROUP_SIZE, 0);
-        setAttribute(GROUP_MEMBERS, ImmutableList.<Entity>of());
+        sensors().set(GROUP_SIZE, 0);
+        sensors().set(GROUP_MEMBERS, ImmutableList.<Entity>of());
     }
 
     @Override
@@ -124,15 +124,15 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
             // FIXME do not set sensors on members; possibly we don't need FIRST at all, just look at the first in MEMBERS, and take care to guarantee order there
             Entity first = getAttribute(FIRST);
             if (first == null) {
-                ((EntityLocal) member).setAttribute(FIRST_MEMBER, true);
-                ((EntityLocal) member).setAttribute(FIRST, member);
-                setAttribute(FIRST, member);
+                ((EntityLocal) member).sensors().set(FIRST_MEMBER, true);
+                ((EntityLocal) member).sensors().set(FIRST, member);
+                sensors().set(FIRST, member);
             } else {
                 if (first.equals(member) || first.equals(member.getAttribute(FIRST))) {
                     // do nothing (rebinding)
                 } else {
-                    ((EntityLocal) member).setAttribute(FIRST_MEMBER, false);
-                    ((EntityLocal) member).setAttribute(FIRST, first);
+                    ((EntityLocal) member).sensors().set(FIRST_MEMBER, false);
+                    ((EntityLocal) member).sensors().set(FIRST, first);
                 }
             }
 
@@ -140,10 +140,10 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
             boolean changed = addMemberInternal(member);
             if (changed) {
                 log.debug("Group {} got new member {}", this, member);
-                setAttribute(GROUP_SIZE, getCurrentSize());
-                setAttribute(GROUP_MEMBERS, getMembers());
+                sensors().set(GROUP_SIZE, getCurrentSize());
+                sensors().set(GROUP_MEMBERS, getMembers());
                 // emit after the above so listeners can use getMembers() and getCurrentSize()
-                emit(MEMBER_ADDED, member);
+                sensors().emit(MEMBER_ADDED, member);
 
                 if (Boolean.TRUE.equals(getConfig(MEMBER_DELEGATE_CHILDREN))) {
                     Optional<Entity> result = Iterables.tryFind(getChildren(), Predicates.equalTo(member));
@@ -180,14 +180,14 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
             if (changed) {
                 log.debug("Group {} lost member {}", this, member);
                 // TODO ideally the following are all synched
-                setAttribute(GROUP_SIZE, getCurrentSize());
-                setAttribute(GROUP_MEMBERS, getMembers());
+                sensors().set(GROUP_SIZE, getCurrentSize());
+                sensors().set(GROUP_MEMBERS, getMembers());
                 if (member.equals(getAttribute(FIRST))) {
                     // TODO should we elect a new FIRST ?  as is the *next* will become first.  could we do away with FIRST altogether?
-                    setAttribute(FIRST, null);
+                    sensors().set(FIRST, null);
                 }
                 // emit after the above so listeners can use getMembers() and getCurrentSize()
-                emit(MEMBER_REMOVED, member);
+                sensors().emit(MEMBER_REMOVED, member);
 
                 if (Boolean.TRUE.equals(getConfig(MEMBER_DELEGATE_CHILDREN))) {
                     Optional<Entity> result = Iterables.tryFind(getChildren(), new Predicate<Entity>() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
index c84e6bc..6d053ad 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -167,12 +167,12 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
         BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(group),
             "Subscribing to group "+group+", for memberAdded, memberRemoved, and {}", getSensorsToTrack());
         
-        subscribe(group, DynamicGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(group, DynamicGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 onEntityEvent(EventType.ENTITY_ADDED, event.getValue());
             }
         });
-        subscribe(group, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        subscriptions().subscribe(group, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 entitySensorCache.remove(event.getSource().getId());
                 onEntityEvent(EventType.ENTITY_REMOVED, event.getValue());
@@ -180,7 +180,7 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
         });
 
         for (Sensor<?> sensor : getSensorsToTrack()) {
-            subscribeToMembers(group, sensor, new SensorEventListener<Object>() {
+            subscriptions().subscribeToMembers(group, sensor, new SensorEventListener<Object>() {
                 @Override public void onEvent(SensorEvent<Object> event) {
                     boolean notifyOnDuplicates = getRequiredConfig(NOTIFY_ON_DUPLICATES);
                     String entityId = event.getSource().getId();
@@ -212,7 +212,7 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
 
     protected void unsubscribeFromGroup() {
         Group group = getGroup();
-        if (getSubscriptionTracker() != null && group != null) unsubscribe(group);
+        if (getSubscriptionTracker() != null && group != null) subscriptions().unsubscribe(group);
     }
 
     /** All entity events pass through this method. Default impl delegates to onEntityXxxx methods, whose default behaviours are no-op.


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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEnricherTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEnricherTest.java
index e79ba8a..2db5862 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEnricherTest.java
@@ -84,7 +84,7 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testPropagatingEnricher() throws Exception {
-        origApp.addEnricher(Enrichers.builder()
+        origApp.enrichers().add(Enrichers.builder()
                 .propagating(METRIC1)
                 .from(origEntity)
                 .build());
@@ -92,13 +92,13 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         TestApplication newApp = rebind();
         TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
 
-        newEntity.setAttribute(METRIC1, "myval");
+        newEntity.sensors().set(METRIC1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(newApp, METRIC1, "myval");
     }
 
     @Test
     public void testPropagatingAllEnricher() throws Exception {
-        origApp.addEnricher(Enrichers.builder()
+        origApp.enrichers().add(Enrichers.builder()
                 .propagatingAll()
                 .from(origEntity)
                 .build());
@@ -106,13 +106,13 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         TestApplication newApp = rebind();
         TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
 
-        newEntity.setAttribute(METRIC1, "myval");
+        newEntity.sensors().set(METRIC1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(newApp, METRIC1, "myval");
     }
 
     @Test
     public void testPropagatingAsEnricher() throws Exception {
-        origApp.addEnricher(Enrichers.builder()
+        origApp.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(METRIC1, METRIC2))
                 .from(origEntity)
                 .build());
@@ -120,14 +120,14 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         TestApplication newApp = rebind();
         TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
 
-        newEntity.setAttribute(METRIC1, "myval");
+        newEntity.sensors().set(METRIC1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(newApp, METRIC2, "myval");
     }
 
     @SuppressWarnings("unchecked")
     @Test
     public void testCombiningEnricher() throws Exception {
-        origApp.addEnricher(Enrichers.builder()
+        origApp.enrichers().add(Enrichers.builder()
                 .combining(METRIC1, METRIC2)
                 .from(origEntity)
                 .computing(StringFunctions.joiner(","))
@@ -137,8 +137,8 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         TestApplication newApp = rebind();
         TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
 
-        newEntity.setAttribute(METRIC1, "myval");
-        newEntity.setAttribute(METRIC2, "myval2");
+        newEntity.sensors().set(METRIC1, "myval");
+        newEntity.sensors().set(METRIC2, "myval2");
         EntityTestUtils.assertAttributeEventually(newApp, METRIC2, Predicates.or(Predicates.equalTo("myval,myval2"), Predicates.equalTo("myval2,myval")));
     }
 
@@ -147,7 +147,7 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         origApp.start(ImmutableList.of(origLoc));
         origCluster.resize(2);
         
-        origApp.addEnricher(Enrichers.builder()
+        origApp.enrichers().add(Enrichers.builder()
                 .aggregating(METRIC1)
                 .from(origCluster)
                 .fromMembers()
@@ -160,14 +160,14 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
 
         int i = 1;
         for (Entity member : newCluster.getMembers()) {
-            ((EntityInternal)member).setAttribute(METRIC1, "myval"+(i++));
+            ((EntityInternal)member).sensors().set(METRIC1, "myval"+(i++));
         }
         EntityTestUtils.assertAttributeEventually(newApp, METRIC2, Predicates.or(Predicates.equalTo("myval1,myval2"), Predicates.equalTo("myval2,myval1")));
     }
     
     @Test
     public void testRestoresConfig() throws Exception {
-        origApp.addEnricher(EnricherSpec.create(MyEnricher.class)
+        origApp.enrichers().add(EnricherSpec.create(MyEnricher.class)
                 .displayName("My Enricher")
                 .uniqueTag("tagU")
                 .tag("tag1").tag("tag2")
@@ -176,7 +176,7 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
                 .configure(MyEnricher.MY_CONFIG_WITHOUT_SETFROMFLAG, "myVal for witout setFromFlag"));
 
         newApp = (TestApplication) rebind();
-        MyEnricher newEnricher = (MyEnricher) Iterables.getOnlyElement(newApp.getEnrichers());
+        MyEnricher newEnricher = (MyEnricher) Iterables.getOnlyElement(newApp.enrichers());
         
         assertEquals(newEnricher.getDisplayName(), "My Enricher");
         
@@ -190,10 +190,10 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testReboundConfigDoesNotContainId() throws Exception {
-        MyEnricher policy = origApp.addEnricher(EnricherSpec.create(MyEnricher.class));
+        MyEnricher policy = origApp.enrichers().add(EnricherSpec.create(MyEnricher.class));
         
         newApp = (TestApplication) rebind();
-        MyEnricher newEnricher = (MyEnricher) Iterables.getOnlyElement(newApp.getEnrichers());
+        MyEnricher newEnricher = (MyEnricher) Iterables.getOnlyElement(newApp.enrichers());
 
         assertNull(newEnricher.getConfig(ConfigKeys.newStringConfigKey("id")));
         assertEquals(newEnricher.getId(), policy.getId());
@@ -201,10 +201,10 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testIsRebinding() throws Exception {
-        origApp.addEnricher(EnricherSpec.create(EnricherChecksIsRebinding.class));
+        origApp.enrichers().add(EnricherSpec.create(EnricherChecksIsRebinding.class));
 
         newApp = (TestApplication) rebind();
-        EnricherChecksIsRebinding newEnricher = (EnricherChecksIsRebinding) Iterables.getOnlyElement(newApp.getEnrichers());
+        EnricherChecksIsRebinding newEnricher = (EnricherChecksIsRebinding) Iterables.getOnlyElement(newApp.enrichers());
 
         assertTrue(newEnricher.isRebindingValWhenRebinding());
         assertFalse(newEnricher.isRebinding());
@@ -212,12 +212,12 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testPolicyTags() throws Exception {
-        Enricher origEnricher = origApp.addEnricher(EnricherSpec.create(MyEnricher.class));
+        Enricher origEnricher = origApp.enrichers().add(EnricherSpec.create(MyEnricher.class));
         origEnricher.tags().addTag("foo");
         origEnricher.tags().addTag(origApp);
 
         newApp = rebind();
-        Enricher newEnricher = Iterables.getOnlyElement(newApp.getEnrichers());
+        Enricher newEnricher = Iterables.getOnlyElement(newApp.enrichers());
 
         Asserts.assertEqualsIgnoringOrder(newEnricher.tags().getTags(), ImmutableSet.of("foo", newApp));
     }
@@ -287,20 +287,20 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp {
         @Override
         protected void initEnrichers() {
             // don't add default ones
-            addEnricher(EnricherSpec.create(MyEnricher.class).uniqueTag("x").tag(Identifiers.makeRandomId(8)));
-            addEnricher(EnricherSpec.create(MyEnricher.class));
+            enrichers().add(EnricherSpec.create(MyEnricher.class).uniqueTag("x").tag(Identifiers.makeRandomId(8)));
+            enrichers().add(EnricherSpec.create(MyEnricher.class));
         }
         @Override
         public void onManagementStarting() {
             super.onManagementStarted();
-            addEnricher(EnricherSpec.create(MyEnricher.class).uniqueTag("y").tag(Identifiers.makeRandomId(8)));
+            enrichers().add(EnricherSpec.create(MyEnricher.class).uniqueTag("y").tag(Identifiers.makeRandomId(8)));
         }
         @Override
         public void onManagementStarted() {
             super.onManagementStarted();
-            addEnricher(EnricherSpec.create(MyEnricher.class).uniqueTag("z").tag(Identifiers.makeRandomId(8)));
+            enrichers().add(EnricherSpec.create(MyEnricher.class).uniqueTag("z").tag(Identifiers.makeRandomId(8)));
             // all the enrichers above should not be added on rebind, but this one will be:
-            addEnricher(EnricherSpec.create(MyEnricher.class).uniqueTag( Identifiers.makeRandomId(8) ).tag(Identifiers.makeRandomId(8)));
+            enrichers().add(EnricherSpec.create(MyEnricher.class).uniqueTag( Identifiers.makeRandomId(8) ).tag(Identifiers.makeRandomId(8)));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityDynamicTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityDynamicTypeInfoTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityDynamicTypeInfoTest.java
index 3b9bbfb..eba752d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityDynamicTypeInfoTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityDynamicTypeInfoTest.java
@@ -66,11 +66,11 @@ public class RebindEntityDynamicTypeInfoTest extends RebindTestFixtureWithApp {
         origApp.addChild(EntitySpec.create(TestEntity.class));
         
         // dynamic conf key
-        origApp.setConfig(TestEntity.CONF_NAME, "slim");
+        origApp.config().set(TestEntity.CONF_NAME, "slim");
         // declared sensor
-        origApp.setAttribute(TestApplication.MY_ATTRIBUTE, "foo");
+        origApp.sensors().set(TestApplication.MY_ATTRIBUTE, "foo");
         // dynamic sensor
-        origApp.setAttribute(TestEntity.SEQUENCE, 98765);
+        origApp.sensors().set(TestEntity.SEQUENCE, 98765);
         
         // dynamic effector
         origApp.getMutableEntityType().addEffector(SayHiBody.EFFECTOR);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityTest.java
index f912e55..900b492 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindEntityTest.java
@@ -154,7 +154,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
     public void testRestoresEntityDependentConfigCompleted() throws Exception {
         MyEntity origE = origApp.createAndManageChild(EntitySpec.create(MyEntity.class)
                 .configure("myconfig", DependentConfiguration.attributeWhenReady(origApp, TestApplication.MY_ATTRIBUTE)));
-        origApp.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        origApp.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         origE.getConfig(MyEntity.MY_CONFIG); // wait for it to be done
         
         newApp = rebind();
@@ -169,7 +169,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         
         newApp = rebind();
         MyEntity newE = (MyEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntity.class));
-        newApp.setAttribute(TestApplication.MY_ATTRIBUTE, "myval");
+        newApp.sensors().set(TestApplication.MY_ATTRIBUTE, "myval");
         
         assertEquals(newE.getConfig(MyEntity.MY_CONFIG), "myval");
     }
@@ -179,7 +179,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         AttributeSensor<String> myCustomAttribute = Sensors.newStringSensor("my.custom.attribute");
         
         MyEntity origE = origApp.createAndManageChild(EntitySpec.create(MyEntity.class));
-        origE.setAttribute(myCustomAttribute, "myval");
+        origE.sensors().set(myCustomAttribute, "myval");
         
         newApp = rebind();
         MyEntity newE = (MyEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntity.class));
@@ -247,7 +247,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         newApp = rebind();
         MyEntity2 newE = (MyEntity2) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntity2.class));
         
-        newApp.setAttribute(TestApplication.MY_ATTRIBUTE, "mysensorval");
+        newApp.sensors().set(TestApplication.MY_ATTRIBUTE, "mysensorval");
         Asserts.eventually(Suppliers.ofInstance(newE.getEvents()), Predicates.<List<String>>equalTo(ImmutableList.of("mysensorval")));
         Assert.assertEquals(newE, origE);
     }
@@ -257,7 +257,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         MyEntity origOtherE = origApp.createAndManageChild(EntitySpec.create(MyEntity.class));
         MyEntityReffingOthers origE = origApp.createAndManageChild(EntitySpec.create(MyEntityReffingOthers.class)
                 .configure("entityRef", origOtherE));
-        origE.setAttribute(MyEntityReffingOthers.ENTITY_REF_SENSOR, origOtherE);
+        origE.sensors().set(MyEntityReffingOthers.ENTITY_REF_SENSOR, origOtherE);
         
         newApp = rebind();
         MyEntityReffingOthers newE = (MyEntityReffingOthers) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntityReffingOthers.class));
@@ -274,7 +274,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         reffer.obj = origE;
         reffer.entity = origE;
         reffer.myEntity = origE;
-        origApp.setConfig(TestEntity.CONF_OBJECT, reffer);
+        origApp.config().set(TestEntity.CONF_OBJECT, reffer);
 
         newApp = rebind();
         MyEntity newE = (MyEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntity.class));
@@ -294,7 +294,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         ReffingEntity reffer = new ReffingEntity();
         reffer.group = origE;
         reffer.resizable = origE;
-        origApp.setConfig(TestEntity.CONF_OBJECT, reffer);
+        origApp.config().set(TestEntity.CONF_OBJECT, reffer);
 
         newApp = rebind();
         MyEntityWithMultipleInterfaces newE = (MyEntityWithMultipleInterfaces) Iterables.find(newApp.getChildren(), Predicates.instanceOf(MyEntityWithMultipleInterfaces.class));
@@ -343,7 +343,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         MyLocation origLoc = new MyLocation();
         MyEntityReffingOthers origE = origApp.createAndManageChild(EntitySpec.create(MyEntityReffingOthers.class)
                 .configure("locationRef", origLoc));
-        origE.setAttribute(MyEntityReffingOthers.LOCATION_REF_SENSOR, origLoc);
+        origE.sensors().set(MyEntityReffingOthers.LOCATION_REF_SENSOR, origLoc);
         origApp.start(ImmutableList.of(origLoc));
         
         newApp = rebind();
@@ -527,7 +527,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testRebindPreservesInheritedConfig() throws Exception {
-        origApp.setConfig(MyEntity.MY_CONFIG, "myValInSuper");
+        origApp.config().set(MyEntity.MY_CONFIG, "myValInSuper");
         origApp.createAndManageChild(EntitySpec.create(MyEntity.class));
 
         // rebind: inherited config is preserved
@@ -569,17 +569,17 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         final TestEntity newE = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
         final TestEntity newChildE = (TestEntity) Iterables.find(newE.getChildren(), Predicates.instanceOf(TestEntity.class));
 
-        assertEquals(newE.getAllConfigBag().getStringKey("myunmatchedkey"), "myunmatchedval");
-        assertEquals(newE.getLocalConfigBag().getStringKey("myunmatchedkey"), "myunmatchedval");
+        assertEquals(newE.config().getBag().getStringKey("myunmatchedkey"), "myunmatchedval");
+        assertEquals(newE.config().getLocalBag().getStringKey("myunmatchedkey"), "myunmatchedval");
         
-        assertEquals(newChildE.getAllConfigBag().getStringKey("myunmatchedkey"), "myunmatchedval");
-        assertFalse(newChildE.getLocalConfigBag().containsKey("myunmatchedkey"));
+        assertEquals(newChildE.config().getBag().getStringKey("myunmatchedkey"), "myunmatchedval");
+        assertFalse(newChildE.config().getLocalBag().containsKey("myunmatchedkey"));
     }
 
     @Test
     public void testRebindPersistsNullAttribute() throws Exception {
         MyEntity origE = origApp.createAndManageChild(EntitySpec.create(MyEntity.class));
-        origE.setAttribute(MyEntity.MY_SENSOR, null);
+        origE.sensors().set(MyEntity.MY_SENSOR, null);
 
         assertNull(origE.getAttribute(MyEntity.MY_SENSOR));
 
@@ -596,7 +596,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         final AttributeSensor<String> MY_DYNAMIC_SENSOR = new BasicAttributeSensor<String>(
                 String.class, sensorName, sensorDescription);
 
-        origApp.setAttribute(MY_DYNAMIC_SENSOR, "myval");
+        origApp.sensors().set(MY_DYNAMIC_SENSOR, "myval");
         assertEquals(origApp.getEntityType().getSensor(sensorName).getDescription(), sensorDescription);
 
         newApp = rebind();
@@ -617,7 +617,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         Semaphore unrebindableObject = new Semaphore(1) {
         };
         
-        origApp.setAttribute(MY_DYNAMIC_SENSOR, unrebindableObject);
+        origApp.sensors().set(MY_DYNAMIC_SENSOR, unrebindableObject);
         assertEquals(origApp.getAttribute(MY_DYNAMIC_SENSOR), unrebindableObject);
 
         newApp = rebind();
@@ -832,7 +832,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
         @Override
         public void onManagementStarting() {
             if (getConfig(SUBSCRIBE)) {
-                subscribe(getApplication(), TestApplication.MY_ATTRIBUTE, new SensorEventListener<String>() {
+                subscriptions().subscribe(getApplication(), TestApplication.MY_ATTRIBUTE, new SensorEventListener<String>() {
                     @Override public void onEvent(SensorEvent<String> event) {
                         events.add(event.getValue());
                     }
@@ -905,7 +905,7 @@ public class RebindEntityTest extends RebindTestFixtureWithApp {
             }
 
             if (getConfig(PUBLISH) != null) {
-                setAttribute(MY_SENSOR, getConfig(PUBLISH));
+                sensors().set(MY_SENSOR, getConfig(PUBLISH));
             }
 
             if (latching) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java
index e78f062..4ab2f1f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java
@@ -194,23 +194,23 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testRebindWithFailingPolicyContinuesWithoutPolicy() throws Exception {
-        origApp.addPolicy(PolicySpec.create(MyPolicyFailingImpl.class)
+        origApp.policies().add(PolicySpec.create(MyPolicyFailingImpl.class)
                 .configure(MyPolicyFailingImpl.FAIL_ON_REBIND, true));
         
         newApp = rebind();
         
-        Optional<Policy> newPolicy = Iterables.tryFind(newApp.getPolicies(), Predicates.instanceOf(MyPolicyFailingImpl.class));
+        Optional<Policy> newPolicy = Iterables.tryFind(newApp.policies(), Predicates.instanceOf(MyPolicyFailingImpl.class));
         assertFalse(newPolicy.isPresent(), "policy="+newPolicy);
     }
 
     @Test
     public void testRebindWithFailingEnricherContinuesWithoutEnricher() throws Exception {
-        origApp.addEnricher(EnricherSpec.create(MyEnricherFailingImpl.class)
+        origApp.enrichers().add(EnricherSpec.create(MyEnricherFailingImpl.class)
                 .configure(MyEnricherFailingImpl.FAIL_ON_REBIND, true));
         
         newApp = rebind();
         
-        Optional<Enricher> newEnricher = Iterables.tryFind(newApp.getEnrichers(), Predicates.instanceOf(MyEnricherFailingImpl.class));
+        Optional<Enricher> newEnricher = Iterables.tryFind(newApp.enrichers(), Predicates.instanceOf(MyEnricherFailingImpl.class));
         assertFalse(newEnricher.isPresent(), "enricher="+newEnricher);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedTest.java
index 4a724e4..1be1bb5 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedTest.java
@@ -122,8 +122,8 @@ public class RebindFeedTest extends RebindTestFixtureWithApp {
         assertEquals(newFeeds.size(), 1);
         
         // Expect the feed to still be polling
-        newEntity.setAttribute(SENSOR_INT, null);
-        newEntity.setAttribute(SENSOR_STRING, null);
+        newEntity.sensors().set(SENSOR_INT, null);
+        newEntity.sensors().set(SENSOR_STRING, null);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_INT, (Integer)200);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_STRING, "{\"foo\":\"myfoo\"}");
         
@@ -153,7 +153,7 @@ public class RebindFeedTest extends RebindTestFixtureWithApp {
         assertEquals(newFeeds.size(), 2);
         
         // Expect the feed to still be polling
-        newEntity.setAttribute(SENSOR_INT, null);
+        newEntity.sensors().set(SENSOR_INT, null);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_INT, (Integer)1);
     }
     
@@ -177,7 +177,7 @@ public class RebindFeedTest extends RebindTestFixtureWithApp {
         assertEquals(newFeeds.size(), 1);
         
         // Expect the feed to still be polling
-        newEntity.setAttribute(SENSOR_INT, null);
+        newEntity.sensors().set(SENSOR_INT, null);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_INT, (Integer)0);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedWithHaTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedWithHaTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedWithHaTest.java
index 9335bd4..502e098 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedWithHaTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFeedWithHaTest.java
@@ -117,8 +117,8 @@ public class RebindFeedWithHaTest extends RebindTestFixtureWithApp {
         assertEquals(newFeeds.size(), 1);
         
         // Expect the feed to still be polling
-        newEntity.setAttribute(SENSOR_INT, null);
-        newEntity.setAttribute(SENSOR_STRING, null);
+        newEntity.sensors().set(SENSOR_INT, null);
+        newEntity.sensors().set(SENSOR_STRING, null);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_INT, (Integer)200);
         EntityTestUtils.assertAttributeEqualsEventually(newEntity, SENSOR_STRING, "{\"foo\":\"myfoo\"}");
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerTest.java
index 29ec7c4..45589b1 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerTest.java
@@ -56,7 +56,7 @@ public class RebindManagerTest extends RebindTestFixtureWithApp {
                     .orSubmitAsync()
                     .asTask()
                     .getUnchecked();
-            setAttribute(TestEntity.NAME, val);
+            sensors().set(TestEntity.NAME, val);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindPolicyTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindPolicyTest.java
index faff0c9..fb6446b 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindPolicyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindPolicyTest.java
@@ -68,33 +68,33 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     @Test
     public void testRestoresSimplePolicyFromConstructor() throws Exception {
         MyPolicy origPolicy = new MyPolicy(MutableMap.of("myfield", "myFieldVal", "myconfigkey", "myConfigVal"));
-        origApp.addPolicy(origPolicy);
+        origApp.policies().add(origPolicy);
         runRestoresSimplePolicy();
     }
 
     @Test
     public void testRestoresDeprecatedPolicyFromConstructorWithoutNoArgs() throws Exception {
         MyPolicyWithoutNoArgConstructor origPolicy = new MyPolicyWithoutNoArgConstructor(MutableMap.of("myfield", "myFieldVal", "myconfigkey", "myConfigVal"));
-        origApp.addPolicy(origPolicy);
+        origApp.policies().add(origPolicy);
         runRestoresSimplePolicy();
     }
 
     @Test
     public void testRestoresSimplePolicyFromPolicySpec() throws Exception {
-        origApp.addPolicy(PolicySpec.create(MyPolicy.class)
+        origApp.policies().add(PolicySpec.create(MyPolicy.class)
                 .configure("myfield", "myFieldVal")
                 .configure(MyPolicy.MY_CONFIG, "myConfigVal"));
         runRestoresSimplePolicy();
     }
     
     protected void runRestoresSimplePolicy() throws Exception {
-        MyPolicy origPolicy = (MyPolicy) Iterables.getOnlyElement(origApp.getPolicies());
+        MyPolicy origPolicy = (MyPolicy) Iterables.getOnlyElement(origApp.policies());
         assertTrue(origPolicy.isRunning());
         assertTrue(origPolicy.initCalled);
         assertFalse(origPolicy.rebindCalled);
         
         newApp = rebind();
-        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.getPolicies());
+        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.policies());
         
         assertEquals(newPolicy.myfield, "myFieldVal");
         assertEquals(newPolicy.getConfig(MyPolicy.MY_CONFIG), "myConfigVal");
@@ -105,7 +105,7 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testRestoresConfig() throws Exception {
-        origApp.addPolicy(PolicySpec.create(MyPolicy.class)
+        origApp.policies().add(PolicySpec.create(MyPolicy.class)
                 .displayName("My Policy")
                 .uniqueTag("tagU")
                 .tag("tag1").tag("tag2")
@@ -114,7 +114,7 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
                 .configure(MyPolicy.MY_CONFIG_WITHOUT_SETFROMFLAG, "myVal for witout setFromFlag"));
 
         newApp = rebind();
-        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.getPolicies());
+        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.policies());
         
         assertEquals(newPolicy.getDisplayName(), "My Policy");
         
@@ -130,8 +130,8 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     public void testExpungesOnEntityUnmanaged() throws Exception {
         Location loc = origManagementContext.getLocationRegistry().resolve("localhost");
         TestEntity entity = origApp.createAndManageChild(EntitySpec.create(TestEntity.class));
-        MyPolicy policy = entity.addPolicy(PolicySpec.create(MyPolicy.class));
-        MyEnricher enricher = entity.addEnricher(EnricherSpec.create(MyEnricher.class));
+        MyPolicy policy = entity.policies().add(PolicySpec.create(MyPolicy.class));
+        MyEnricher enricher = entity.enrichers().add(EnricherSpec.create(MyEnricher.class));
 
         RebindTestUtils.waitForPersisted(origApp);
 
@@ -149,13 +149,13 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     @Test
     public void testExpungesOnPolicyRemoved() throws Exception {
         TestEntity entity = origApp.createAndManageChild(EntitySpec.create(TestEntity.class));
-        MyPolicy policy = entity.addPolicy(PolicySpec.create(MyPolicy.class));
-        MyEnricher enricher = entity.addEnricher(EnricherSpec.create(MyEnricher.class));
+        MyPolicy policy = entity.policies().add(PolicySpec.create(MyPolicy.class));
+        MyEnricher enricher = entity.enrichers().add(EnricherSpec.create(MyEnricher.class));
 
         RebindTestUtils.waitForPersisted(origApp);
 
-        entity.removePolicy(policy);
-        entity.removeEnricher(enricher);
+        entity.policies().remove(policy);
+        entity.enrichers().remove(enricher);
         RebindTestUtils.waitForPersisted(origApp);
         
         BrooklynMementoManifest manifest = loadMementoManifest();
@@ -165,10 +165,10 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
 
     @Test
     public void testReboundConfigDoesNotContainId() throws Exception {
-        MyPolicy policy = origApp.addPolicy(PolicySpec.create(MyPolicy.class));
+        MyPolicy policy = origApp.policies().add(PolicySpec.create(MyPolicy.class));
         
         newApp = rebind();
-        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.getPolicies());
+        MyPolicy newPolicy = (MyPolicy) Iterables.getOnlyElement(newApp.policies());
 
         assertNull(newPolicy.getConfig(ConfigKeys.newStringConfigKey("id")));
         assertEquals(newPolicy.getId(), policy.getId());
@@ -176,22 +176,22 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testReconfigurePolicyPersistsChange() throws Exception {
-        MyPolicyReconfigurable policy = origApp.addPolicy(PolicySpec.create(MyPolicyReconfigurable.class)
+        MyPolicyReconfigurable policy = origApp.policies().add(PolicySpec.create(MyPolicyReconfigurable.class)
                 .configure(MyPolicyReconfigurable.MY_CONFIG, "oldval"));
         policy.config().set(MyPolicyReconfigurable.MY_CONFIG, "newval");
         
         newApp = rebind();
-        MyPolicyReconfigurable newPolicy = (MyPolicyReconfigurable) Iterables.getOnlyElement(newApp.getPolicies());
+        MyPolicyReconfigurable newPolicy = (MyPolicyReconfigurable) Iterables.getOnlyElement(newApp.policies());
 
         assertEquals(newPolicy.getConfig(MyPolicyReconfigurable.MY_CONFIG), "newval");
     }
 
     @Test
     public void testIsRebinding() throws Exception {
-        origApp.addPolicy(PolicySpec.create(PolicyChecksIsRebinding.class));
+        origApp.policies().add(PolicySpec.create(PolicyChecksIsRebinding.class));
 
         newApp = rebind();
-        PolicyChecksIsRebinding newPolicy = (PolicyChecksIsRebinding) Iterables.getOnlyElement(newApp.getPolicies());
+        PolicyChecksIsRebinding newPolicy = (PolicyChecksIsRebinding) Iterables.getOnlyElement(newApp.policies());
 
         assertTrue(newPolicy.isRebindingValWhenRebinding());
         assertFalse(newPolicy.isRebinding());
@@ -199,12 +199,12 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testPolicyTags() throws Exception {
-        Policy origPolicy = origApp.addPolicy(PolicySpec.create(MyPolicy.class));
+        Policy origPolicy = origApp.policies().add(PolicySpec.create(MyPolicy.class));
         origPolicy.tags().addTag("foo");
         origPolicy.tags().addTag(origApp);
 
         newApp = rebind();
-        Policy newPolicy = Iterables.getOnlyElement(newApp.getPolicies());
+        Policy newPolicy = Iterables.getOnlyElement(newApp.policies());
 
         Asserts.assertEqualsIgnoringOrder(newPolicy.tags().getTags(), ImmutableSet.of("foo", newApp));
     }
@@ -224,14 +224,14 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
         TestEntity origEntity = origApp.createAndManageChild(EntitySpec.create(TestEntity.class));
         origGroup.addMember(origEntity);
         
-        EnricherChecksEntityHierarchy origEnricher = origApp.addEnricher(EnricherSpec.create(EnricherChecksEntityHierarchy.class));
-        PolicyChecksEntityHierarchy origPolicy = origApp.addPolicy(PolicySpec.create(PolicyChecksEntityHierarchy.class));
+        EnricherChecksEntityHierarchy origEnricher = origApp.enrichers().add(EnricherSpec.create(EnricherChecksEntityHierarchy.class));
+        PolicyChecksEntityHierarchy origPolicy = origApp.policies().add(PolicySpec.create(PolicyChecksEntityHierarchy.class));
         assertTrue(origEnricher.success);
         assertTrue(origPolicy.success);
         
         newApp = (TestApplication) rebind();
-        EnricherChecksEntityHierarchy newEnricher = (EnricherChecksEntityHierarchy) Iterables.getOnlyElement(newApp.getEnrichers());
-        PolicyChecksEntityHierarchy newPolicy = (PolicyChecksEntityHierarchy) Iterables.getOnlyElement(newApp.getPolicies());
+        EnricherChecksEntityHierarchy newEnricher = (EnricherChecksEntityHierarchy) Iterables.getOnlyElement(newApp.enrichers());
+        PolicyChecksEntityHierarchy newPolicy = (PolicyChecksEntityHierarchy) Iterables.getOnlyElement(newApp.policies());
 
         assertTrue(newEnricher.success);
         assertTrue(newPolicy.success);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformerTest.java
index ae87123..ef4e468 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformerTest.java
@@ -172,7 +172,7 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
     public void testRenameClass() throws Exception {
         ConfigKey<Object> CONF1 = new BasicConfigKey<Object>(Object.class, "test.conf1");
         
-        origApp.setConfig(CONF1, new OrigType("myfieldval"));
+        origApp.config().set(CONF1, new OrigType("myfieldval"));
         
         CompoundTransformer transformer = CompoundTransformer.builder()
                 .renameClassTag(OrigType.class.getName(), RenamedType.class.getName())
@@ -189,7 +189,7 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
         ConfigKey<Object> CONF1 = new BasicConfigKey<Object>(Object.class, "test.conf1");
         
         Predicate<Entity> origPredicate = idEqualTo(origApp.getId());
-        origApp.setConfig(CONF1, origPredicate);
+        origApp.config().set(CONF1, origPredicate);
         
         CompoundTransformer transformer = CompoundTransformer.builder()
                 .renameClassTag(origPredicate.getClass().getName(), RenamedIdEqualToPredicate.class.getName())

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
index 5feae60..db97c10 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
@@ -60,7 +60,7 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
         policy.setDisplayName("Bob");
         policy.config().set(MyPolicy.STR_KEY, "aval");
         policy.config().set(MyPolicy.INT_KEY, 2);
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getDisplayName(), "Bob");
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
@@ -69,7 +69,7 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testAddSpec() throws Exception {
-        MyPolicy policy = app.addPolicy(PolicySpec.create(MyPolicy.class)
+        MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
             .displayName("Bob")
             .configure(MyPolicy.STR_KEY, "aval").configure(MyPolicy.INT_KEY, 2));
         
@@ -80,7 +80,7 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
         
     @Test
     public void testTagsFromSpec() throws Exception {
-        MyPolicy policy = app.addPolicy(PolicySpec.create(MyPolicy.class).tag(99).uniqueTag("x"));
+        MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class).tag(99).uniqueTag("x"));
 
         assertEquals(policy.tags().getTags(), MutableSet.of("x", 99));
         assertEquals(policy.getUniqueTag(), "x");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
index 0b5c877..7f9fd9c 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
@@ -50,7 +50,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
                 .put("strKey", "aval")
                 .put("intKey", 2)
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
         assertEquals(policy.getConfig(MyPolicy.INT_KEY), (Integer)2);
@@ -64,7 +64,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(differentKey, "aval")
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(differentKey), null);
         assertEquals(policy.getPolicyType().getConfigKey(differentKey.getName()), null);
@@ -76,7 +76,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
                 .put(MyPolicy.STR_KEY, "aval")
                 .put(MyPolicy.INT_KEY, 2)
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
         assertEquals(policy.getConfig(MyPolicy.INT_KEY), (Integer)2);
@@ -89,7 +89,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(MyPolicy.INT_KEY_WITH_DEFAULT, 0)
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.INT_KEY_WITH_DEFAULT), (Integer)0);
     }
@@ -99,7 +99,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(MyPolicy.STR_KEY_WITH_DEFAULT, null)
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY_WITH_DEFAULT), null);
     }
@@ -109,7 +109,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy();
         policy.config().set(MyPolicy.STR_KEY, "aval");
         policy.config().set(MyPolicy.INT_KEY, 2);
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
         assertEquals(policy.getConfig(MyPolicy.INT_KEY), (Integer)2);
@@ -121,7 +121,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
                 .put(MyPolicy.STR_KEY, "aval")
                 .build());
         policy.config().set(MyPolicy.STR_KEY, "diffval");
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "diffval");
     }
@@ -131,7 +131,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(MyPolicy.STR_KEY, "origval")
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         try {
             policy.config().set(MyPolicy.STR_KEY,"newval");
@@ -146,7 +146,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigReturnsDefaultValueIfNotSet() throws Exception {
         MyPolicy policy = new MyPolicy();
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY_WITH_DEFAULT), "str key default");
     }
@@ -157,7 +157,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(TestEntity.CONF_NAME, DependentConfiguration.whenDone(Callables.returning("aval")))
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         assertEquals(policy.getConfig(TestEntity.CONF_NAME), "aval");
     }
@@ -176,7 +176,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
                             }
                         }}))
                 .build());
-        app.addPolicy(policy);
+        app.policies().add(policy);
         
         Thread t = new Thread(new Runnable() {
                 public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
index 0a7b003..fbe6105 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
@@ -56,15 +56,15 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
         otherEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         listener = new RecordingSensorEventListener<>();
         policy = new AbstractPolicy() {};
-        entity.addPolicy(policy);
+        entity.policies().add(policy);
         app.start(ImmutableList.of(loc));
     }
 
     @Test
     public void testSubscriptionReceivesEvents() throws Exception {
-        policy.subscribe(entity, TestEntity.SEQUENCE, listener);
-        policy.subscribe(entity, TestEntity.NAME, listener);
-        policy.subscribe(entity, TestEntity.MY_NOTIF, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.SEQUENCE, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.NAME, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.MY_NOTIF, listener);
         
         otherEntity.sensors().set(TestEntity.SEQUENCE, 456);
         entity.sensors().set(TestEntity.SEQUENCE, 123);
@@ -82,11 +82,11 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testUnsubscribeRemovesAllSubscriptionsForThatEntity() throws Exception {
-        policy.subscribe(entity, TestEntity.SEQUENCE, listener);
-        policy.subscribe(entity, TestEntity.NAME, listener);
-        policy.subscribe(entity, TestEntity.MY_NOTIF, listener);
-        policy.subscribe(otherEntity, TestEntity.SEQUENCE, listener);
-        policy.unsubscribe(entity);
+        policy.subscriptions().subscribe(entity, TestEntity.SEQUENCE, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.NAME, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.MY_NOTIF, listener);
+        policy.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener);
+        policy.subscriptions().unsubscribe(entity);
         
         entity.sensors().set(TestEntity.SEQUENCE, 123);
         entity.sensors().set(TestEntity.NAME, "myname");
@@ -103,11 +103,11 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testUnsubscribeUsingHandleStopsEvents() throws Exception {
-        SubscriptionHandle handle1 = policy.subscribe(entity, TestEntity.SEQUENCE, listener);
-        SubscriptionHandle handle2 = policy.subscribe(entity, TestEntity.NAME, listener);
-        SubscriptionHandle handle3 = policy.subscribe(otherEntity, TestEntity.SEQUENCE, listener);
+        SubscriptionHandle handle1 = policy.subscriptions().subscribe(entity, TestEntity.SEQUENCE, listener);
+        SubscriptionHandle handle2 = policy.subscriptions().subscribe(entity, TestEntity.NAME, listener);
+        SubscriptionHandle handle3 = policy.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener);
         
-        policy.unsubscribe(entity, handle2);
+        policy.subscriptions().unsubscribe(entity, handle2);
         
         entity.sensors().set(TestEntity.SEQUENCE, 123);
         entity.sensors().set(TestEntity.NAME, "myname");
@@ -142,8 +142,8 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
         entity.sensors().set(TestEntity.SEQUENCE, 123);
         entity.sensors().set(TestEntity.NAME, "myname");
         
-        policy.subscribe(entity, TestEntity.SEQUENCE, listener);
-        policy.subscribe(entity, TestEntity.NAME, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.SEQUENCE, listener);
+        policy.subscriptions().subscribe(entity, TestEntity.NAME, listener);
         
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), new Runnable() {
             @Override public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
index 2fda742..0e7495f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
@@ -77,7 +77,7 @@ public class HttpRequestSensorTest {
                 .configure(HttpRequestSensor.JSON_PATH, "$.myKey")
                 .configure(HttpRequestSensor.SENSOR_URI, serverUrl + "/myKey/myValue"));
         sensor.apply(entity);
-        entity.setAttribute(Attributes.SERVICE_UP, true);
+        entity.sensors().set(Attributes.SERVICE_UP, true);
 
         EntityTestUtils.assertAttributeEqualsEventually(entity, SENSOR_STRING, "myValue");
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
index bdb4a81..54af885 100644
--- a/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
@@ -78,7 +78,7 @@ public class SshCommandSensorIntegrationTest {
                 .configure(SshCommandSensor.SENSOR_COMMAND, "echo foo > "+tempFile.getAbsolutePath()+"\n"
                     + "wc "+tempFile.getAbsolutePath()))
             .apply(entity);
-        entity.setAttribute(Attributes.SERVICE_UP, true);
+        entity.sensors().set(Attributes.SERVICE_UP, true);
 
         String val = EntityTestUtils.assertAttributeEventuallyNonNull(entity, SENSOR_STRING);
         assertTrue(val.contains("1"), "val="+val);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsTest.java b/core/src/test/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsTest.java
index 49cab1e..73515ba 100644
--- a/core/src/test/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/server/entity/BrooklynMetricsTest.java
@@ -108,8 +108,8 @@ public class BrooklynMetricsTest {
         
         // Setting attribute causes event to be published and delivered to the subscriber
         // Note that the brooklyn metrics entity itself is also publishing sensors
-        app.subscribe(e, TestEntity.SEQUENCE, SensorEventListener.NOOP);
-        e.setAttribute(TestEntity.SEQUENCE, 1);
+        app.subscriptions().subscribe(e, TestEntity.SEQUENCE, SensorEventListener.NOOP);
+        e.sensors().set(TestEntity.SEQUENCE, 1);
         
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.FIVE_SECONDS), new Runnable() {
             public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
index debe110..bf8d0cb 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
@@ -35,7 +35,7 @@ public class TestClusterImpl extends DynamicClusterImpl implements TestCluster {
     public void init() {
         super.init();
         size = getConfig(INITIAL_SIZE);
-        setAttribute(Startable.SERVICE_UP, true);
+        sensors().set(Startable.SERVICE_UP, true);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/test/entity/TestEntityImpl.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestEntityImpl.java b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestEntityImpl.java
index 786c908..6c3b913 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestEntityImpl.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestEntityImpl.java
@@ -115,7 +115,7 @@ public class TestEntityImpl extends AbstractEntity implements TestEntity {
     @Override
     public synchronized void setSequenceValue(int value) {
         sequenceValue = value;
-        setAttribute(SEQUENCE, value);
+        sensors().set(SEQUENCE, value);
     }
 
     @Override
@@ -125,7 +125,7 @@ public class TestEntityImpl extends AbstractEntity implements TestEntity {
         ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
         counter.incrementAndGet();
         addLocations(locs);
-        setAttribute(SERVICE_UP, true);
+        sensors().set(SERVICE_UP, true);
         ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
     }
 
@@ -135,7 +135,7 @@ public class TestEntityImpl extends AbstractEntity implements TestEntity {
         callHistory.add("stop");
         ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
         counter.decrementAndGet();
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
         ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/test/qa/longevity/EntityCleanupLongevityTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/qa/longevity/EntityCleanupLongevityTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/test/qa/longevity/EntityCleanupLongevityTestFixture.java
index 8fad0ae..69af3ce 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/qa/longevity/EntityCleanupLongevityTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/qa/longevity/EntityCleanupLongevityTestFixture.java
@@ -164,11 +164,11 @@ public abstract class EntityCleanupLongevityTestFixture {
     protected TestApplication newApp() {
         final TestApplication result = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext);
         TestEntity entity = result.createAndManageChild(EntitySpec.create(TestEntity.class));
-        result.subscribe(entity, TestEntity.NAME, new SensorEventListener<String>() {
+        result.subscriptions().subscribe(entity, TestEntity.NAME, new SensorEventListener<String>() {
             @Override public void onEvent(SensorEvent<String> event) {
-                result.setAttribute(TestApplication.MY_ATTRIBUTE, event.getValue());
+                result.sensors().set(TestApplication.MY_ATTRIBUTE, event.getValue());
             }});
-        entity.setAttribute(TestEntity.NAME, "myname");
+        entity.sensors().set(TestEntity.NAME, "myname");
         return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPerformanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPerformanceTest.java b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPerformanceTest.java
index aa9f7ff..16707d0 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPerformanceTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPerformanceTest.java
@@ -71,7 +71,7 @@ public class EntityPerformanceTest extends AbstractPerformanceTest {
         
         measureAndAssert("updateAttribute", numIterations, minRatePerSec, new Runnable() {
             public void run() {
-                entity.setAttribute(TestEntity.SEQUENCE, i.getAndIncrement());
+                entity.sensors().set(TestEntity.SEQUENCE, i.getAndIncrement());
             }});
     }
 
@@ -82,14 +82,14 @@ public class EntityPerformanceTest extends AbstractPerformanceTest {
         final AtomicInteger i = new AtomicInteger();
         final AtomicInteger lastVal = new AtomicInteger();
         
-        app.subscribe(entity, TestEntity.SEQUENCE, new SensorEventListener<Integer>() {
+        app.subscriptions().subscribe(entity, TestEntity.SEQUENCE, new SensorEventListener<Integer>() {
                 @Override public void onEvent(SensorEvent<Integer> event) {
                     lastVal.set(event.getValue());
                 }});
         
         measureAndAssert("updateAttributeWithListener", numIterations, minRatePerSec, new Runnable() {
             public void run() {
-                entity.setAttribute(TestEntity.SEQUENCE, (i.getAndIncrement()));
+                entity.sensors().set(TestEntity.SEQUENCE, (i.getAndIncrement()));
             }});
         
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPersistencePerformanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPersistencePerformanceTest.java b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPersistencePerformanceTest.java
index 11a965e..bbd10c9 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPersistencePerformanceTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/EntityPersistencePerformanceTest.java
@@ -70,7 +70,7 @@ public class EntityPersistencePerformanceTest extends RebindTestFixtureWithApp {
         
         for (int i = 0; i < numEntities; i++) {
             TestEntity entity = origApp.createAndManageChild(EntitySpec.create(TestEntity.class));
-            entity.addPolicy(PolicySpec.create(TestPolicy.class));
+            entity.policies().add(PolicySpec.create(TestPolicy.class));
             SimulatedLocation loc = origManagementContext.getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class));
             entities.add(entity);
             locs.add(loc);
@@ -84,9 +84,9 @@ public class EntityPersistencePerformanceTest extends RebindTestFixtureWithApp {
                             int i = 0;
                             public void run() {
                                 for (TestEntity entity : entities) {
-                                    entity.setAttribute(TestEntity.SEQUENCE, i++);
-                                    Policy policy = Iterables.find(entity.getPolicies(), Predicates.instanceOf(TestPolicy.class));
-                                    policy.setConfig(TestPolicy.CONF_NAME, "name-"+i);
+                                    entity.sensors().set(TestEntity.SEQUENCE, i++);
+                                    Policy policy = Iterables.find(entity.policies(), Predicates.instanceOf(TestPolicy.class));
+                                    policy.config().set(TestPolicy.CONF_NAME, "name-"+i);
                                 }
                             }})
                     .limitTimeTo(testLength)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
index 68d6804..72acb74 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
@@ -69,7 +69,7 @@ class CustomAggregatingEnricherDeprecatedTest {
     @Test
     public void testEnrichersWithNoProducers() {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher([:], intSensor, target, 11, 40)
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), 40
     }
 
@@ -77,7 +77,7 @@ class CustomAggregatingEnricherDeprecatedTest {
     public void testSummingEnricherWhenNoSensorValuesYet() {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
                 intSensor, target, producers:[producer], 11, 40)
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), 11
     }
 
@@ -85,7 +85,7 @@ class CustomAggregatingEnricherDeprecatedTest {
     public void testSingleProducerSum() {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
                 intSensor, target, null, null, producers:[producer])
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), null
         cae.onEvent(intSensor.newEvent(producer, 1))
         assertEquals cae.getAggregate(), 1
@@ -95,7 +95,7 @@ class CustomAggregatingEnricherDeprecatedTest {
     public void testSummingEnricherWhenNoAndNullSensorValue() {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
                 intSensor, target, null, null, producers:[producer])
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), null
         cae.onEvent(intSensor.newEvent(producer, null))
         assertEquals cae.getAggregate(), null
@@ -105,7 +105,7 @@ class CustomAggregatingEnricherDeprecatedTest {
     public void testSummingEnricherWhenNoAndNullSensorValueExplicitValue() {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
                 intSensor, target, 3 /** if null */, 5 /** if none */, producers:[producer])
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), 3
         cae.onEvent(intSensor.newEvent(producer, null))
         assertEquals cae.getAggregate(), 3
@@ -125,7 +125,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
             intSensor, target, null, null, producers:producers)
         
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), null
         cae.onEvent(intSensor.newEvent(producers[2], 1))
         assertEquals cae.getAggregate(), 1
@@ -143,7 +143,7 @@ class CustomAggregatingEnricherDeprecatedTest {
                 ]
         CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
                 intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null, producers:producers)
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), null
         cae.onEvent(intSensor.newEvent(producers[0], null))
         assertEquals cae.getAggregate(), null
@@ -157,7 +157,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
                 intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5 /** if none */,
                 producers:producers)
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), 3d
         cae.onEvent(intSensor.newEvent(producers[0], null))
@@ -173,7 +173,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
                 intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5 /** if none */,
                 producers:producers)
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), 5d
     }
@@ -188,7 +188,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
                 intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null, producers:producers)
         
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), null
         cae.onEvent(intSensor.newEvent(producers[0], 3))
@@ -215,7 +215,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
                 intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 0, 0, producers:producers)
         
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), 0d
         cae.onEvent(intSensor.newEvent(producers[0], 3))
@@ -240,7 +240,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
                 intSensor, target, null, null, producers:[p1])
 
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), null
         
         // Event by initial producer
@@ -265,18 +265,18 @@ class CustomAggregatingEnricherDeprecatedTest {
             log.debug("created $group and the entities it will contain $p1 $p2")
 
             CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, 0, 0, allMembers:true)
-            group.addEnricher(cae)
+            group.enrichers().add(cae)
 
             assertEquals cae.getAggregate(), 0
 
             group.addMember(p1)
-            p1.setAttribute(intSensor, 1)
+            p1.sensors().set(intSensor, 1)
             Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
                 assertEquals cae.getAggregate(), 1
             }
 
             group.addMember(p2)
-            p2.setAttribute(intSensor, 2)
+            p2.sensors().set(intSensor, 2)
             Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
                 assertEquals cae.getAggregate(), 3
             }
@@ -306,15 +306,15 @@ class CustomAggregatingEnricherDeprecatedTest {
         TestEntity p2 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group)); 
         group.addMember(p1)
         group.addMember(p2)
-        p1.setAttribute(intSensor, 1)
+        p1.sensors().set(intSensor, 1)
         Entities.manage(group);
         
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, null, null, allMembers:true)
-        group.addEnricher(cae)
+        group.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), 1
 
-        p2.setAttribute(intSensor, 2)
+        p2.sensors().set(intSensor, 2)
         Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
             assertEquals cae.getAggregate(), 3
         }
@@ -333,12 +333,12 @@ class CustomAggregatingEnricherDeprecatedTest {
         TestEntity p3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         group.addMember(p1)
         group.addMember(p2)
-        p1.setAttribute(intSensor, 1)
-        p2.setAttribute(intSensor, 2)
-        p3.setAttribute(intSensor, 4)
+        p1.sensors().set(intSensor, 1)
+        p2.sensors().set(intSensor, 2)
+        p3.sensors().set(intSensor, 4)
         
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, null, null, allMembers:true, filter:{it == p1})
-        group.addEnricher(cae)
+        group.enrichers().add(cae)
         
         assertEquals cae.getAggregate(), 1
         
@@ -358,7 +358,7 @@ class CustomAggregatingEnricherDeprecatedTest {
         CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newEnricher(
                 intSensor, target, aggregator, 0, producers:[p1])
 
-        producer.addEnricher(cae)
+        producer.enrichers().add(cae)
         assertEquals cae.getAggregate(), 0
         
         // Event by producer


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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
index e335fd0..3fcebdf 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
@@ -160,9 +160,9 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
         if (config().getRaw(UP_QUORUM_CHECK).isAbsent() && getConfig(INITIAL_SIZE)==0) {
             // if initial size is 0 then override up check to allow zero if empty
             config().set(UP_QUORUM_CHECK, QuorumChecks.atLeastOneUnlessEmpty());
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         } else {
-            setAttribute(SERVICE_UP, false);
+            sensors().set(SERVICE_UP, false);
         }
         super.initEnrichers();
         // override previous enricher so that only members are checked
@@ -271,7 +271,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
         }
 
         if (isAvailabilityZoneEnabled()) {
-            setAttribute(SUB_LOCATIONS, findSubLocations(loc));
+            sensors().set(SUB_LOCATIONS, findSubLocations(loc));
         }
 
         ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
@@ -294,7 +294,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
             if (quarantineGroup==null || !Entities.isManaged(quarantineGroup)) {
                 quarantineGroup = addChild(EntitySpec.create(QuarantineGroup.class).displayName("quarantine"));
                 Entities.manage(quarantineGroup);
-                setAttribute(QUARANTINE_GROUP, quarantineGroup);
+                sensors().set(QUARANTINE_GROUP, quarantineGroup);
             }
         }
 
@@ -351,7 +351,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
                     new Object[] { this, currentSize, initialQuorumSize, initialSize });
         }
 
-        for (Policy it : getPolicies()) {
+        for (Policy it : policies()) {
             it.resume();
         }
     }
@@ -397,7 +397,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
     public void stop() {
         ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
         try {
-            for (Policy it : getPolicies()) { it.suspend(); }
+            for (Policy it : policies()) { it.suspend(); }
 
             // run shrink without mutex to make things stop even if starting,
             int size = getCurrentSize();
@@ -553,8 +553,8 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
 
         Set<Location> newlyFailed = Sets.difference(failed, oldFailedSubLocations);
         Set<Location> newlyRecovered = Sets.difference(oldFailedSubLocations, failed);
-        setAttribute(FAILED_SUB_LOCATIONS, failed);
-        setAttribute(SUB_LOCATIONS, result);
+        sensors().set(FAILED_SUB_LOCATIONS, failed);
+        sensors().set(SUB_LOCATIONS, result);
         if (newlyFailed.size() > 0) {
             LOG.warn("Detected probably zone failures for {}: {}", this, newlyFailed);
         }
@@ -712,7 +712,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
 
     protected void quarantineFailedNodes(Collection<Entity> failedEntities) {
         for (Entity entity : failedEntities) {
-            emit(ENTITY_QUARANTINED, entity);
+            sensors().emit(ENTITY_QUARANTINED, entity);
             getQuarantineGroup().addMember(entity);
             removeMember(entity);
         }
@@ -772,8 +772,8 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
 
         Entity entity = createNode(loc, createFlags);
 
-        ((EntityLocal) entity).setAttribute(CLUSTER_MEMBER, true);
-        ((EntityLocal) entity).setAttribute(CLUSTER, this);
+        entity.sensors().set(CLUSTER_MEMBER, true);
+        entity.sensors().set(CLUSTER, this);
 
         Entities.manage(entity);
         addMember(entity);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
index 717b0e4..23c05b5 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
@@ -70,7 +70,7 @@ public class DynamicFabricImpl extends AbstractGroupImpl implements DynamicFabri
     public void init() {
         super.init();
         
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .aggregating(Changeable.GROUP_SIZE)
                 .publishing(FABRIC_SIZE)
                 .fromMembers()
@@ -78,7 +78,7 @@ public class DynamicFabricImpl extends AbstractGroupImpl implements DynamicFabri
                 .valueToReportIfNoSensors(0)
                 .build());
         
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
     }
     
     protected EntitySpec<?> getMemberSpec() {
@@ -162,7 +162,7 @@ public class DynamicFabricImpl extends AbstractGroupImpl implements DynamicFabri
             
             waitForTasksOnStart(tasks);
             ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-            setAttribute(SERVICE_UP, true);
+            sensors().set(SERVICE_UP, true);
         } catch (Exception e) {
             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
             throw Exceptions.propagate(e);
@@ -192,7 +192,7 @@ public class DynamicFabricImpl extends AbstractGroupImpl implements DynamicFabri
             Task<?> invoke = Entities.invokeEffector(this, stoppableChildren, Startable.STOP);
             if (invoke != null) invoke.get();
             ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
-            setAttribute(SERVICE_UP, false);
+            sensors().set(SERVICE_UP, false);
         } catch (Exception e) {
             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
             throw Exceptions.propagate(e);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
index 61f1437..7f56a03 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
@@ -61,7 +61,7 @@ public class DynamicGroupImpl extends AbstractGroupImpl implements DynamicGroup
     @Override
     public void init() {
         super.init();
-        setAttribute(RUNNING, true);
+        sensors().set(RUNNING, true);
     }
     
     @Override
@@ -93,7 +93,7 @@ public class DynamicGroupImpl extends AbstractGroupImpl implements DynamicGroup
 
     @Override
     public void stop() {
-        setAttribute(RUNNING, false);
+        sensors().set(RUNNING, false);
         if (setChangeListener != null) {
             ((ManagementContextInternal) getManagementContext()).removeEntitySetListener(setChangeListener);
         }
@@ -107,7 +107,7 @@ public class DynamicGroupImpl extends AbstractGroupImpl implements DynamicGroup
                     if (filter.apply(event)) onEntityChanged(event.getSource());
                 }
             };
-        subscribe(producer, sensor, listener);
+        subscriptions().subscribe(producer, sensor, listener);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/group/DynamicMultiGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicMultiGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicMultiGroupImpl.java
index e914bd2..b6f5d55 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicMultiGroupImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicMultiGroupImpl.java
@@ -92,7 +92,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
     @Override
     public void init() {
         super.init();
-        setAttribute(BUCKETS, ImmutableMap.<String, BasicGroup>of());
+        sensors().set(BUCKETS, ImmutableMap.<String, BasicGroup>of());
         connectScanner();
     }
 
@@ -196,7 +196,7 @@ public class DynamicMultiGroupImpl extends DynamicGroupImpl implements DynamicMu
             }
 
             // Save the bucket mappings
-            setAttribute(BUCKETS, ImmutableMap.copyOf(buckets));
+            sensors().set(BUCKETS, ImmutableMap.copyOf(buckets));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/stock/BasicStartableImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/BasicStartableImpl.java b/core/src/main/java/org/apache/brooklyn/entity/stock/BasicStartableImpl.java
index 4906839..b5a8616 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/stock/BasicStartableImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/stock/BasicStartableImpl.java
@@ -73,7 +73,7 @@ public class BasicStartableImpl extends AbstractEntity implements BasicStartable
                     t.getUnchecked();
                 }
             }
-            setAttribute(Attributes.SERVICE_UP, true);
+            sensors().set(Attributes.SERVICE_UP, true);
             ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
         } catch (Throwable t) {
             ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
@@ -84,7 +84,7 @@ public class BasicStartableImpl extends AbstractEntity implements BasicStartable
     @Override
     public void stop() {
         ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
         try {
             StartableMethods.stop(this);
             ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/stock/DataEntityImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/DataEntityImpl.java b/core/src/main/java/org/apache/brooklyn/entity/stock/DataEntityImpl.java
index 7f10d5b..9ee3b28 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/stock/DataEntityImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/stock/DataEntityImpl.java
@@ -39,12 +39,12 @@ public class DataEntityImpl extends AbstractEntity implements DataEntity {
     @Override
     public void start(Collection<? extends Location> locations) {
         connectSensors();
-        setAttribute(SERVICE_UP, Boolean.TRUE);
+        sensors().set(SERVICE_UP, Boolean.TRUE);
     }
 
     @Override
     public void stop() {
-        setAttribute(SERVICE_UP, Boolean.FALSE);
+        sensors().set(SERVICE_UP, Boolean.FALSE);
         disconnectSensors();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/entity/stock/DelegateEntityImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/DelegateEntityImpl.java b/core/src/main/java/org/apache/brooklyn/entity/stock/DelegateEntityImpl.java
index 5728635..52b4d6d 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/stock/DelegateEntityImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/stock/DelegateEntityImpl.java
@@ -36,14 +36,14 @@ public class DelegateEntityImpl extends AbstractEntity implements DelegateEntity
         Preconditions.checkNotNull(delegate, "delegate");
 
         // Propagate all sensors from the delegate entity
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagatingAll()
                 .from(delegate)
                 .build());
 
         // Publish the entity as an attribute for linking
-        setAttribute(DELEGATE_ENTITY, delegate);
-        setAttribute(DELEGATE_ENTITY_LINK, EntityUrl.entityUrl().apply(delegate));
+        sensors().set(DELEGATE_ENTITY, delegate);
+        sensors().set(DELEGATE_ENTITY_LINK, EntityUrl.entityUrl().apply(delegate));
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeed.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeed.java b/core/src/main/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeed.java
index d34d0a5..07cb8ea 100644
--- a/core/src/main/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeed.java
+++ b/core/src/main/java/org/apache/brooklyn/feed/windows/WindowsPerformanceCounterFeed.java
@@ -305,7 +305,7 @@ public class WindowsPerformanceCounterFeed extends AbstractFeed {
                 AttributeSensor<Object> attribute = (AttributeSensor<Object>) Sensors.newSensor(clazz, config.getSensor().getName(), config.getDescription());
                 try {
                     Object value = TypeCoercions.coerce(rawValue, TypeToken.of(clazz));
-                    entity.setAttribute(attribute, value);
+                    entity.sensors().set(attribute, value);
                 } catch (Exception e) {
                     Exceptions.propagateIfFatal(e);
                     if (failedAttributes.add(attribute)) {
@@ -324,7 +324,7 @@ public class WindowsPerformanceCounterFeed extends AbstractFeed {
             for (WindowsPerformanceCounterPollConfig<?> config : polls) {
                 Class<?> clazz = config.getSensor().getType();
                 AttributeSensor<?> attribute = Sensors.newSensor(clazz, config.getSensor().getName(), config.getDescription());
-                entity.setAttribute(attribute, null);
+                entity.sensors().set(attribute, null);
             }
         }
 
@@ -333,7 +333,7 @@ public class WindowsPerformanceCounterFeed extends AbstractFeed {
             log.error("Detected exception while retrieving Windows Performance Counters from entity " +
                     entity.getDisplayName(), exception);
             for (WindowsPerformanceCounterPollConfig<?> config : polls) {
-                entity.setAttribute(Sensors.newSensor(config.getSensor().getClass(), config.getPerformanceCounterName(), config.getDescription()), null);
+                entity.sensors().set(Sensors.newSensor(config.getSensor().getClass(), config.getPerformanceCounterName(), config.getDescription()), null);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java b/core/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
index 0945407..5d3a0c8 100644
--- a/core/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
@@ -53,7 +53,7 @@ public class AdvertiseWinrmLoginPolicy extends AbstractPolicy implements SensorE
 
     public void setEntity(EntityLocal entity) {
         super.setEntity(entity);
-        subscribe(entity, AbstractEntity.LOCATION_ADDED, this);
+        subscriptions().subscribe(entity, AbstractEntity.LOCATION_ADDED, this);
     }
 
     @Override
@@ -75,6 +75,6 @@ public class AdvertiseWinrmLoginPolicy extends AbstractPolicy implements SensorE
         
         LOG.info("Advertising user "+user+" @ "+hostname+":"+port);
         
-        ((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/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
index 63cb13a..f59814e 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
@@ -392,7 +392,7 @@ public class FlagUtils {
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public static void setConfig(Object objectOfField, ConfigKey<?> key, Object value, SetFromFlag optionalAnnotation) {
         if (objectOfField instanceof Configurable) {
-            ((Configurable)objectOfField).setConfig((ConfigKey)key, value);
+            ((Configurable)objectOfField).config().set((ConfigKey)key, value);
             return;
         } else {
             if (optionalAnnotation==null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsMoreTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsMoreTest.java b/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsMoreTest.java
index d217dd5..3e5d1e1 100644
--- a/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsMoreTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/config/MapConfigKeyAndFriendsMoreTest.java
@@ -64,33 +64,33 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
     }
 
     public void testMapModUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT, MapModifications.add(MutableMap.<String,Object>of("a", 1)));
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT, MapModifications.add(MutableMap.<String,Object>of("a", 1)));
         log.info("Map-Mod: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), ImmutableMap.<String,Object>of("a", 1));
     }
 
     public void testMapSubkeyUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("a"), 1);
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("a"), 1);
         log.info("Map-SubKey: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), ImmutableMap.<String,Object>of("a", 1));
     }
 
     public void testMapDirectUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()), ImmutableMap.<String,Object>of("a", 1));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()), ImmutableMap.<String,Object>of("a", 1));
         log.info("Map-Direct: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), ImmutableMap.<String,Object>of("a", 1));
     }
     
     public void testMapDotExtensionUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()+".a"), 1);
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()+".a"), 1);
         log.info("Map-DotExt: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), ImmutableMap.<String,Object>of("a", 1));
     }
     
     public void testMapManyWays() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()), ImmutableMap.<String,Object>of("map", 1, "subkey", 0, "dotext", 0));
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()+".dotext"), 1);
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("subkey"), 1);
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()), ImmutableMap.<String,Object>of("map", 1, "subkey", 0, "dotext", 0));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING_OBJECT.getName()+".dotext"), 1);
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("subkey"), 1);
         
         log.info("Map-ManyWays: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), ImmutableMap.<String,Object>of("map", 1, "subkey", 1, "dotext", 1));
@@ -101,40 +101,40 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
         // ensure it is null before we pass something in, and passing an empty collection makes it be empty
         log.info("Map-Empty-1: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), null);
-        entity.setConfig((MapConfigKey)TestEntity.CONF_MAP_THING, MutableMap.of());
+        entity.config().set((MapConfigKey)TestEntity.CONF_MAP_THING, MutableMap.of());
         log.info("Map-Empty-2: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), ImmutableMap.of());
     }
 
     
     public void testSetModUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.addItem("x"));
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.addItem("x"));
         log.info("Set-Mod: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("x"));
     }
 
     public void testSetSubKeyUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "x");
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "x");
         log.info("Set-SubKey: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("x"));
     }
 
     public void testSetPutDirectUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()), ImmutableSet.of("x"));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()), ImmutableSet.of("x"));
         log.info("Set-Direct: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("x"));
     }
     
     public void testSetDotExtensionUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()+".a"), "x");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()+".a"), "x");
         log.info("Set-DotExt: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("x"));
     }
     
     public void testSetManyWays() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()), ImmutableSet.of("directX"));
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()+".dotext"), "dotextX");
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "subkeyX");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()), ImmutableSet.of("directX"));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_SET_THING.getName()+".dotext"), "dotextX");
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "subkeyX");
         
         log.info("Set-ManyWays: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("directX", "subkeyX", "dotextX"));
@@ -144,13 +144,13 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
         // passing a collection to the RHS of setConfig can be ambiguous,
         // esp if there are already values set, but attempt to act sensibly
         // (logging warnings if the set is not empty)
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem("w"));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("x"));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("y"));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("a", "b"));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem("z"));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem(MutableSet.of("c", "d")));
-        entity.setConfig(TestEntity.CONF_SET_OBJ_THING, MutableSet.of(MutableSet.of("e", "f")));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem("w"));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("x"));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("y"));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, MutableSet.of("a", "b"));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem("z"));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, SetModifications.addItem(MutableSet.of("c", "d")));
+        entity.config().set(TestEntity.CONF_SET_OBJ_THING, MutableSet.of(MutableSet.of("e", "f")));
         log.info("Set-Coll: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_OBJ_THING), ImmutableSet.of(
             "a", "b", "w", "x", "y", "z", ImmutableSet.of("c", "d"), ImmutableSet.of("e", "f")));
@@ -161,34 +161,34 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
         // ensure it is null before we pass something in, and passing an empty collection makes it be empty
         log.info("Set-Empty-1: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), null);
-        entity.setConfig((SetConfigKey)TestEntity.CONF_SET_THING, MutableSet.of());
+        entity.config().set((SetConfigKey)TestEntity.CONF_SET_THING, MutableSet.of());
         log.info("Set-Empty-2: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of());
     }
 
 
     public void testListModUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.add("x", "x"));
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.add("x", "x"));
         log.info("List-Mod: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "x"));
     }
     
     public void testListSubKeyUsage() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "x");
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "x");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "x");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "x");
         log.info("List-SubKey: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "x"));
     }
 
     public void testListPutDirectUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x", "x"));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x", "x"));
         log.info("List-Direct: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "x"));
     }
     
     public void testListDotExtensionUsage() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".a"), "x");
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".b"), "x");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".a"), "x");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".b"), "x");
         log.info("List-DotExt: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "x"));
     }
@@ -198,43 +198,43 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
     
     @Test(enabled=false)
     public void testListModUsageMultiValues() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.add("x", "w", "x"));
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.add("x", "w", "x"));
         log.info("List-Mod: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "w", "x"));
     }
     
     @Test(enabled=false)
     public void testListSubKeyUsageMultiValues() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "x");
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "w");
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "x");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "x");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "w");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "x");
         log.info("List-SubKey: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "w", "x"));
     }
 
     @Test(enabled=false)
     public void testListPutDirectUsageMultiValues() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x", "w", "x"));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x", "w", "x"));
         log.info("List-Direct: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "w", "x"));
     }
     
     @Test(enabled=false)
     public void testListDotExtensionUsageMultiValues() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".a"), "x");
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".c"), "w");
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".b"), "x");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".a"), "x");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".c"), "w");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".b"), "x");
         log.info("List-DotExt: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x", "w", "x"));
     }
     
     @Test(enabled=false)
     public void testListManyWaysMultiValues() throws Exception {
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x1", "w1"));
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".dotext"), "x2");
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".dotext"), "w2");
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "x3");
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "w3");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()), ImmutableList.of("x1", "w1"));
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".dotext"), "x2");
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_LIST_THING.getName()+".dotext"), "w2");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "x3");
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "w3");
         
         log.info("List-ManyWays: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of("x1", "w1", "x2", "x2", "x3", "w3"));
@@ -244,13 +244,13 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
         // passing a collection to the RHS of setConfig can be ambiguous,
         // esp if there are already values set, but attempt to act sensibly
         // (logging warnings if the set is not empty)
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem("w"));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("x"));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("y"));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("a", "b"));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem("z"));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem(MutableList.of("c", "d")));
-        entity.setConfig(TestEntity.CONF_LIST_OBJ_THING, MutableList.of(MutableList.of("e", "f")));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem("w"));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("x"));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("y"));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, MutableList.of("a", "b"));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem("z"));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, ListModifications.addItem(MutableList.of("c", "d")));
+        entity.config().set(TestEntity.CONF_LIST_OBJ_THING, MutableList.of(MutableList.of("e", "f")));
         log.info("List-Coll: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         List<? extends Object> list = entity.getConfig(TestEntity.CONF_LIST_OBJ_THING);
         Assert.assertEquals(list.size(), 8, "list is: "+list);
@@ -262,7 +262,7 @@ public class MapConfigKeyAndFriendsMoreTest extends BrooklynAppUnitTestSupport {
         // ensure it is null before we pass something in, and passing an empty collection makes it be empty
         log.info("List-Empty-1: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), null);
-        entity.setConfig((ListConfigKey)TestEntity.CONF_LIST_THING, MutableList.of());
+        entity.config().set((ListConfigKey)TestEntity.CONF_LIST_THING, MutableList.of());
         log.info("List-Empty-2: "+MutableMap.copyOf(entity.getConfigMap().asMapWithStringKeys()));
         Assert.assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ImmutableList.of());
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/config/MapListAndOtherStructuredConfigKeyTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/config/MapListAndOtherStructuredConfigKeyTest.groovy b/core/src/test/java/org/apache/brooklyn/core/config/MapListAndOtherStructuredConfigKeyTest.groovy
index 8516df5..0b5e9a3 100644
--- a/core/src/test/java/org/apache/brooklyn/core/config/MapListAndOtherStructuredConfigKeyTest.groovy
+++ b/core/src/test/java/org/apache/brooklyn/core/config/MapListAndOtherStructuredConfigKeyTest.groovy
@@ -64,8 +64,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     
     @Test    
     public void testMapConfigKeyCanStoreAndRetrieveVals() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("bkey"), "bval")
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("bkey"), "bval")
         app.start(locs)
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [akey:"aval",bkey:"bval"])
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING.subKey("akey")), "aval")
@@ -74,8 +74,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     @Test
     public void testMapConfigKeyCanStoreAndRetrieveFutureValsPutByKeys() throws Exception {
         String bval = "bval-too-early"
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), DependentConfiguration.whenDone( {return "aval"} as Callable))
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("bkey"), DependentConfiguration.whenDone( {return bval} as Callable))
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), DependentConfiguration.whenDone( {return "aval"} as Callable))
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("bkey"), DependentConfiguration.whenDone( {return bval} as Callable))
         app.start(locs)
         bval = "bval";
         
@@ -85,7 +85,7 @@ public class MapListAndOtherStructuredConfigKeyTest {
     @Test
     public void testMapConfigKeyCanStoreAndRetrieveFutureValsPutAsMap() throws Exception {
         String bval = "bval-too-early"
-        entity.setConfig(TestEntity.CONF_MAP_THING, MutableMap.of("akey", DependentConfiguration.whenDone( {return "aval"} as Callable),
+        entity.config().set(TestEntity.CONF_MAP_THING, MutableMap.of("akey", DependentConfiguration.whenDone( {return "aval"} as Callable),
             "bkey", DependentConfiguration.whenDone( {return bval} as Callable)));
         app.start(locs)
         bval = "bval";
@@ -98,7 +98,7 @@ public class MapListAndOtherStructuredConfigKeyTest {
         final AtomicReference<String> bval = new AtomicReference<String>("bval-too-early");
         final AtomicInteger bref = new AtomicInteger(0);
         
-        entity.setConfig(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING.getName()), 
+        entity.config().set(ConfigKeys.newConfigKey(Object.class, TestEntity.CONF_MAP_THING.getName()), 
             MutableMap.of("akey", DependentConfiguration.whenDone( {return "aval"} as Callable),
                 "bkey", {bref.incrementAndGet(); return bval.get();} as DeferredSupplier));
         app.start(locs)
@@ -121,7 +121,7 @@ public class MapListAndOtherStructuredConfigKeyTest {
 
     @Test
     public void testResolvesMapKeysOnGetNotPut() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING,
+        entity.config().set(TestEntity.CONF_MAP_THING,
             MutableMap.of({return "akey";} as DeferredSupplier, {return "aval";} as DeferredSupplier));
         app.start(locs)
   
@@ -136,7 +136,7 @@ public class MapListAndOtherStructuredConfigKeyTest {
         Map v1 = [a:1, b:"bb"]
         //it only allows strings
         try {
-            entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), v1)
+            entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), v1)
             fail();
         } catch (Exception e) {
             ClassCastException cce = Exceptions.getFirstThrowableOfType(e, ClassCastException.class);
@@ -148,7 +148,7 @@ public class MapListAndOtherStructuredConfigKeyTest {
     @Test
     public void testConfigKeyCanStoreAndRetrieveMaps() throws Exception {
         Map v1 = [a:1, b:"bb"]
-        entity.setConfig(TestEntity.CONF_MAP_PLAIN, v1)
+        entity.config().set(TestEntity.CONF_MAP_PLAIN, v1)
         app.start(locs)
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_PLAIN), v1)
     }
@@ -170,8 +170,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     
     @Test
     public void testSetConfigKeyCanStoreAndRetrieveVals() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "bval")
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "bval")
         app.start(locs)
         
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval","bval"))
@@ -179,8 +179,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     
     @Test
     public void testSetConfigKeyCanStoreAndRetrieveFutureVals() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), DependentConfiguration.whenDone( {return "aval"} as Callable))
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), DependentConfiguration.whenDone( {return "bval"} as Callable))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), DependentConfiguration.whenDone( {return "aval"} as Callable))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), DependentConfiguration.whenDone( {return "bval"} as Callable))
         app.start(locs)
         
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval","bval"))
@@ -188,48 +188,48 @@ public class MapListAndOtherStructuredConfigKeyTest {
 
     @Test
     public void testSetConfigKeyAddDirect() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, "bval")
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, "bval")
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval","bval"))
     }
 
     @Test
     public void testSetConfigKeyClear() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.clearing())
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.clearing())
         // for now defaults to null, but empty list might be better? or whatever the default is?
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), null)
     }
 
     @Test
     public void testSetConfigKeyAddMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.add("bval", "cval"))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.add("bval", "cval"))
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval","bval","cval"))
     }
     @Test
     public void testSetConfigKeyAddAllMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.addAll(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.addAll(["bval", "cval"]))
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval","bval","cval"))
     }
     @Test
     public void testSetConfigKeyAddItemMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.addItem(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.addItem(["bval", "cval"]))
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("aval",["bval","cval"]))
     }
     @Test
     public void testSetConfigKeyListMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_SET_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_SET_THING, SetModifications.set(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_SET_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_SET_THING, SetModifications.set(["bval", "cval"]))
         assertEquals(entity.getConfig(TestEntity.CONF_SET_THING), ImmutableSet.of("bval","cval"))
     }
     
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyCanStoreAndRetrieveVals() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "bval")
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "bval")
         app.start(locs)
         
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval","bval"])
@@ -238,8 +238,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyCanStoreAndRetrieveFutureVals() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), DependentConfiguration.whenDone( {return "aval"} as Callable))
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), DependentConfiguration.whenDone( {return "bval"} as Callable))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), DependentConfiguration.whenDone( {return "aval"} as Callable))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), DependentConfiguration.whenDone( {return "bval"} as Callable))
         app.start(locs)
         
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval","bval"])
@@ -248,84 +248,84 @@ public class MapListAndOtherStructuredConfigKeyTest {
 
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyAddDirect() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, "bval")
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, "bval")
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval","bval"])
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, ["aval","bval"] as Set)
     }
 
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyClear() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.clearing())
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.clearing())
         // for now defaults to null, but empty list might be better? or whatever the default is?
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, null)
     }
 
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyAddMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.add("bval", "cval"))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.add("bval", "cval"))
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval","bval","cval"])
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, ["aval","bval","cval"] as Set)
     }
 
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyAddAllMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.addAll(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.addAll(["bval", "cval"]))
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval","bval","cval"])
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, ["aval","bval","cval"] as Set)
     }
     
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyAddItemMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.addItem(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.addItem(["bval", "cval"]))
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["aval",["bval","cval"]])
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, ["aval",["bval","cval"]] as Set)
     }
     
     @Test // ListConfigKey deprecated, as order no longer guaranteed
     public void testListConfigKeyListMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_LIST_THING.subKey(), "aval")
-        entity.setConfig(TestEntity.CONF_LIST_THING, ListModifications.set(["bval", "cval"]))
+        entity.config().set(TestEntity.CONF_LIST_THING.subKey(), "aval")
+        entity.config().set(TestEntity.CONF_LIST_THING, ListModifications.set(["bval", "cval"]))
         //assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING), ["bval","cval"])
         assertEquals(entity.getConfig(TestEntity.CONF_LIST_THING) as Set, ["bval","cval"] as Set)
     }
 
     @Test
     public void testMapConfigPutDirect() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
-        entity.setConfig(TestEntity.CONF_MAP_THING, [bkey:"bval"])
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
+        entity.config().set(TestEntity.CONF_MAP_THING, [bkey:"bval"])
         //assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [akey:"aval",bkey:"bval"])
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [akey:"aval",bkey:"bval"])
     }
 
     @Test
     public void testMapConfigPutAllMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
-        entity.setConfig(TestEntity.CONF_MAP_THING, MapModifications.put([bkey:"bval"]))
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
+        entity.config().set(TestEntity.CONF_MAP_THING, MapModifications.put([bkey:"bval"]))
         //assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [akey:"aval",bkey:"bval"])
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [akey:"aval",bkey:"bval"])
     }
 
     @Test
     public void testMapConfigClearMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
-        entity.setConfig(TestEntity.CONF_MAP_THING, MapModifications.clearing())
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
+        entity.config().set(TestEntity.CONF_MAP_THING, MapModifications.clearing())
         // for now defaults to null, but empty map might be better? or whatever the default is?
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), null)
     }
     @Test
     public void testMapConfigSetMod() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
-        entity.setConfig(TestEntity.CONF_MAP_THING, MapModifications.set([bkey:"bval"]))
+        entity.config().set(TestEntity.CONF_MAP_THING.subKey("akey"), "aval")
+        entity.config().set(TestEntity.CONF_MAP_THING, MapModifications.set([bkey:"bval"]))
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING), [bkey:"bval"])
     }
     @Test
     public void testMapConfigDeepSetFromMap() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT, [akey: [aa:"AA", a2:"A2"], bkey: "b"])
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT, [akey: [aa:"AA", a2:"A2"], bkey: "b"])
         
         entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
         entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), ["b"])
@@ -334,8 +334,8 @@ public class MapListAndOtherStructuredConfigKeyTest {
     }
     @Test
     public void testMapConfigDeepSetFromSubkeys() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), "b")
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), "b")
         
         entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
         entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), ["b"])
@@ -344,10 +344,10 @@ public class MapListAndOtherStructuredConfigKeyTest {
     }
     @Test
     public void testMapConfigAdd() throws Exception {
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("0key"), 0)
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), ["b"])
-        entity.setConfig(TestEntity.CONF_MAP_THING_OBJECT, MapModifications.add([akey:[a3:3],bkey:"b2",ckey:"cc"]))
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("0key"), 0)
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("akey"), [aa:"AA", a2:"A2"])
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT.subKey("bkey"), ["b"])
+        entity.config().set(TestEntity.CONF_MAP_THING_OBJECT, MapModifications.add([akey:[a3:3],bkey:"b2",ckey:"cc"]))
         
         assertEquals(entity.getConfig(TestEntity.CONF_MAP_THING_OBJECT), 
             ["0key":0, akey:[aa:"AA",a2:"A2",a3:3],bkey:["b","b2"],ckey:"cc" ])

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/enricher/BasicEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/enricher/BasicEnricherTest.java b/core/src/test/java/org/apache/brooklyn/core/enricher/BasicEnricherTest.java
index be87f1f..6d58be0a 100644
--- a/core/src/test/java/org/apache/brooklyn/core/enricher/BasicEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/enricher/BasicEnricherTest.java
@@ -78,7 +78,7 @@ public class BasicEnricherTest extends BrooklynAppUnitTestSupport {
         enricher.setDisplayName("Bob");
         enricher.config().set(MyEnricher.STR_KEY, "aval");
         enricher.config().set(MyEnricher.INT_KEY, 2);
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getDisplayName(), "Bob");
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "aval");
@@ -87,7 +87,7 @@ public class BasicEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testAddSpec() throws Exception {
-        MyEnricher enricher = app.addEnricher(EnricherSpec.create(MyEnricher.class)
+        MyEnricher enricher = app.enrichers().add(EnricherSpec.create(MyEnricher.class)
             .displayName("Bob")
             .configure(MyEnricher.STR_KEY, "aval").configure(MyEnricher.INT_KEY, 2));
         
@@ -98,7 +98,7 @@ public class BasicEnricherTest extends BrooklynAppUnitTestSupport {
         
     @Test
     public void testTagsFromSpec() throws Exception {
-        MyEnricher enricher = app.addEnricher(EnricherSpec.create(MyEnricher.class).tag(99).uniqueTag("x"));
+        MyEnricher enricher = app.enrichers().add(EnricherSpec.create(MyEnricher.class).tag(99).uniqueTag("x"));
 
         assertEquals(enricher.tags().getTags(), MutableSet.of("x", 99));
         assertEquals(enricher.getUniqueTag(), "x");
@@ -106,12 +106,12 @@ public class BasicEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSameUniqueTagEnricherNotAddedTwice() throws Exception {
-        app.addEnricher(EnricherSpec.create(MyEnricher.class).tag(99).uniqueTag("x"));
-        app.addEnricher(EnricherSpec.create(MyEnricher.class).tag(94).uniqueTag("x"));
+        app.enrichers().add(EnricherSpec.create(MyEnricher.class).tag(99).uniqueTag("x"));
+        app.enrichers().add(EnricherSpec.create(MyEnricher.class).tag(94).uniqueTag("x"));
         
         assertEquals(app.getEnrichers().size(), 1);
         // the more recent one should dominate
-        Enricher enricher = Iterables.getOnlyElement(app.getEnrichers());
+        Enricher enricher = Iterables.getOnlyElement(app.enrichers());
         Assert.assertTrue(enricher.tags().containsTag(94));
         Assert.assertFalse(enricher.tags().containsTag(99));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/enricher/EnricherConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/enricher/EnricherConfigTest.java b/core/src/test/java/org/apache/brooklyn/core/enricher/EnricherConfigTest.java
index 150a09b..fb60abd 100644
--- a/core/src/test/java/org/apache/brooklyn/core/enricher/EnricherConfigTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/enricher/EnricherConfigTest.java
@@ -43,7 +43,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
                 .put("strKey", "aval")
                 .put("intKey", 2)
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "aval");
         assertEquals(enricher.getConfig(MyEnricher.INT_KEY), (Integer)2);
@@ -57,7 +57,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher(MutableMap.builder()
                 .put(differentKey, "aval")
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(differentKey), null);
         assertEquals(enricher.getEnricherType().getConfigKey(differentKey.getName()), null);
@@ -69,7 +69,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
                 .put(MyEnricher.STR_KEY, "aval")
                 .put(MyEnricher.INT_KEY, 2)
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "aval");
         assertEquals(enricher.getConfig(MyEnricher.INT_KEY), (Integer)2);
@@ -82,7 +82,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher(MutableMap.builder()
                 .put(MyEnricher.INT_KEY_WITH_DEFAULT, 0)
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.INT_KEY_WITH_DEFAULT), (Integer)0);
     }
@@ -92,7 +92,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher(MutableMap.builder()
                 .put(MyEnricher.STR_KEY_WITH_DEFAULT, null)
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY_WITH_DEFAULT), null);
     }
@@ -102,7 +102,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher();
         enricher.config().set(MyEnricher.STR_KEY, "aval");
         enricher.config().set(MyEnricher.INT_KEY, 2);
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "aval");
         assertEquals(enricher.getConfig(MyEnricher.INT_KEY), (Integer)2);
@@ -114,7 +114,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
                 .put(MyEnricher.STR_KEY, "aval")
                 .build());
         enricher.config().set(MyEnricher.STR_KEY, "diffval");
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "diffval");
     }
@@ -124,7 +124,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher(MutableMap.builder()
                 .put(MyEnricher.STR_KEY, "origval")
                 .build());
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         try {
             enricher.config().set(MyEnricher.STR_KEY,"newval");
@@ -139,7 +139,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigReturnsDefaultValueIfNotSet() throws Exception {
         MyEnricher enricher = new MyEnricher();
-        app.addEnricher(enricher);
+        app.enrichers().add(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY_WITH_DEFAULT), "str key default");
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/AttributeMapTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/AttributeMapTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/AttributeMapTest.java
index 21529c8..95d9bad 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/AttributeMapTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/AttributeMapTest.java
@@ -189,7 +189,7 @@ public class AttributeMapTest {
         AttributeSensor<Integer> childSensor = Sensors.newIntegerSensor("a.b", "");
         
         final RecordingSensorEventListener<Object> listener = new RecordingSensorEventListener<>();
-        entity.subscribe(entity, sensor, listener);
+        entity.subscriptions().subscribe(entity, sensor, listener);
         
         map.modify(childSensor, Functions.constant(Maybe.<Integer>absent()));
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/AttributeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/AttributeTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/AttributeTest.java
index 68fe527..8c4c3a0 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/AttributeTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/AttributeTest.java
@@ -45,7 +45,7 @@ public class AttributeTest {
 
     @Test
     public void canGetAndSetAttribute() {
-        e.setAttribute(COLOR, "red");
+        e.sensors().set(COLOR, "red");
         assertEquals(e.getAttribute(COLOR), "red");
     }
     
@@ -60,7 +60,7 @@ public class AttributeTest {
         assertNull(e.getAttributeByNameParts(COLOR.getNameParts()));
         
         // Once set, returns val
-        e.setAttribute(COLOR, "red");
+        e.sensors().set(COLOR, "red");
         assertEquals(e.getAttributeByNameParts(COLOR.getNameParts()), "red");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/ConfigEntityInheritanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ConfigEntityInheritanceTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ConfigEntityInheritanceTest.java
index afcd340..0334312 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ConfigEntityInheritanceTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ConfigEntityInheritanceTest.java
@@ -170,9 +170,9 @@ public class ConfigEntityInheritanceTest {
 
     @Test
     public void testConfigKeysInheritance() throws Exception {
-        app.setConfig(MyEntityWithPartiallyHeritableConfig.HERITABLE, "heritable");
-        app.setConfig(MyEntityWithPartiallyHeritableConfig.UNINHERITABLE, "uninheritable");
-        app.setConfig(MyEntityWithPartiallyHeritableConfig.ALWAYS_HERITABLE, "always_heritable");
+        app.config().set(MyEntityWithPartiallyHeritableConfig.HERITABLE, "heritable");
+        app.config().set(MyEntityWithPartiallyHeritableConfig.UNINHERITABLE, "uninheritable");
+        app.config().set(MyEntityWithPartiallyHeritableConfig.ALWAYS_HERITABLE, "always_heritable");
         Entity child = app.addChild(EntitySpec.create(MyEntityWithPartiallyHeritableConfig.class));
         
         Assert.assertNotNull(child.getConfig(MyEntityWithPartiallyHeritableConfig.HERITABLE));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/DependentConfigurationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/DependentConfigurationTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/DependentConfigurationTest.java
index 45fac8f..acd3a7d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/DependentConfigurationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/DependentConfigurationTest.java
@@ -114,7 +114,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
         final Task<String> t = submit(DependentConfiguration.attributeWhenReady(entity, TestEntity.NAME));
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.NAME, "myval");
+        entity.sensors().set(TestEntity.NAME, "myval");
         assertEquals(assertDoneEventually(t), "myval");
     }
 
@@ -122,10 +122,10 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
     public void testAttributeWhenReadyWithPredicate() throws Exception {
         final Task<String> t = submit(DependentConfiguration.attributeWhenReady(entity, TestEntity.NAME, Predicates.equalTo("myval2")));
         
-        entity.setAttribute(TestEntity.NAME, "myval");
+        entity.sensors().set(TestEntity.NAME, "myval");
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.NAME, "myval2");
+        entity.sensors().set(TestEntity.NAME, "myval2");
         assertEquals(assertDoneEventually(t), "myval2");
     }
 
@@ -134,7 +134,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
         final Task<String> t = submit(DependentConfiguration.valueWhenAttributeReady(entity, TestEntity.SEQUENCE, Functions.toStringFunction()));
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.SEQUENCE, 1);
+        entity.sensors().set(TestEntity.SEQUENCE, 1);
         assertEquals(assertDoneEventually(t), "1");
     }
 
@@ -147,7 +147,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.SEQUENCE, 1);
+        entity.sensors().set(TestEntity.SEQUENCE, 1);
         assertEquals(assertDoneEventually(t), "1");
     }
 
@@ -163,7 +163,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.SEQUENCE, 1);
+        entity.sensors().set(TestEntity.SEQUENCE, 1);
         assertEquals(assertDoneEventually(t), "1");
     }
 
@@ -175,7 +175,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
                 .build());
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.NAME, "myval");
+        entity.sensors().set(TestEntity.NAME, "myval");
         assertEquals(assertDoneEventually(t), "myval");
     }
 
@@ -188,10 +188,10 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
         assertNotDoneContinually(t);
 
-        entity2.setAttribute(TestEntity.SEQUENCE, 321);
+        entity2.sensors().set(TestEntity.SEQUENCE, 321);
         assertNotDoneContinually(t);
 
-        entity2.setAttribute(TestEntity.SEQUENCE, 1);
+        entity2.sensors().set(TestEntity.SEQUENCE, 1);
         try {
             assertDoneEventually(t);
             fail();
@@ -212,10 +212,10 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
         assertNotDoneContinually(t);
 
-        entity2.setAttribute(TestEntity.SEQUENCE, 321);
+        entity2.sensors().set(TestEntity.SEQUENCE, 321);
         assertNotDoneContinually(t);
 
-        entity2.setAttribute(TestEntity.SEQUENCE, 1);
+        entity2.sensors().set(TestEntity.SEQUENCE, 1);
         try {
             assertDoneEventually(t);
             fail();
@@ -226,7 +226,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testAttributeWhenReadyWithAbortFailsWhenAbortConditionAlreadyHolds() throws Exception {
-        entity2.setAttribute(TestEntity.SEQUENCE, 1);
+        entity2.sensors().set(TestEntity.SEQUENCE, 1);
         final Task<String> t = submit(DependentConfiguration.builder()
                 .attributeWhenReady(entity, TestEntity.NAME)
                 .abortIf(entity2, TestEntity.SEQUENCE, Predicates.equalTo(1))
@@ -241,7 +241,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testAttributeWhenReadyWithAbortFailsWhenAbortConditionAlreadyHoldsWaitingNow() throws Exception {
-        entity2.setAttribute(TestEntity.SEQUENCE, 1);
+        entity2.sensors().set(TestEntity.SEQUENCE, 1);
         final Task<String> t = submit(new Callable<String>() {
             public String call() {
                 return DependentConfiguration.builder()
@@ -267,7 +267,7 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
                         .runNow();
             }
         });
-        entity.setAttribute(TestEntity.NAME, "myentity");
+        entity.sensors().set(TestEntity.NAME, "myentity");
         assertDoneEventually(t);
         assertEquals(t.get(), "myentity");
     }
@@ -325,10 +325,10 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
                 .build());
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.NAME, "myval");
+        entity.sensors().set(TestEntity.NAME, "myval");
         assertNotDoneContinually(t);
         
-        entity2.setAttribute(TestEntity.NAME, "myval2");
+        entity2.sensors().set(TestEntity.NAME, "myval2");
         assertEquals(ImmutableSet.copyOf(assertDoneEventually(t)), ImmutableSet.of("myval", "myval2"));
     }
 
@@ -338,13 +338,13 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
                 .attributeWhenReadyFromMultiple(ImmutableList.of(entity, entity2), TestEntity.NAME, StringPredicates.startsWith("myval"))
                 .build());
         
-        entity.setAttribute(TestEntity.NAME, "wrongval");
-        entity2.setAttribute(TestEntity.NAME, "wrongval2");
+        entity.sensors().set(TestEntity.NAME, "wrongval");
+        entity2.sensors().set(TestEntity.NAME, "wrongval2");
         assertNotDoneContinually(t);
         
-        entity.setAttribute(TestEntity.NAME, "myval");
+        entity.sensors().set(TestEntity.NAME, "myval");
         assertNotDoneContinually(t);
-        entity2.setAttribute(TestEntity.NAME, "myval2");
+        entity2.sensors().set(TestEntity.NAME, "myval2");
         assertEquals(ImmutableSet.copyOf(assertDoneEventually(t)), ImmutableSet.of("myval", "myval2"));
     }
 
@@ -364,8 +364,8 @@ public class DependentConfigurationTest extends BrooklynAppUnitTestSupport {
                         }})
                 .build());
         
-        entity.setAttribute(TestEntity.SEQUENCE, 1);
-        entity2.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 1);
+        entity2.sensors().set(TestEntity.SEQUENCE, 2);
         assertEquals(assertDoneEventually(t), "1,2");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntitiesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntitiesTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntitiesTest.java
index 071d6d8..b5d2099 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntitiesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntitiesTest.java
@@ -65,13 +65,13 @@ public class EntitiesTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testAttributeSupplier() throws Exception {
-        entity.setAttribute(TestEntity.NAME, "myname");
+        entity.sensors().set(TestEntity.NAME, "myname");
         assertEquals(Entities.attributeSupplier(entity, TestEntity.NAME).get(), "myname");
     }
     
     @Test
     public void testAttributeSupplierUsingTuple() throws Exception {
-        entity.setAttribute(TestEntity.NAME, "myname");
+        entity.sensors().set(TestEntity.NAME, "myname");
         assertEquals(Entities.attributeSupplier(EntityAndAttribute.supplier(entity, TestEntity.NAME)).get(), "myname");
     }
     
@@ -94,7 +94,7 @@ public class EntitiesTest extends BrooklynAppUnitTestSupport {
                 }
             });
             
-            entity.setAttribute(TestEntity.NAME, "myname");
+            entity.sensors().set(TestEntity.NAME, "myname");
             t.join(TIMEOUT_MS);
             assertFalse(t.isAlive());
             assertEquals(result.get(), "myname");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityFunctionsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityFunctionsTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityFunctionsTest.java
index b120d98..7b68d28 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityFunctionsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityFunctionsTest.java
@@ -47,14 +47,14 @@ public class EntityFunctionsTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testAttribute() throws Exception {
-        entity.setAttribute(TestEntity.NAME, "myname");
+        entity.sensors().set(TestEntity.NAME, "myname");
         assertEquals(EntityFunctions.attribute(TestEntity.NAME).apply(entity), "myname");
         assertNull(EntityFunctions.attribute(TestEntity.SEQUENCE).apply(entity));
     }
     
     @Test
     public void testConfig() throws Exception {
-        entity.setConfig(TestEntity.CONF_NAME, "myname");
+        entity.config().set(TestEntity.CONF_NAME, "myname");
         assertEquals(EntityFunctions.config(TestEntity.CONF_NAME).apply(entity), "myname");
         assertNull(EntityFunctions.config(TestEntity.CONF_OBJECT).apply(entity));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityLocationsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityLocationsTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityLocationsTest.java
index 3aa68b6..22881d6 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityLocationsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityLocationsTest.java
@@ -51,8 +51,8 @@ public class EntityLocationsTest extends BrooklynAppUnitTestSupport {
         
         final RecordingSensorEventListener<Object> addedEvents = new RecordingSensorEventListener<>();
         final RecordingSensorEventListener<Object> removedEvents = new RecordingSensorEventListener<>();
-        app.subscribe(app, AbstractEntity.LOCATION_ADDED, addedEvents);
-        app.subscribe(app, AbstractEntity.LOCATION_REMOVED, removedEvents);
+        app.subscriptions().subscribe(app, AbstractEntity.LOCATION_ADDED, addedEvents);
+        app.subscriptions().subscribe(app, AbstractEntity.LOCATION_REMOVED, removedEvents);
 
         // Add first location
         app.addLocations(ImmutableList.of(l));
@@ -85,8 +85,8 @@ public class EntityLocationsTest extends BrooklynAppUnitTestSupport {
         
         final RecordingSensorEventListener<Object> addedEvents = new RecordingSensorEventListener<>();
         final RecordingSensorEventListener<Object> removedEvents = new RecordingSensorEventListener<>();
-        app.subscribe(app, AbstractEntity.LOCATION_ADDED, addedEvents);
-        app.subscribe(app, AbstractEntity.LOCATION_REMOVED, removedEvents);
+        app.subscriptions().subscribe(app, AbstractEntity.LOCATION_ADDED, addedEvents);
+        app.subscriptions().subscribe(app, AbstractEntity.LOCATION_REMOVED, removedEvents);
 
         // Add first location
         app.addLocations(ImmutableList.of(l, l));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityPreManagementTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityPreManagementTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityPreManagementTest.java
index e10c703..043de6d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityPreManagementTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityPreManagementTest.java
@@ -68,7 +68,7 @@ public class EntityPreManagementTest {
     public void testSetSensorBeforeManaged() {
         TestEntity e = entityManager.createEntity(EntitySpec.create(TestEntity.class));
 
-        e.setAttribute(Attributes.HOSTNAME, "martian.martian");
+        e.sensors().set(Attributes.HOSTNAME, "martian.martian");
         Assert.assertEquals(e.getAttribute(Attributes.HOSTNAME), "martian.martian");
         
         Assert.assertFalse(e.getManagementSupport().isManagementContextReal());
@@ -79,11 +79,11 @@ public class EntityPreManagementTest {
         TestEntity e = entityManager.createEntity(EntitySpec.create(TestEntity.class));
         final List events = new ArrayList();
         
-        e.addPolicy(new AbstractPolicy() {
+        e.policies().add(new AbstractPolicy() {
             @Override
             public void setEntity(EntityLocal entity) {
                 super.setEntity(entity);
-                subscribe(entity, Attributes.HOSTNAME, new SensorEventListener() {
+                subscriptions().subscribe(entity, Attributes.HOSTNAME, new SensorEventListener() {
                     @Override
                     public void onEvent(SensorEvent event) {
                         events.add(event);
@@ -92,7 +92,7 @@ public class EntityPreManagementTest {
             }
         });
         
-        e.setAttribute(Attributes.HOSTNAME, "martian.martian");
+        e.sensors().set(Attributes.HOSTNAME, "martian.martian");
         Assert.assertEquals(e.getAttribute(Attributes.HOSTNAME), "martian.martian");
         
         if (!events.isEmpty()) Assert.fail("Shouldn't have events yet: "+events);
@@ -115,11 +115,11 @@ public class EntityPreManagementTest {
         app = entityManager.createEntity(EntitySpec.create(TestApplication.class));
         final List events = new ArrayList();
         
-        app.addPolicy(new AbstractPolicy() {
+        app.policies().add(new AbstractPolicy() {
             @Override
             public void setEntity(EntityLocal entity) {
                 super.setEntity(entity);
-                subscribe(entity, Attributes.HOSTNAME, new SensorEventListener() {
+                subscriptions().subscribe(entity, Attributes.HOSTNAME, new SensorEventListener() {
                     @Override
                     public void onEvent(SensorEvent event) {
                         events.add(event);
@@ -128,7 +128,7 @@ public class EntityPreManagementTest {
             }
         });
         
-        app.setAttribute(Attributes.HOSTNAME, "martian.martian");
+        app.sensors().set(Attributes.HOSTNAME, "martian.martian");
         Assert.assertEquals(app.getAttribute(Attributes.HOSTNAME), "martian.martian");
         
         if (!events.isEmpty()) Assert.fail("Shouldn't have events yet: "+events);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityPredicatesTest.java
index dbd2972..6db1a55 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityPredicatesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityPredicatesTest.java
@@ -64,14 +64,14 @@ public class EntityPredicatesTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testAttributeEqualTo() throws Exception {
-        entity.setAttribute(TestEntity.NAME, "myname");
+        entity.sensors().set(TestEntity.NAME, "myname");
         assertTrue(EntityPredicates.attributeEqualTo(TestEntity.NAME, "myname").apply(entity));
         assertFalse(EntityPredicates.attributeEqualTo(TestEntity.NAME, "wrongname").apply(entity));
     }
     
     @Test
     public void testConfigEqualTo() throws Exception {
-        entity.setConfig(TestEntity.CONF_NAME, "myname");
+        entity.config().set(TestEntity.CONF_NAME, "myname");
         assertTrue(EntityPredicates.configEqualTo(TestEntity.CONF_NAME, "myname").apply(entity));
         assertFalse(EntityPredicates.configEqualTo(TestEntity.CONF_NAME, "wrongname").apply(entity));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityRegistrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityRegistrationTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityRegistrationTest.java
index 018b82c..c373816 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityRegistrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityRegistrationTest.java
@@ -58,11 +58,11 @@ public class EntityRegistrationTest extends BrooklynAppUnitTestSupport {
         added = Lists.newCopyOnWriteArrayList();
         removed = Lists.newCopyOnWriteArrayList();
         
-        app.subscribe(app, AbstractEntity.CHILD_ADDED, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(app, AbstractEntity.CHILD_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 added.add(event.getValue());
             }});
-        app.subscribe(app, AbstractEntity.CHILD_REMOVED, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(app, AbstractEntity.CHILD_REMOVED, new SensorEventListener<Entity>() {
                 @Override public void onEvent(SensorEvent<Entity> event) {
                     removed.add(event.getValue());
                 }});


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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntitySpecTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntitySpecTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntitySpecTest.java
index 1fec2e8..0f57558 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntitySpecTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntitySpecTest.java
@@ -89,7 +89,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
                         .configure(MyPolicy.CONF1, "myconf1val")
                         .configure("myfield", "myfieldval")));
         
-        Policy policy = Iterables.getOnlyElement(entity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(entity.policies());
         assertTrue(policy instanceof MyPolicy, "policy="+policy);
         assertEquals(policy.getDisplayName(), "mypolicyname");
         assertEquals(policy.getConfig(MyPolicy.CONF1), "myconf1val");
@@ -101,7 +101,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
         entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
                 .policy(policy));
         
-        assertEquals(Iterables.getOnlyElement(entity.getPolicies()), policy);
+        assertEquals(Iterables.getOnlyElement(entity.policies()), policy);
     }
     
     @Test
@@ -112,7 +112,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
                         .configure(MyEnricher.CONF1, "myconf1val")
                         .configure("myfield", "myfieldval")));
         
-        Enricher enricher = Iterables.getOnlyElement(entity.getEnrichers());
+        Enricher enricher = Iterables.getOnlyElement(entity.enrichers());
         assertTrue(enricher instanceof MyEnricher, "enricher="+enricher);
         assertEquals(enricher.getDisplayName(), "myenrichername");
         assertEquals(enricher.getConfig(MyEnricher.CONF1), "myconf1val");
@@ -124,7 +124,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
         entity = app.createAndManageChild(EntitySpec.create(TestEntity.class, TestEntityNoEnrichersImpl.class)
                 .enricher(enricher));
         
-        assertEquals(Iterables.getOnlyElement(entity.getEnrichers()), enricher);
+        assertEquals(Iterables.getOnlyElement(entity.enrichers()), enricher);
     }
     
     @Test
@@ -134,7 +134,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
                 .member(entity));
         
         Asserts.assertEqualsIgnoringOrder(group.getMembers(), ImmutableSet.of(entity));
-        Asserts.assertEqualsIgnoringOrder(entity.getGroups(), ImmutableSet.of(group));
+        Asserts.assertEqualsIgnoringOrder(entity.groups(), ImmutableSet.of(group));
     }
     
     @Test
@@ -144,7 +144,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
                 .group(group));
         
         Asserts.assertEqualsIgnoringOrder(group.getMembers(), ImmutableSet.of(entity));
-        Asserts.assertEqualsIgnoringOrder(entity.getGroups(), ImmutableSet.of(group));
+        Asserts.assertEqualsIgnoringOrder(entity.groups(), ImmutableSet.of(group));
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntitySubscriptionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntitySubscriptionTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntitySubscriptionTest.java
index 38848ef..3d61a99 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntitySubscriptionTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntitySubscriptionTest.java
@@ -79,9 +79,9 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscriptionReceivesEvents() {
-        entity.subscribe(observedEntity, TestEntity.SEQUENCE, listener);
-        entity.subscribe(observedEntity, TestEntity.NAME, listener);
-        entity.subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
         
         otherEntity.sensors().set(TestEntity.SEQUENCE, 123);
         observedEntity.sensors().set(TestEntity.SEQUENCE, 123);
@@ -99,7 +99,7 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscriptionToAllReceivesEvents() {
-        entity.subscribe(null, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribe(null, TestEntity.SEQUENCE, listener);
         
         observedEntity.sensors().set(TestEntity.SEQUENCE, 123);
         otherEntity.sensors().set(TestEntity.SEQUENCE, 456);
@@ -114,7 +114,7 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscribeToChildrenReceivesEvents() {
-        entity.subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener);
         
         observedChildEntity.sensors().set(TestEntity.SEQUENCE, 123);
         observedEntity.sensors().set(TestEntity.SEQUENCE, 456);
@@ -128,7 +128,7 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscribeToChildrenReceivesEventsForDynamicallyAddedChildren() {
-        entity.subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener);
         
         final TestEntity observedChildEntity2 = observedEntity.createAndManageChild(EntitySpec.create(TestEntity.class));
         observedChildEntity2.sensors().set(TestEntity.SEQUENCE, 123);
@@ -142,10 +142,10 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscribeToMembersReceivesEvents() {
-        entity.subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
         
         observedMemberEntity.sensors().set(TestEntity.SEQUENCE, 123);
-        ((EntityLocal)observedGroup).sensors().set(TestEntity.SEQUENCE, 456);
+        observedGroup.sensors().set(TestEntity.SEQUENCE, 456);
         
         Asserts.succeedsEventually(new Runnable() {
             @Override public void run() {
@@ -156,7 +156,7 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testSubscribeToMembersReceivesEventsForDynamicallyAddedMembers() {
-        entity.subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
         
         final TestEntity observedMemberEntity2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         observedGroup.addMember(observedMemberEntity2);
@@ -171,7 +171,7 @@ public class EntitySubscriptionTest {
     
     @Test(groups="Integration")
     public void testSubscribeToMembersIgnoresEventsForDynamicallyRemovedMembers() {
-        entity.subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener);
         
         observedGroup.removeMember(observedMemberEntity);
         
@@ -185,11 +185,11 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testUnsubscribeRemovesAllSubscriptionsForThatEntity() {
-        entity.subscribe(observedEntity, TestEntity.SEQUENCE, listener);
-        entity.subscribe(observedEntity, TestEntity.NAME, listener);
-        entity.subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
-        entity.subscribe(otherEntity, TestEntity.SEQUENCE, listener);
-        entity.unsubscribe(observedEntity);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
+        entity.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().unsubscribe(observedEntity);
         
         observedEntity.sensors().set(TestEntity.SEQUENCE, 123);
         observedEntity.sensors().set(TestEntity.NAME, "myname");
@@ -205,11 +205,11 @@ public class EntitySubscriptionTest {
     
     @Test
     public void testUnsubscribeUsingHandleStopsEvents() {
-        SubscriptionHandle handle1 = entity.subscribe(observedEntity, TestEntity.SEQUENCE, listener);
-        SubscriptionHandle handle2 = entity.subscribe(observedEntity, TestEntity.NAME, listener);
-        SubscriptionHandle handle3 = entity.subscribe(otherEntity, TestEntity.SEQUENCE, listener);
+        SubscriptionHandle handle1 = entity.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener);
+        SubscriptionHandle handle2 = entity.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener);
+        SubscriptionHandle handle3 = entity.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener);
         
-        entity.unsubscribe(observedEntity, handle2);
+        entity.subscriptions().unsubscribe(observedEntity, handle2);
         
         observedEntity.sensors().set(TestEntity.SEQUENCE, 123);
         observedEntity.sensors().set(TestEntity.NAME, "myname");
@@ -226,7 +226,7 @@ public class EntitySubscriptionTest {
     @Test
     public void testSubscriptionReceivesEventsInOrder() {
         final int NUM_EVENTS = 100;
-        entity.subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener);
 
         for (int i = 0; i < NUM_EVENTS; i++) {
             observedEntity.sensors().emit(TestEntity.MY_NOTIF, i);
@@ -263,8 +263,8 @@ public class EntitySubscriptionTest {
         observedEntity.sensors().set(TestEntity.SEQUENCE, 123);
         observedEntity.sensors().set(TestEntity.NAME, "myname");
         
-        entity.subscribe(observedEntity, TestEntity.SEQUENCE, listener);
-        entity.subscribe(observedEntity, TestEntity.NAME, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener);
+        entity.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener);
         
         Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), new Runnable() {
             @Override public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/EntityTypeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityTypeTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityTypeTest.java
index 130327f..6f31b6e 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityTypeTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityTypeTest.java
@@ -196,7 +196,7 @@ public class EntityTypeTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testAddSensorValueThroughEntity() throws Exception{
-        entity.setAttribute(TEST_SENSOR, "abc");
+        entity.sensors().set(TEST_SENSOR, "abc");
         assertEquals(entity.getEntityType().getSensors(), 
                 ImmutableSet.builder().addAll(DEFAULT_SENSORS).add(TEST_SENSOR).build());
         
@@ -205,7 +205,7 @@ public class EntityTypeTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testRemoveSensorThroughEntity() throws Exception{
-        entity.setAttribute(TEST_SENSOR, "abc");
+        entity.sensors().set(TEST_SENSOR, "abc");
         entity.removeAttribute(TEST_SENSOR);
         assertFalse(entity.getEntityType().getSensors().contains(TEST_SENSOR), "sensors="+entity.getEntityType().getSensors()); 
         assertEquals(entity.getAttribute(TEST_SENSOR), null);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
index 10b85bb..a46335b 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.brooklyn.api.entity.EntitySpec;
@@ -67,11 +68,11 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
         added = Lists.newCopyOnWriteArrayList();
         removed = Lists.newCopyOnWriteArrayList();
         
-        app.subscribe(entity, AbstractEntity.POLICY_ADDED, new SensorEventListener<PolicyDescriptor>() {
+        app.subscriptions().subscribe(entity, AbstractEntity.POLICY_ADDED, new SensorEventListener<PolicyDescriptor>() {
             @Override public void onEvent(SensorEvent<PolicyDescriptor> event) {
                 added.add(event.getValue());
             }});
-        app.subscribe(entity, AbstractEntity.POLICY_REMOVED, new SensorEventListener<PolicyDescriptor>() {
+        app.subscriptions().subscribe(entity, AbstractEntity.POLICY_REMOVED, new SensorEventListener<PolicyDescriptor>() {
                 @Override public void onEvent(SensorEvent<PolicyDescriptor> event) {
                     removed.add(event.getValue());
                 }});
@@ -79,7 +80,7 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testGetPoliciesIsInitiallyEmpty() {
-        assertEquals(entity.getPolicies(), ImmutableList.of());
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of());
     }
 
     @Test(expectedExceptions = { UnsupportedOperationException.class })
@@ -88,48 +89,57 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
         fail();
     }
 
+    @Test(expectedExceptions = { UnsupportedOperationException.class })
+    public void testPoliciesIteratorReturnsImmutable() {
+        entity.policies().add(policy1);
+        Iterator<Policy> iterator = entity.policies().iterator();
+        iterator.next();
+        iterator.remove();
+        fail();
+    }
+
     @Test
     public void testAddAndRemovePolicies() {
-        entity.addPolicy(policy1);
-        assertEquals(entity.getPolicies(), ImmutableList.of(policy1));
+        entity.policies().add(policy1);
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy1));
         assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy1)));
         
-        entity.addPolicy(policy2);
-        assertEquals(entity.getPolicies(), ImmutableList.of(policy1, policy2));
+        entity.policies().add(policy2);
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy1, policy2));
         assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy1), new PolicyDescriptor(policy2)));
         
-        entity.removePolicy(policy1);
-        assertEquals(entity.getPolicies(), ImmutableList.of(policy2));
+        entity.policies().remove(policy1);
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy2));
         assertEqualsEventually(removed, ImmutableList.of(new PolicyDescriptor(policy1)));
         
-        entity.removePolicy(policy2);
-        assertEquals(entity.getPolicies(), ImmutableList.of());
+        entity.policies().remove(policy2);
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of());
         assertEqualsEventually(removed, ImmutableList.of(new PolicyDescriptor(policy1), new PolicyDescriptor(policy2)));
     }
 
     @Test
     public void testAddPolicySpec() {
-        EntitySpecTest.MyPolicy policy = entity.addPolicy(PolicySpec.create(EntitySpecTest.MyPolicy.class));
+        EntitySpecTest.MyPolicy policy = entity.policies().add(PolicySpec.create(EntitySpecTest.MyPolicy.class));
         assertNotNull(policy);
-        assertEquals(entity.getPolicies(), ImmutableList.of(policy));
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy));
         assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy)));
     }
     
     @Test
     public void testAddEnricherSpec() {
         TestEntity entity2 = app.createAndManageChild(EntitySpec.create(TestEntity.class, TestEntityNoEnrichersImpl.class));
-        EntitySpecTest.MyEnricher enricher = entity2.addEnricher(EnricherSpec.create(EntitySpecTest.MyEnricher.class));
+        EntitySpecTest.MyEnricher enricher = entity2.enrichers().add(EnricherSpec.create(EntitySpecTest.MyEnricher.class));
         assertNotNull(enricher);
-        assertEquals(entity2.getEnrichers(), ImmutableList.of(enricher));
+        assertEquals(ImmutableList.copyOf(entity2.enrichers()), ImmutableList.of(enricher));
     }
 
     @Test
     public void testRemoveAllPolicies() {
-        entity.addPolicy(policy1);
-        entity.addPolicy(policy2);
-        entity.removeAllPolicies();
+        entity.policies().add(policy1);
+        entity.policies().add(policy2);
+        entity.policies().removeAllPolicies();
         
-        assertEquals(entity.getPolicies(), ImmutableList.of());
+        assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of());
         assertCollectionEqualsEventually(removed, ImmutableSet.of(new PolicyDescriptor(policy1), new PolicyDescriptor(policy2)));
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/BasicDownloadsRegistryTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/BasicDownloadsRegistryTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/BasicDownloadsRegistryTest.java
index 67b1224..f2bf364 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/BasicDownloadsRegistryTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/BasicDownloadsRegistryTest.java
@@ -67,8 +67,8 @@ public class BasicDownloadsRegistryTest {
 
     @Test
     public void testUsesDownloadUrlAttribute() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
-        entity.setAttribute(Attributes.DOWNLOAD_URL, "acme.com/version=${version},type=${type},simpletype=${simpletype}");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.sensors().set(Attributes.DOWNLOAD_URL, "acme.com/version=${version},type=${type},simpletype=${simpletype}");
         String expectedFilename = String.format("version=%s,type=%s,simpletype=%s", "myversion", TestEntity.class.getName(), "TestEntity");
         
         String expectedLocalRepo = String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", "TestEntity", "myversion", expectedFilename);
@@ -79,8 +79,8 @@ public class BasicDownloadsRegistryTest {
     
     @Test
     public void testUsesDownloadAddonUrlsAttribute() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myentityversion");
-        entity.setAttribute(Attributes.DOWNLOAD_ADDON_URLS, ImmutableMap.of("myaddon", "acme.com/addon=${addon},version=${addonversion},type=${type},simpletype=${simpletype}"));
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myentityversion");
+        entity.sensors().set(Attributes.DOWNLOAD_ADDON_URLS, ImmutableMap.of("myaddon", "acme.com/addon=${addon},version=${addonversion},type=${type},simpletype=${simpletype}"));
         String expectedFilename = String.format("addon=%s,version=%s,type=%s,simpletype=%s", "myaddon", "myaddonversion", TestEntity.class.getName(), "TestEntity");
         
         String expectedLocalRepo = String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", "TestEntity", "myentityversion", expectedFilename);
@@ -92,7 +92,7 @@ public class BasicDownloadsRegistryTest {
     
     @Test
     public void testDefaultResolverSubstitutesDownloadUrlFailsIfVersionMissing() throws Exception {
-        entity.setAttribute(Attributes.DOWNLOAD_URL, "version=${version}");
+        entity.sensors().set(Attributes.DOWNLOAD_URL, "version=${version}");
         try {
             DownloadResolver result = managementContext.getEntityDownloadsManager().newDownloader(driver);
             fail("Should have failed, but got "+result);
@@ -106,8 +106,8 @@ public class BasicDownloadsRegistryTest {
         BrooklynProperties managementProperties = managementContext.getBrooklynProperties();
         managementProperties.put("brooklyn.downloads.all.url", "http://fromprops/${version}.allprimary");
         managementProperties.put("brooklyn.downloads.all.fallbackurl", "http://fromfallback/${version}.allfallback");
-        entity.setAttribute(Attributes.DOWNLOAD_URL, "http://fromattrib/${version}.default");
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.sensors().set(Attributes.DOWNLOAD_URL, "http://fromattrib/${version}.default");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         String expectedFilename = "myversion.allprimary";
 
         String expectedLocalRepo = String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", "TestEntity", "myversion", expectedFilename);
@@ -123,8 +123,8 @@ public class BasicDownloadsRegistryTest {
 
     @Test
     public void testInfersFilenameFromDownloadUrl() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
-        entity.setAttribute(Attributes.DOWNLOAD_URL, "http://myhost.com/myfile-${version}.tar.gz");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.sensors().set(Attributes.DOWNLOAD_URL, "http://myhost.com/myfile-${version}.tar.gz");
 
         DownloadResolver actual = managementContext.getEntityDownloadsManager().newDownloader(driver);
         assertEquals(actual.getFilename(), "myfile-myversion.tar.gz");
@@ -132,8 +132,8 @@ public class BasicDownloadsRegistryTest {
     
     @Test
     public void testInfersAddonFilenameFromDownloadUrl() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
-        entity.setAttribute(Attributes.DOWNLOAD_ADDON_URLS, ImmutableMap.of("myaddon", "http://myhost.com/myfile-${addonversion}.tar.gz"));
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.sensors().set(Attributes.DOWNLOAD_ADDON_URLS, ImmutableMap.of("myaddon", "http://myhost.com/myfile-${addonversion}.tar.gz"));
 
         DownloadResolver actual = managementContext.getEntityDownloadsManager().newDownloader(driver, "myaddon", ImmutableMap.of("addonversion", "myaddonversion"));
         assertEquals(actual.getFilename(), "myfile-myaddonversion.tar.gz");
@@ -141,8 +141,8 @@ public class BasicDownloadsRegistryTest {
     
     @Test
     public void testCanOverrideFilenameFromDownloadUrl() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
-        entity.setAttribute(Attributes.DOWNLOAD_URL, "http://myhost.com/download/");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.sensors().set(Attributes.DOWNLOAD_URL, "http://myhost.com/download/");
 
         DownloadResolver actual = managementContext.getEntityDownloadsManager().newDownloader(driver, ImmutableMap.of("filename", "overridden.filename.tar.gz"));
         assertEquals(actual.getFilename(), "overridden.filename.tar.gz");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromLocalRepoTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromLocalRepoTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromLocalRepoTest.java
index e6d1448..ac3e955 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromLocalRepoTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromLocalRepoTest.java
@@ -84,7 +84,7 @@ public class DownloadProducerFromLocalRepoTest {
         // uses default of ${simpletype}-${version}.tar.gz";
         String entityVersion = "myversion";
         String downloadFilename = (entitySimpleType+"-"+entityVersion+".tar.gz").toLowerCase();
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
         assertResolves(String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", entitySimpleType, entityVersion, downloadFilename));
     }
     
@@ -92,7 +92,7 @@ public class DownloadProducerFromLocalRepoTest {
     public void testReturnsFilenameFromDriver() throws Exception {
         String entityVersion = "myversion";
         String filename = "my.file.name";
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
         
         BasicDownloadRequirement req = new BasicDownloadRequirement(driver, ImmutableMap.of("filename", filename));
         assertResolves(req, String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", entitySimpleType, entityVersion, filename));
@@ -104,7 +104,7 @@ public class DownloadProducerFromLocalRepoTest {
         String entityVersion = "myversion";
         String fileSuffix = "mysuffix";
         String expectedFilename = (entitySimpleType+"-"+entityVersion+"."+fileSuffix).toLowerCase();
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, entityVersion);
         
         BasicDownloadRequirement req = new BasicDownloadRequirement(driver, ImmutableMap.of("fileSuffix", fileSuffix));
         assertResolves(req, String.format("file://$HOME/.brooklyn/repository/%s/%s/%s", entitySimpleType, entityVersion, expectedFilename));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromPropertiesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromPropertiesTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromPropertiesTest.java
index 1398357..b0be66d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromPropertiesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadProducerFromPropertiesTest.java
@@ -99,7 +99,7 @@ public class DownloadProducerFromPropertiesTest {
     @Test
     public void testSubstitutionsAppliedToFallbackUrl() throws Exception {
         brooklynProperties.put("brooklyn.downloads.all.fallbackurl", "version=${version}");
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         assertResolves(ImmutableList.<String>of(), ImmutableList.of("version=myversion"));
     }
 
@@ -113,7 +113,7 @@ public class DownloadProducerFromPropertiesTest {
     @Test
     public void testReturnsGlobalUrlWithEntitySubstituions() throws Exception {
         brooklynProperties.put("brooklyn.downloads.all.url", "version=${version}");
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         assertResolves("version=myversion");
     }
     
@@ -121,7 +121,7 @@ public class DownloadProducerFromPropertiesTest {
     public void testEntitySpecificUrlOverridesGlobalUrl() throws Exception {
         brooklynProperties.put("brooklyn.downloads.all.url", "version=${version}");
         brooklynProperties.put("brooklyn.downloads.entity.TestEntity.url", "overridden,version=${version}");
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         assertResolves("overridden,version=myversion", "version=myversion");
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstitutersTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstitutersTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstitutersTest.java
index 822a7a9..608a265 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstitutersTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstitutersTest.java
@@ -56,7 +56,7 @@ public class DownloadSubstitutersTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testSimpleSubstitution() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         String pattern = "mykey1=${mykey1},mykey2=${mykey2}";
         String result = DownloadSubstituters.substitute(pattern, ImmutableMap.of("mykey1", "myval1", "mykey2", "myval2"));
         assertEquals(result, "mykey1=myval1,mykey2=myval2");
@@ -64,7 +64,7 @@ public class DownloadSubstitutersTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSubstitutionIncludesDefaultSubs() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         String pattern = "version=${version},type=${type},simpletype=${simpletype}";
         BasicDownloadRequirement req = new BasicDownloadRequirement(driver);
         String result = DownloadSubstituters.substitute(req, pattern);
@@ -100,7 +100,7 @@ public class DownloadSubstitutersTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSubstitutionUsesOverrides() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         String pattern = "version=${version},mykey1=${mykey1}";
         BasicDownloadRequirement req = new BasicDownloadRequirement(driver, ImmutableMap.of("version", "overriddenversion", "mykey1", "myval1"));
         String result = DownloadSubstituters.substitute(req, pattern);
@@ -121,7 +121,7 @@ public class DownloadSubstitutersTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSubstituter() throws Exception {
-        entity.setConfig(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
+        entity.config().set(BrooklynConfigKeys.SUGGESTED_VERSION, "myversion");
         String baseurl = "version=${version},type=${type},simpletype=${simpletype}";
         Map<String,Object> subs = DownloadSubstituters.getBasicEntitySubstitutions(driver);
         DownloadTargets result = DownloadSubstituters.substituter(Functions.constant(baseurl), Functions.constant(subs)).apply(new BasicDownloadRequirement(driver));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/hello/HelloEntityImpl.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/hello/HelloEntityImpl.java b/core/src/test/java/org/apache/brooklyn/core/entity/hello/HelloEntityImpl.java
index 67ae8a6..5f1a430 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/hello/HelloEntityImpl.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/hello/HelloEntityImpl.java
@@ -25,7 +25,7 @@ public class HelloEntityImpl extends AbstractGroupImpl implements HelloEntity {
 
     @Override
     public void setAge(Integer age) {
-        setAttribute(AGE, age);
-        emit(ITS_MY_BIRTHDAY, null);
+        sensors().set(AGE, age);
+        sensors().emit(ITS_MY_BIRTHDAY, null);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/hello/LocalEntitiesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/hello/LocalEntitiesTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/hello/LocalEntitiesTest.java
index 6d64d2b..9ce3b73 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/hello/LocalEntitiesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/hello/LocalEntitiesTest.java
@@ -174,7 +174,7 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testConfigSetFromAttribute() {
-        app.setConfig(HelloEntity.MY_NAME, "Bob");
+        app.config().set(HelloEntity.MY_NAME, "Bob");
         
         HelloEntity dad = app.createAndManageChild(EntitySpec.create(HelloEntity.class));
         HelloEntity son = entityManager.createEntity(EntitySpec.create(HelloEntity.class).parent(dad));
@@ -186,13 +186,13 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
         assertEquals("Bob", son.getConfig(HelloEntity.MY_NAME));
         
         //attributes are not
-        app.setAttribute(HelloEntity.FAVOURITE_NAME, "Carl");
+        app.sensors().set(HelloEntity.FAVOURITE_NAME, "Carl");
         assertEquals("Carl", app.getAttribute(HelloEntity.FAVOURITE_NAME));
         assertEquals(null, dad.getAttribute(HelloEntity.FAVOURITE_NAME));
     }
     @Test
     public void testConfigSetFromAttributeWhenReady() throws Exception {
-        app.setConfig(HelloEntity.MY_NAME, "Bob");
+        app.config().set(HelloEntity.MY_NAME, "Bob");
         
         final HelloEntity dad = app.createAndManageChild(EntitySpec.create(HelloEntity.class));
         final HelloEntity son = entityManager.createEntity(EntitySpec.create(HelloEntity.class)
@@ -230,7 +230,7 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
             assertEquals(null, sonsConfig[0]);
             for (Task tt : ((EntityInternal)dad).getExecutionContext().getTasks()) { log.info("task at dad:  {}, {}", tt, tt.getStatusDetail(false)); }
             for (Task tt : ((EntityInternal)son).getExecutionContext().getTasks()) { log.info("task at son:  {}, {}", tt, tt.getStatusDetail(false)); }
-            ((EntityLocal)dad).setAttribute(HelloEntity.FAVOURITE_NAME, "Dan");
+            ((EntityLocal)dad).sensors().set(HelloEntity.FAVOURITE_NAME, "Dan");
             if (!s1.tryAcquire(2, TimeUnit.SECONDS)) fail("race mismatch, missing permits");
         }
         log.info("dad: "+dad.getAttribute(HelloEntity.FAVOURITE_NAME));
@@ -244,7 +244,7 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testConfigSetFromAttributeWhenReadyTransformations() {
-        app.setConfig(HelloEntity.MY_NAME, "Bob");
+        app.config().set(HelloEntity.MY_NAME, "Bob");
         
         HelloEntity dad = app.createAndManageChild(EntitySpec.create(HelloEntity.class));
         HelloEntity son = entityManager.createEntity(EntitySpec.create(HelloEntity.class)
@@ -256,13 +256,13 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
         Entities.manage(son);
         
         app.start(ImmutableList.of(loc));
-        ((EntityLocal)dad).setAttribute(HelloEntity.FAVOURITE_NAME, "Dan");
+        ((EntityLocal)dad).sensors().set(HelloEntity.FAVOURITE_NAME, "Dan");
         assertEquals(son.getConfig(HelloEntity.MY_NAME), "Danny");
     }
     
     @Test
     public void testConfigSetFromAttributeWhenReadyNullTransformations() {
-        app.setConfig(HelloEntity.MY_NAME, "Bob");
+        app.config().set(HelloEntity.MY_NAME, "Bob");
         
         HelloEntity dad = app.createAndManageChild(EntitySpec.create(HelloEntity.class));
         // the unnecessary (HelloEntity) cast is required as a work-around to an IntelliJ issue that prevents Brooklyn from launching from the IDE
@@ -275,7 +275,7 @@ public class LocalEntitiesTest extends BrooklynAppUnitTestSupport {
         Entities.manage(son);
         
         app.start(ImmutableList.of(loc));
-        ((EntityLocal)dad).setAttribute(HelloEntity.FAVOURITE_NAME, "Dan");
+        ((EntityLocal)dad).sensors().set(HelloEntity.FAVOURITE_NAME, "Dan");
         assertEquals(son.getConfig(HelloEntity.MY_NAME), "Danny");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapGroovyTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapGroovyTest.groovy b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapGroovyTest.groovy
index 44e67df..0327258 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapGroovyTest.groovy
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapGroovyTest.groovy
@@ -49,7 +49,7 @@ public class ConfigMapGroovyTest {
     @Test
     public void testGetConfigOfTypeClosureReturnsClosure() throws Exception {
         MyOtherEntity entity2 = new MyOtherEntity(app);
-        entity2.setConfig(MyOtherEntity.CLOSURE_KEY, { return "abc" } );
+        entity2.config().set(MyOtherEntity.CLOSURE_KEY, { return "abc" } );
         Entities.manage(entity2);
         
         Closure configVal = entity2.getConfig(MyOtherEntity.CLOSURE_KEY);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapTest.java
index 0a0b3a2..982d689 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/internal/ConfigMapTest.java
@@ -108,8 +108,8 @@ public class ConfigMapTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testConfigSubMap() throws Exception {
-        entity.setConfig(MyBaseEntity.SUPER_KEY_1, "s1");
-        entity.setConfig(MySubEntity.SUB_KEY_2, "s2");
+        entity.config().set(MyBaseEntity.SUPER_KEY_1, "s1");
+        entity.config().set(MySubEntity.SUB_KEY_2, "s2");
         ConfigMap sub = entity.getConfigMap().submap(ConfigPredicates.matchingGlob("sup*"));
         Assert.assertEquals(sub.getConfigRaw(MyBaseEntity.SUPER_KEY_1, true).get(), "s1");
         Assert.assertFalse(sub.getConfigRaw(MySubEntity.SUB_KEY_2, true).isPresent());
@@ -119,13 +119,13 @@ public class ConfigMapTest extends BrooklynAppUnitTestSupport {
     public void testFailFastOnInvalidConfigKeyCoercion() throws Exception {
         MyOtherEntity entity2 = new MyOtherEntity(app);
         ConfigKey<Integer> key = MyOtherEntity.INT_KEY;
-        entity2.setConfig((ConfigKey)key, "thisisnotanint");
+        entity2.config().set((ConfigKey)key, "thisisnotanint");
     }
 
     @Test
     public void testGetConfigOfPredicateTaskReturnsCoercedClosure() throws Exception {
         MyOtherEntity entity2 = new MyOtherEntity(app);
-        entity2.setConfig(MyOtherEntity.PREDICATE_KEY, Predicates.notNull());
+        entity2.config().set(MyOtherEntity.PREDICATE_KEY, Predicates.notNull());
         Entities.manage(entity2);
 
         Predicate predicate = entity2.getConfig(MyOtherEntity.PREDICATE_KEY);
@@ -157,7 +157,7 @@ public class ConfigMapTest extends BrooklynAppUnitTestSupport {
         Future<String> future = executor.submit(work);
 
         final MyOtherEntity entity2 = new MyOtherEntity(app);
-        entity2.setConfig((ConfigKey)MyOtherEntity.STRING_KEY, future);
+        entity2.config().set((ConfigKey)MyOtherEntity.STRING_KEY, future);
         Entities.manage(entity2);
 
         Future<String> getConfigFuture = executor.submit(new Callable<String>() {
@@ -178,7 +178,7 @@ public class ConfigMapTest extends BrooklynAppUnitTestSupport {
         Task<String> task = executionManager.submit(work);
 
         final MyOtherEntity entity2 = new MyOtherEntity(app);
-        entity2.setConfig(MyOtherEntity.STRING_KEY, task);
+        entity2.config().set(MyOtherEntity.STRING_KEY, task);
         Entities.manage(entity2);
 
         Future<String> getConfigFuture = executor.submit(new Callable<String>() {
@@ -200,7 +200,7 @@ public class ConfigMapTest extends BrooklynAppUnitTestSupport {
         Task<String> task = new BasicTask<String>(work);
 
         final MyOtherEntity entity2 = new MyOtherEntity(app);
-        entity2.setConfig(MyOtherEntity.STRING_KEY, task);
+        entity2.config().set(MyOtherEntity.STRING_KEY, task);
         Entities.manage(entity2);
 
         Future<String> getConfigFuture = executor.submit(new Callable<String>() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageLegacyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageLegacyTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageLegacyTest.java
index 11e3ca6..a9f1140 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageLegacyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageLegacyTest.java
@@ -99,8 +99,8 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigCanBeSetOnEntity() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
-        entity.setConfig(strKey, "aval");
-        entity.setConfig(intKey, 2);
+        entity.config().set(strKey, "aval");
+        entity.config().set(intKey, 2);
         Entities.manage(entity);
         
         assertEquals(entity.getConfig(strKey), "aval");
@@ -110,7 +110,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigInheritedFromParent() throws Exception {
         TestEntity parent = new TestEntityImpl(MutableMap.of("config", MutableMap.of(strKey, "aval")), app);
-        parent.setConfig(intKey, 2);
+        parent.config().set(intKey, 2);
         TestEntity entity = new TestEntityImpl(parent);
         Entities.manage(parent);
         
@@ -131,7 +131,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testConfigSetterOverridesParentValue() throws Exception {
         TestEntity parent = new TestEntityImpl(MutableMap.of("config", MutableMap.of(strKey, "aval")), app);
         TestEntity entity = new TestEntityImpl(parent);
-        entity.setConfig(strKey, "diffval");
+        entity.config().set(strKey, "diffval");
         Entities.manage(parent);
         
         assertEquals("diffval", entity.getConfig(strKey));
@@ -140,7 +140,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigSetterOverridesConstructorValue() throws Exception {
         TestEntity entity = new TestEntityImpl(MutableMap.of("config", MutableMap.of(strKey, "aval")), app);
-        entity.setConfig(strKey, "diffval");
+        entity.config().set(strKey, "diffval");
         Entities.manage(entity);
         
         assertEquals("diffval", entity.getConfig(strKey));
@@ -149,7 +149,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigSetOnParentInheritedByExistingChildrenBeforeStarted() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
-        app.setConfig(strKey,"aval");
+        app.config().set(strKey,"aval");
         Entities.manage(entity);
 
         assertEquals("aval", entity.getConfig(strKey));
@@ -159,7 +159,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testConfigInheritedThroughManyGenerations() throws Exception {
         TestEntity e = new TestEntityImpl(app);
         TestEntity e2 = new TestEntityImpl(e);
-        app.setConfig(strKey,"aval");
+        app.config().set(strKey,"aval");
         Entities.manage(e);
 
         assertEquals("aval", app.getConfig(strKey));
@@ -174,7 +174,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
         app.start(ImmutableList.of(new SimulatedLocation()));
         
         try {
-            app.setConfig(strKey,"aval");
+            app.config().set(strKey,"aval");
             fail();
         } catch (IllegalStateException e) {
             // success
@@ -193,7 +193,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testGetFutureConfigWhenReady() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
-        entity.setConfig(TestEntity.CONF_NAME, DependentConfiguration.whenDone(Callables.returning("aval")));
+        entity.config().set(TestEntity.CONF_NAME, DependentConfiguration.whenDone(Callables.returning("aval")));
         Entities.manage(entity);
         app.start(ImmutableList.of(new SimulatedLocation()));
         
@@ -204,7 +204,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testGetFutureConfigBlocksUntilReady() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
         final CountDownLatch latch = new CountDownLatch(1);
-        entity.setConfig(TestEntity.CONF_NAME, DependentConfiguration.whenDone(new Callable<String>() {
+        entity.config().set(TestEntity.CONF_NAME, DependentConfiguration.whenDone(new Callable<String>() {
             @Override public String call() throws Exception {
                 latch.await();
                 return "aval";
@@ -234,12 +234,12 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testGetAttributeWhenReadyConfigReturnsWhenSet() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
         TestEntity entity2 = new TestEntityImpl(app);
-        entity.setConfig(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(entity2, TestEntity.NAME));
+        entity.config().set(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(entity2, TestEntity.NAME));
         Entities.manage(entity);
         Entities.manage(entity2);
         app.start(ImmutableList.of(new SimulatedLocation()));
         
-        entity2.setAttribute(TestEntity.NAME, "aval");
+        entity2.sensors().set(TestEntity.NAME, "aval");
         assertEquals(entity.getConfig(TestEntity.CONF_NAME), "aval");
     }
     
@@ -247,7 +247,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testGetAttributeWhenReadyWithPostProcessingConfigReturnsWhenSet() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
         TestEntity entity2 = new TestEntityImpl(app);
-        entity.setConfig(TestEntity.CONF_NAME, DependentConfiguration.attributePostProcessedWhenReady(entity2, TestEntity.NAME, Predicates.notNull(), new Function<String,String>() {
+        entity.config().set(TestEntity.CONF_NAME, DependentConfiguration.attributePostProcessedWhenReady(entity2, TestEntity.NAME, Predicates.notNull(), new Function<String,String>() {
             @Override public String apply(String input) {
                 return (input == null) ? null : input+"mysuffix";
             }}));
@@ -255,7 +255,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
         Entities.manage(entity2);
         app.start(ImmutableList.of(new SimulatedLocation()));
         
-        entity2.setAttribute(TestEntity.NAME, "aval");
+        entity2.sensors().set(TestEntity.NAME, "aval");
         assertEquals(entity.getConfig(TestEntity.CONF_NAME), "avalmysuffix");
     }
     
@@ -263,7 +263,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
     public void testGetAttributeWhenReadyConfigBlocksUntilSet() throws Exception {
         TestEntity entity = new TestEntityImpl(app);
         final TestEntity entity2 = new TestEntityImpl(app);
-        entity.setConfig(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(entity2, TestEntity.NAME));
+        entity.config().set(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(entity2, TestEntity.NAME));
         Entities.manage(entity);
         Entities.manage(entity2);
         app.start(ImmutableList.of(new SimulatedLocation()));
@@ -274,7 +274,7 @@ public class EntityConfigMapUsageLegacyTest extends BrooklynAppUnitTestSupport {
         Thread t = new Thread(new Runnable() {
             @Override public void run() {
                 Time.sleep(sleepTime);
-                entity2.setAttribute(TestEntity.NAME, "aval");
+                entity2.sensors().set(TestEntity.NAME, "aval");
             }});
         try {
             long starttime = System.currentTimeMillis();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageTest.java
index 9af2919..5dd9a5a 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/internal/EntityConfigMapUsageTest.java
@@ -124,8 +124,8 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigCanBeSetOnEntity() throws Exception {
         TestEntity entity = app.addChild(EntitySpec.create(TestEntity.class));
-        ((EntityLocal)entity).setConfig(strKey, "aval");
-        ((EntityLocal)entity).setConfig(intKey, 2);
+        ((EntityLocal)entity).config().set(strKey, "aval");
+        ((EntityLocal)entity).config().set(intKey, 2);
         Entities.manage(entity);
         
         assertEquals(entity.getConfig(strKey), "aval");
@@ -136,7 +136,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
     public void testConfigInheritedFromParent() throws Exception {
         TestEntity parent = app.addChild(EntitySpec.create(TestEntity.class)
                 .configure(strKey, "aval"));
-        ((EntityLocal)parent).setConfig(intKey, 2);
+        ((EntityLocal)parent).config().set(intKey, 2);
         Entities.manage(parent);
         TestEntity entity = parent.createAndManageChild(EntitySpec.create(TestEntity.class));
         
@@ -159,7 +159,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
         TestEntity parent = app.createAndManageChild(EntitySpec.create(TestEntity.class)
                 .configure(strKey, "aval"));
         TestEntity entity = parent.createAndManageChild(EntitySpec.create(TestEntity.class));
-        ((EntityLocal)entity).setConfig(strKey, "diffval");
+        ((EntityLocal)entity).config().set(strKey, "diffval");
         
         assertEquals(entity.getConfig(strKey), "diffval");
     }
@@ -168,7 +168,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
     public void testConfigSetterOverridesConstructorValue() throws Exception {
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
                 .configure(strKey, "aval"));
-        ((EntityLocal)entity).setConfig(strKey, "diffval");
+        ((EntityLocal)entity).config().set(strKey, "diffval");
         Entities.manage(entity);
         
         assertEquals(entity.getConfig(strKey), "diffval");
@@ -178,7 +178,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
     public void testConfigSetOnParentInheritedByExistingChildrenBeforeStarted() throws Exception {
         TestEntity parent = app.addChild(EntitySpec.create(TestEntity.class));
         TestEntity entity = parent.createChild(EntitySpec.create(TestEntity.class));
-        ((EntityLocal)parent).setConfig(strKey,"aval");
+        ((EntityLocal)parent).config().set(strKey,"aval");
         Entities.manage(entity);
         
         assertEquals(entity.getConfig(strKey), "aval");
@@ -203,7 +203,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
         app.start(locs);
         
         try {
-            ((EntityLocal)app).setConfig(strKey,"aval");
+            ((EntityLocal)app).config().set(strKey,"aval");
             fail();
         } catch (IllegalStateException e) {
             // success
@@ -269,7 +269,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
                 .configure(TestEntity.CONF_NAME, DependentConfiguration.attributeWhenReady(entity, TestEntity.NAME)));
         app.start(locs);
         
-        ((EntityLocal)entity).setAttribute(TestEntity.NAME, "aval");
+        ((EntityLocal)entity).sensors().set(TestEntity.NAME, "aval");
         assertEquals(entity2.getConfig(TestEntity.CONF_NAME), "aval");
     }
     
@@ -283,7 +283,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
                         }})));
         app.start(locs);
         
-        ((EntityLocal)entity).setAttribute(TestEntity.NAME, "aval");
+        ((EntityLocal)entity).sensors().set(TestEntity.NAME, "aval");
         assertEquals(entity2.getConfig(TestEntity.CONF_NAME), "avalmysuffix");
     }
     
@@ -298,7 +298,7 @@ public class EntityConfigMapUsageTest extends BrooklynAppUnitTestSupport {
             public void run() {
                 try {
                     Thread.sleep(10+EARLY_RETURN_GRACE);
-                    ((EntityLocal)entity).setAttribute(TestEntity.NAME, "aval");
+                    ((EntityLocal)entity).sensors().set(TestEntity.NAME, "aval");
                 } catch (InterruptedException e) {
                     throw Exceptions.propagate(e);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogicTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogicTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogicTest.java
index 33d5e1c..ddb4d53 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogicTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogicTest.java
@@ -203,7 +203,7 @@ public class ServiceStateLogicTest extends BrooklynAppUnitTestSupport {
         
         // if we change the state quorum check for the app to be "all are healthy and at least one running" *then* it shows stopped
         // (normally this would be done in `initEnrichers` of course)
-        Enricher appChildrenBasedEnricher = EntityAdjuncts.tryFindWithUniqueTag(app.getEnrichers(), ComputeServiceIndicatorsFromChildrenAndMembers.DEFAULT_UNIQUE_TAG).get();
+        Enricher appChildrenBasedEnricher = EntityAdjuncts.tryFindWithUniqueTag(app.enrichers(), ComputeServiceIndicatorsFromChildrenAndMembers.DEFAULT_UNIQUE_TAG).get();
         appChildrenBasedEnricher.config().set(ComputeServiceIndicatorsFromChildrenAndMembers.RUNNING_QUORUM_CHECK, QuorumChecks.allAndAtLeastOne());
         assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
         
@@ -271,14 +271,14 @@ public class ServiceStateLogicTest extends BrooklynAppUnitTestSupport {
 
         //manually set state to healthy as enrichers are disabled
         EntityInternal child = (EntityInternal) cluster.getMembers().iterator().next();
-        child.setAttribute(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
-        child.setAttribute(Attributes.SERVICE_UP, Boolean.TRUE);
+        child.sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        child.sensors().set(Attributes.SERVICE_UP, Boolean.TRUE);
 
         EntityTestUtils.assertAttributeEqualsEventually(cluster, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
 
         //set untyped service state, the quorum check should be able to handle coercion
         AttributeSensor<Object> stateSensor = Sensors.newSensor(Object.class, Attributes.SERVICE_STATE_ACTUAL.getName());
-        child.setAttribute(stateSensor, "running");
+        child.sensors().set(stateSensor, "running");
 
         EntityTestUtils.assertAttributeEqualsContinually(cluster, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/location/LocationPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/location/LocationPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/core/location/LocationPredicatesTest.java
index 0075ec0..9991931 100644
--- a/core/src/test/java/org/apache/brooklyn/core/location/LocationPredicatesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/location/LocationPredicatesTest.java
@@ -63,7 +63,7 @@ public class LocationPredicatesTest {
     
     @Test
     public void testConfigEqualTo() throws Exception {
-        loc.setConfig(TestEntity.CONF_NAME, "myname");
+        loc.config().set(TestEntity.CONF_NAME, "myname");
         assertTrue(LocationPredicates.configEqualTo(TestEntity.CONF_NAME, "myname").apply(loc));
         assertFalse(LocationPredicates.configEqualTo(TestEntity.CONF_NAME, "wrongname").apply(loc));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/location/access/BrooklynAccessUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/location/access/BrooklynAccessUtilsTest.java b/core/src/test/java/org/apache/brooklyn/core/location/access/BrooklynAccessUtilsTest.java
index 17a24b0..afca28d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/location/access/BrooklynAccessUtilsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/location/access/BrooklynAccessUtilsTest.java
@@ -79,7 +79,7 @@ public class BrooklynAccessUtilsTest extends BrooklynAppUnitTestSupport {
         entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
                 .configure(BrooklynAccessUtils.PORT_FORWARDING_MANAGER, pfm)
                 .location(machine));
-        entity.setAttribute(Attributes.HOSTNAME, privateIp);
+        entity.sensors().set(Attributes.HOSTNAME, privateIp);
 
         assertEquals(BrooklynAccessUtils.getBrooklynAccessibleAddress(entity, privatePort), HostAndPort.fromParts(privateIp, privatePort));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/location/access/PortForwardManagerRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/location/access/PortForwardManagerRebindTest.java b/core/src/test/java/org/apache/brooklyn/core/location/access/PortForwardManagerRebindTest.java
index f14c4a3..3ce1177 100644
--- a/core/src/test/java/org/apache/brooklyn/core/location/access/PortForwardManagerRebindTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/location/access/PortForwardManagerRebindTest.java
@@ -187,8 +187,8 @@ public class PortForwardManagerRebindTest extends RebindTestFixtureWithApp {
             
             if (getConfig(PORT_FORWARD_MANAGER) == null) {
                 PortForwardManager pfm = (PortForwardManager) getManagementContext().getLocationRegistry().resolve("portForwardManager(scope=global)");
-                setAttribute(PORT_FORWARD_MANAGER_LIVE, pfm);
-                setConfig(PORT_FORWARD_MANAGER, pfm);
+                sensors().set(PORT_FORWARD_MANAGER_LIVE, pfm);
+                config().set(PORT_FORWARD_MANAGER, pfm);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerInMemoryTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerInMemoryTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerInMemoryTest.java
index 36e0fa2..84f076f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerInMemoryTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerInMemoryTest.java
@@ -64,7 +64,7 @@ public class HighAvailabilityManagerInMemoryTest extends HighAvailabilityManager
         TestApplication app = TestApplication.Factory.newManagedInstanceForTests(managementContext);
         
         LocalhostMachineProvisioningLocation l = app.newLocalhostProvisioningLocation();
-        l.setConfig(TestEntity.CONF_NAME, "sample1");
+        l.config().set(TestEntity.CONF_NAME, "sample1");
         Assert.assertEquals(l.getConfig(TestEntity.CONF_NAME), "sample1");
         
         SshMachineLocation l2 = l.obtain();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerSplitBrainTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerSplitBrainTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerSplitBrainTest.java
index 6f80a5c..8b34f68 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerSplitBrainTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerSplitBrainTest.java
@@ -327,7 +327,7 @@ public class HighAvailabilityManagerSplitBrainTest {
         // create
         TestApplication app = ApplicationBuilder.newManagedApp(EntitySpec.create(TestApplication.class), n1.mgmt);
         app.start(ImmutableList.<Location>of());
-        app.setAttribute(TestApplication.MY_ATTRIBUTE, "hello");
+        app.sensors().set(TestApplication.MY_ATTRIBUTE, "hello");
         
         assertEquals(n1.mgmt.getApplications().size(), 1);
         assertEquals(n2.mgmt.getApplications().size(), 0);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HotStandbyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HotStandbyTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HotStandbyTest.java
index 1ee7053..2eaebcf 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HotStandbyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/ha/HotStandbyTest.java
@@ -184,7 +184,7 @@ public class HotStandbyTest {
         app.setDisplayName("First App");
         app.start(MutableList.<Location>of());
         app.config().set(TestEntity.CONF_NAME, "first-app");
-        app.setAttribute(TestEntity.SEQUENCE, 3);
+        app.sensors().set(TestEntity.SEQUENCE, 3);
         
         forcePersistNow(n1);
         return app;
@@ -233,7 +233,7 @@ public class HotStandbyTest {
         assertEquals(appRO.getAttribute(TestEntity.SEQUENCE), (Integer)3);
 
         try {
-            ((TestApplication)appRO).setAttribute(TestEntity.SEQUENCE, 4);
+            ((TestApplication)appRO).sensors().set(TestEntity.SEQUENCE, 4);
             Assert.fail("Should not have allowed sensor to be set");
         } catch (Exception e) {
             Assert.assertTrue(e.toString().toLowerCase().contains("read-only"), "Error message did not contain expected text: "+e);
@@ -256,7 +256,7 @@ public class HotStandbyTest {
 
         app.setDisplayName("First App Renamed");
         app.config().set(TestEntity.CONF_NAME, "first-app-renamed");
-        app.setAttribute(TestEntity.SEQUENCE, 4);
+        app.sensors().set(TestEntity.SEQUENCE, 4);
 
         appRO = expectRebindSequenceNumber(n1, n2, app, 4, true);
         assertEquals(n2.mgmt.getEntityManager().getEntities().size(), 1);
@@ -267,7 +267,7 @@ public class HotStandbyTest {
 
         app.setDisplayName("First App");
         app.config().set(TestEntity.CONF_NAME, "first-app-restored");
-        app.setAttribute(TestEntity.SEQUENCE, 5);
+        app.sensors().set(TestEntity.SEQUENCE, 5);
         
         appRO = expectRebindSequenceNumber(n1, n2, app, 5, true);
         assertEquals(n2.mgmt.getEntityManager().getEntities().size(), 1);
@@ -302,7 +302,7 @@ public class HotStandbyTest {
         TestApplication app2 = TestApplication.Factory.newManagedInstanceForTests(n1.mgmt);
         app2.config().set(TestEntity.CONF_NAME, "second-app");
         
-        app.setAttribute(TestEntity.SEQUENCE, 4);
+        app.sensors().set(TestEntity.SEQUENCE, 4);
         appRO = expectRebindSequenceNumber(n1, n2, app, 4, immediate);
         
         assertEquals(appRO.getChildren().size(), 1);
@@ -322,7 +322,7 @@ public class HotStandbyTest {
         Entities.unmanage(child);
         Entities.unmanage(app2);
         
-        app.setAttribute(TestEntity.SEQUENCE, 5);
+        app.sensors().set(TestEntity.SEQUENCE, 5);
         appRO = expectRebindSequenceNumber(n1, n2, app, 5, immediate);
         
         EntityTestUtils.assertAttributeEqualsEventually(appRO, TestEntity.SEQUENCE, 5);
@@ -540,7 +540,7 @@ public class HotStandbyTest {
         Assert.assertNotNull(app2RO);
         assertEquals(app2RO.getConfig(TestEntity.CONF_NAME), "second-app");
         try {
-            ((TestApplication)app2RO).setAttribute(TestEntity.SEQUENCE, 4);
+            ((TestApplication)app2RO).sensors().set(TestEntity.SEQUENCE, 4);
             Assert.fail("Should not have allowed sensor to be set");
         } catch (Exception e) {
             Assert.assertTrue(e.toString().toLowerCase().contains("read-only"), "Error message did not contain expected text: "+e);
@@ -561,7 +561,7 @@ public class HotStandbyTest {
         Application app2B = n2.mgmt.lookup(app2.getId(), Application.class);
         Assert.assertNotNull(app2B);
         assertEquals(app2B.getConfig(TestEntity.CONF_NAME), "second-app");
-        ((TestApplication)app2B).setAttribute(TestEntity.SEQUENCE, 4);
+        ((TestApplication)app2B).sensors().set(TestEntity.SEQUENCE, 4);
         
         forcePersistNow(n2);
         forceRebindNow(n1);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
index 590b8fb..b00ffc4 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
@@ -297,7 +297,7 @@ public class EntityExecutionManagerTest {
         List<Task<?>> t1 = em.getAllTasks();
         
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
-        entity.setAttribute(TestEntity.NAME, "bob");
+        entity.sensors().set(TestEntity.NAME, "bob");
         entity.invoke(TestEntity.MY_EFFECTOR, ImmutableMap.<String,Object>of()).get();
         Entities.destroy(entity);
         Time.sleep(Duration.ONE_SECOND);
@@ -347,7 +347,7 @@ public class EntityExecutionManagerTest {
             try {
                 LOG.debug(JavaClassNames.niceClassAndMethod()+": iteration="+i);
                 TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
-                entity.setAttribute(byteArrayAttrib, new BigObject(10*1000*1000));
+                entity.sensors().set(byteArrayAttrib, new BigObject(10*1000*1000));
                 entity.invoke(TestEntity.MY_EFFECTOR, ImmutableMap.<String,Object>of()).get();
                 
                 // we get exceptions because tasks are still trying to publish after deployment;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalSubscriptionManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalSubscriptionManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalSubscriptionManagerTest.java
index 08efee4..10f07ab 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalSubscriptionManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalSubscriptionManagerTest.java
@@ -64,7 +64,7 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testSubscribeToEntityAttributeChange() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        app.subscribe(entity, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
+        app.subscriptions().subscribe(entity, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
                 @Override public void onEvent(SensorEvent<Object> event) {
                     latch.countDown();
                 }});
@@ -77,7 +77,7 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testSubscribeToEntityWithAttributeWildcard() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        app.subscribe(entity, null, new SensorEventListener<Object>() {
+        app.subscriptions().subscribe(entity, null, new SensorEventListener<Object>() {
             @Override public void onEvent(SensorEvent<Object> event) {
                 latch.countDown();
             }});
@@ -90,7 +90,7 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testSubscribeToAttributeChangeWithEntityWildcard() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        app.subscribe(null, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
+        app.subscriptions().subscribe(null, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
                 @Override public void onEvent(SensorEvent<Object> event) {
                     latch.countDown();
                 }});
@@ -103,7 +103,7 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testSubscribeToChildAttributeChange() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        app.subscribeToChildren(app, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
+        app.subscriptions().subscribeToChildren(app, TestEntity.SEQUENCE, new SensorEventListener<Object>() {
             @Override public void onEvent(SensorEvent<Object> event) {
                 latch.countDown();
             }});
@@ -123,7 +123,7 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
 
         final List<SensorEvent<Integer>> events = new CopyOnWriteArrayList<SensorEvent<Integer>>();
         final CountDownLatch latch = new CountDownLatch(1);
-        app.subscribeToMembers(group, TestEntity.SEQUENCE, new SensorEventListener<Integer>() {
+        app.subscriptions().subscribeToMembers(group, TestEntity.SEQUENCE, new SensorEventListener<Integer>() {
             @Override public void onEvent(SensorEvent<Integer> event) {
                 events.add(event);
                 latch.countDown();
@@ -154,10 +154,10 @@ public class LocalSubscriptionManagerTest extends BrooklynAppUnitTestSupport {
                         @Override public void onEvent(SensorEvent<Object> event) {
                         }
                     };
-                    app.subscribe(null, TestEntity.SEQUENCE, noopListener);
+                    app.subscriptions().subscribe(null, TestEntity.SEQUENCE, noopListener);
                     while (!Thread.currentThread().isInterrupted()) {
-                        SubscriptionHandle handle = app.subscribe(null, TestEntity.SEQUENCE, noopListener);
-                        app.unsubscribe(null, handle);
+                        SubscriptionHandle handle = app.subscriptions().subscribe(null, TestEntity.SEQUENCE, noopListener);
+                        app.subscriptions().unsubscribe(null, handle);
                     }
                 } catch (Exception e) {
                     threadException.set(e);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
index 5eb9bbf..ad878da 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
@@ -260,11 +260,11 @@ public class OsgiVersionMoreEntityTest {
                 OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_POLICY,
                 TEST_VERSION,
                 BROOKLYN_TEST_OSGI_ENTITIES_URL);
-        me.addPolicy(getPolicySpec(cp));
+        me.policies().add(getPolicySpec(cp));
         
         Assert.assertEquals(me.getPolicies().size(), 1, "Wrong number of policies: "+me.getPolicies());
         
-        String catalogItemId = Iterables.getOnlyElement( me.getPolicies() ).getCatalogItemId();
+        String catalogItemId = Iterables.getOnlyElement( me.policies() ).getCatalogItemId();
         Assert.assertNotNull(catalogItemId);
         // must be the actual source bundle
         Assert.assertFalse(catalogItemId.equals(me.getCatalogItemId()), "catalog item id is: "+catalogItemId);
@@ -311,7 +311,7 @@ public class OsgiVersionMoreEntityTest {
         assertV2EffectorCall(me);
         Assert.assertEquals(me.getPolicies().size(), 1, "Wrong number of policies: "+me.getPolicies());
         
-        String catalogItemId = Iterables.getOnlyElement( me.getPolicies() ).getCatalogItemId();
+        String catalogItemId = Iterables.getOnlyElement( me.policies() ).getCatalogItemId();
         Assert.assertNotNull(catalogItemId);
         // allow either me's bundle (more) or the actual source bundle
         Assert.assertTrue(catalogItemId.equals(me.getCatalogItemId()) || catalogItemId.startsWith("brooklyn-test-osgi-entities"));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterInMemorySizeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterInMemorySizeIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterInMemorySizeIntegrationTest.java
index 3f5c482..716e246 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterInMemorySizeIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterInMemorySizeIntegrationTest.java
@@ -76,7 +76,7 @@ public class BrooklynMementoPersisterInMemorySizeIntegrationTest extends Brookly
         Assert.assertTrue(out1<30*1000, "should have written less than 30k, wrote "+out1);
         Assert.assertTrue(filesOut1<30, "should have written fewer than 30 files, wrote "+out1);
         
-        ((EntityInternal)app).setAttribute(TestEntity.NAME, "hello world");
+        ((EntityInternal)app).sensors().set(TestEntity.NAME, "hello world");
         if (forceDelay) Time.sleep(Duration.FIVE_SECONDS);
         else recorder.blockUntilDataWrittenExceeds(out1+10, Duration.FIVE_SECONDS);
         localManagementContext.getRebindManager().waitForPendingComplete(Duration.FIVE_SECONDS, canTrigger);
@@ -89,7 +89,7 @@ public class BrooklynMementoPersisterInMemorySizeIntegrationTest extends Brookly
         Assert.assertTrue(out2<50*1000, "should have written less than 50k, wrote "+out1);
         Assert.assertTrue(filesOut2<40, "should have written fewer than 40 files, wrote "+out1);
         
-        ((EntityInternal)entity).setAttribute(TestEntity.NAME, Identifiers.makeRandomId(bigBlockSize));
+        ((EntityInternal)entity).sensors().set(TestEntity.NAME, Identifiers.makeRandomId(bigBlockSize));
         if (forceDelay) Time.sleep(Duration.FIVE_SECONDS);
         else recorder.blockUntilDataWrittenExceeds(out2+bigBlockSize, Duration.FIVE_SECONDS);
         localManagementContext.getRebindManager().waitForPendingComplete(Duration.FIVE_SECONDS, canTrigger);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
index 03a9c79..a355abd 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
@@ -85,8 +85,8 @@ public abstract class BrooklynMementoPersisterTestFixture {
             .createLocation(LocationSpec.create(SshMachineLocation.class)
                 .configure("address", "localhost"));
         entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).location(location));
-        enricher = app.addEnricher(Enrichers.builder().propagatingAll().from(entity).build());
-        app.addPolicy(policy = new TestPolicy());
+        enricher = app.enrichers().add(Enrichers.builder().propagatingAll().from(entity).build());
+        app.policies().add(policy = new TestPolicy());
     }
 
     protected abstract ManagementContext newPersistingManagementContext();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/CheckpointEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/CheckpointEntityTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/CheckpointEntityTest.java
index dae43a7..2c3b281 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/CheckpointEntityTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/CheckpointEntityTest.java
@@ -95,8 +95,8 @@ public class CheckpointEntityTest extends RebindTestFixtureWithApp {
     
     @Test
     public void testPersistsOnExplicitCheckpointOfEntity() throws Exception {
-        origE.setConfig(MyEntity.MY_CONFIG, "mynewval");
-        origE.setAttribute(MyEntity.MY_SENSOR, "mysensorval");
+        origE.config().set(MyEntity.MY_CONFIG, "mynewval");
+        origE.sensors().set(MyEntity.MY_SENSOR, "mysensorval");
         
         // Assert persisted the modified config/attributes
         newApp = rebind();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogEntityTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogEntityTest.java
index a109f13..6a034c4 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogEntityTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogEntityTest.java
@@ -103,7 +103,7 @@ public class RebindCatalogEntityTest extends RebindTestFixture<StartableApplicat
         EntitySpec<StartableApplication> appSpec = EntitySpec.create(StartableApplication.class, appClazz)
                 .configure("myconf", "myconfval");
         origApp = ApplicationBuilder.newManagedApp(appSpec, origManagementContext);
-        ((EntityInternal)origApp).setAttribute(Sensors.newStringSensor("mysensor"), "mysensorval");
+        ((EntityInternal)origApp).sensors().set(Sensors.newStringSensor("mysensor"), "mysensorval");
         
         newApp = rebindWithAppClass();
         Entities.dumpInfo(newApp);


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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherTest.java
index dbc84ed..4aed5c6 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherTest.java
@@ -71,7 +71,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testSummingEnricherWithNoProducersDefaultsToNull() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -82,7 +82,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSummingEnricherWithNoProducers() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -95,7 +95,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSummingEnricherWhenNoSensorValuesYet() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -108,7 +108,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSummingEnricherWhenNoSensorValuesYetDefaultsToNull() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -119,7 +119,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testSummingEnricherWithNoValues() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -130,33 +130,33 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testSummingEnricherWithOneValue() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
                 .fromHardcodedProducers(ImmutableList.of(entity))
                 .build());
 
-        entity.setAttribute(intSensor, 1);
+        entity.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
     }
     
     @Test
     public void testSummingEnricherWhenNullSensorValue() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
                 .fromHardcodedProducers(ImmutableList.of(entity))
                 .build());
 
-        entity.setAttribute(intSensor, null);
+        entity.sensors().set(intSensor, null);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, target, null);
     }
     
     @Test
     public void testSummingEnricherWhenDefaultValueForUnreportedSensors() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -167,13 +167,13 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 3);
         
-        entity.setAttribute(intSensor, null);
+        entity.sensors().set(intSensor, null);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, target, 3);
         
-        entity.setAttribute(intSensor, 1);
+        entity.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
         
-        entity.setAttribute(intSensor, 7);
+        entity.sensors().set(intSensor, 7);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 7);
     }
     
@@ -183,20 +183,20 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity producer2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         TestEntity producer3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
 
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
                 .fromHardcodedProducers(ImmutableList.of(producer1, producer2, producer3))
                 .build());
 
-        producer3.setAttribute(intSensor, 1);
+        producer3.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
 
-        producer1.setAttribute(intSensor, 2);
+        producer1.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 3);
 
-        producer2.setAttribute(intSensor, 4);
+        producer2.sensors().set(intSensor, 4);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 7);
     }
     
@@ -204,7 +204,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testAveragingEnricherWhenNoAndNullSensorValues() {
         TestEntity producer1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -213,7 +213,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, doubleSensor, null);
         
-        producer1.setAttribute(intSensor, null);
+        producer1.sensors().set(intSensor, null);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, doubleSensor, null);
     }
 
@@ -221,7 +221,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testAveragingEnricherWhenDefaultValueForUnreportedSensors() {
         TestEntity producer1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -232,16 +232,16 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 3d);
         
-        producer1.setAttribute(intSensor, null);
+        producer1.sensors().set(intSensor, null);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, doubleSensor, 3d);
         
-        producer1.setAttribute(intSensor, 4);
+        producer1.sensors().set(intSensor, 4);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 4d);
     }
 
     @Test
     public void testAveragingEnricherWhenNoSensors() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -255,7 +255,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testAveragingEnricherWhenNoProducersDefaultsToNull() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -271,7 +271,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity producer2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         TestEntity producer3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -280,16 +280,16 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 50), entity, doubleSensor, null);
 
-        producer1.setAttribute(intSensor, 3);
+        producer1.sensors().set(intSensor, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 3d);
         
-        producer2.setAttribute(intSensor, 1);
+        producer2.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 2d);
 
-        producer3.setAttribute(intSensor, 5);
+        producer3.sensors().set(intSensor, 5);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 3d);
 
-        producer2.setAttribute(intSensor, 4);
+        producer2.sensors().set(intSensor, 4);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 4d);
     }
     
@@ -299,7 +299,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity producer2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         TestEntity producer3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(doubleSensor)
                 .computingAverage()
@@ -310,13 +310,13 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 0d);
 
-        producer1.setAttribute(intSensor, 3);
+        producer1.sensors().set(intSensor, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 1d);
 
-        producer2.setAttribute(intSensor, 3);
+        producer2.sensors().set(intSensor, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 2d);
 
-        producer3.setAttribute(intSensor, 3);
+        producer3.sensors().set(intSensor, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, doubleSensor, 3d);
     }
     
@@ -327,7 +327,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         log.debug("created {} and the entities it will contain {} {}", new Object[] {group, p1, p2});
 
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -339,11 +339,11 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         EntityTestUtils.assertAttributeEqualsEventually(group, target, 0);
 
         group.addMember(p1);
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(group, target, 1);
 
         group.addMember(p2);
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(group, target, 3);
 
         group.removeMember(p2);
@@ -362,10 +362,10 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity p2 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group)); 
         group.addMember(p1);
         group.addMember(p2);
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         Entities.manage(group);
         
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -375,7 +375,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(group, target, 1);
 
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(group, target, 3);
         
         group.removeMember(p2);
@@ -389,10 +389,10 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity p2 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group)); 
         group.addMember(p1);
         group.addMember(p2);
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         Entities.manage(group);
         
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -403,7 +403,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(app, target, 1);
 
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(app, target, 3);
         
         group.removeMember(p2);
@@ -418,11 +418,11 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         TestEntity p3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         group.addMember(p1);
         group.addMember(p2);
-        p1.setAttribute(intSensor, 1);
-        p2.setAttribute(intSensor, 2);
-        p3.setAttribute(intSensor, 4);
+        p1.sensors().set(intSensor, 1);
+        p2.sensors().set(intSensor, 2);
+        p3.sensors().set(intSensor, 4);
         
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -438,7 +438,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testAggregatesNewChidren() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -450,11 +450,11 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 0);
 
         TestEntity p1 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
 
         TestEntity p2 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 3);
 
         Entities.unmanage(p2);
@@ -465,9 +465,9 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testAggregatesExistingChildren() {
         TestEntity p1 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
         TestEntity p2 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -477,7 +477,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
 
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 3);
         
         Entities.unmanage(p2);
@@ -488,9 +488,9 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testAggregatesChildrenOfProducer() {
         TestEntity p1 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
         TestEntity p2 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -501,7 +501,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(app, target, 1);
 
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(app, target, 3);
         
         Entities.unmanage(p2);
@@ -511,9 +511,9 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testAppliesFilterWhenAggregatingChildrenOfGroup() {
         TestEntity p1 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p1.setAttribute(intSensor, 1);
+        p1.sensors().set(intSensor, 1);
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computingSum()
@@ -524,7 +524,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
         
         TestEntity p2 = entity.createAndManageChild(EntitySpec.create(TestEntity.class));
-        p2.setAttribute(intSensor, 2);
+        p2.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), entity, target, 1);
     }
     
@@ -539,7 +539,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
             }
         };
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .aggregating(intSensor)
                 .publishing(target)
                 .computing(aggregator)
@@ -550,7 +550,7 @@ public class CustomAggregatingEnricherTest extends BrooklynAppUnitTestSupport {
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 1);
         
         // Event by producer
-        producer1.setAttribute(intSensor, 2);
+        producer1.sensors().set(intSensor, 2);
         EntityTestUtils.assertAttributeEqualsEventually(entity, target, 5);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/EnrichersTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/EnrichersTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/EnrichersTest.java
index e5c48fa..832b974 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/EnrichersTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/EnrichersTest.java
@@ -82,10 +82,9 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     public void testAdding() {
-        Enricher enr = entity.addEnricher(Enrichers.builder()
+        Enricher enr = entity.enrichers().add(Enrichers.builder()
                 .combining(NUM1, NUM2)
                 .publishing(NUM3)
                 .computingSum()
@@ -93,29 +92,27 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         
         Assert.assertEquals(EntityAdjuncts.getNonSystemEnrichers(entity), ImmutableList.of(enr));
         
-        entity.setAttribute(NUM1, 2);
-        entity.setAttribute(NUM2, 3);
+        entity.sensors().set(NUM1, 2);
+        entity.sensors().set(NUM2, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, NUM3, 5);
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     public void testCombiningWithCustomFunction() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .combining(NUM1, NUM2)
                 .publishing(NUM3)
                 .computing(Functions.constant(1))
                 .build());
         
-        entity.setAttribute(NUM1, 2);
-        entity.setAttribute(NUM2, 3);
+        entity.sensors().set(NUM1, 2);
+        entity.sensors().set(NUM2, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, NUM3, 1);
     }
     
-    @SuppressWarnings("unchecked")
     @Test(groups="Integration") // because takes a second
     public void testCombiningRespectsUnchanged() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .combining(NUM1, NUM2)
                 .<Object>publishing(NUM3)
                 .computing(new Function<Iterable<Integer>, Object>() {
@@ -128,54 +125,54 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                         }})
                 .build());
         
-        entity.setAttribute(NUM1, 123);
-        entity.setAttribute(NUM2, 3);
+        entity.sensors().set(NUM1, 123);
+        entity.sensors().set(NUM2, 3);
         EntityTestUtils.assertAttributeEqualsEventually(entity, NUM3, 126);
         
-        entity.setAttribute(NUM1, 2);
+        entity.sensors().set(NUM1, 2);
         EntityTestUtils.assertAttributeEqualsContinually(entity, NUM3, 126);
     }
     
     @Test
     public void testFromEntity() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(NUM1)
                 .publishing(NUM1)
                 .computing(Functions.<Integer>identity())
                 .from(entity2)
                 .build());
         
-        entity2.setAttribute(NUM1, 2);
+        entity2.sensors().set(NUM1, 2);
         EntityTestUtils.assertAttributeEqualsEventually(entity, NUM1, 2);
     }
     
     @Test
     public void testTransforming() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(STR1)
                 .publishing(STR2)
                 .computing(StringFunctions.append("mysuffix"))
                 .build());
         
-        entity.setAttribute(STR1, "myval");
+        entity.sensors().set(STR1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(entity, STR2, "myvalmysuffix");
     }
 
     @Test
     public void testTransformingCastsResult() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(NUM1)
                 .publishing(LONG1)
                 .computing(Functions.constant(Long.valueOf(1)))
                 .build());
         
-        entity.setAttribute(NUM1, 123);
+        entity.sensors().set(NUM1, 123);
         EntityTestUtils.assertAttributeEqualsEventually(entity, LONG1, Long.valueOf(1));
     }
 
     @Test
     public void testTransformingFromEvent() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(STR1)
                 .publishing(STR2)
                 .computingFromEvent(new Function<SensorEvent<String>, String>() {
@@ -184,7 +181,7 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                     }})
                 .build());
         
-        entity.setAttribute(STR1, "myval");
+        entity.sensors().set(STR1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(entity, STR2, "myvalmysuffix");
     }
 
@@ -193,7 +190,7 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         RecordingSensorEventListener<String> record = new RecordingSensorEventListener<>();
         app.getManagementContext().getSubscriptionManager().subscribe(entity, STR2, record);
         
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(STR1)
                 .<Object>publishing(STR2)
                 .computing(new Function<String, Object>() {
@@ -203,20 +200,20 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                 .build());
         Asserts.assertThat(record.getEvents(), CollectionFunctionals.sizeEquals(0));
 
-        entity.setAttribute(STR1, "myval");
+        entity.sensors().set(STR1, "myval");
         Asserts.eventually(Suppliers.ofInstance(record), CollectionFunctionals.sizeEquals(1));
         EntityTestUtils.assertAttributeEquals(entity, STR2, "myval");
 
-        entity.setAttribute(STR1, "ignoredval");
+        entity.sensors().set(STR1, "ignoredval");
         EntityTestUtils.assertAttributeEqualsContinually(entity, STR2, "myval");
 
-        entity.setAttribute(STR1, "myval2");
+        entity.sensors().set(STR1, "myval2");
         Asserts.eventually(Suppliers.ofInstance(record), CollectionFunctionals.sizeEquals(2));
         EntityTestUtils.assertAttributeEquals(entity, STR2, "myval2");
 
-        entity.setAttribute(STR1, "myval2");
-        entity.setAttribute(STR1, "myval2");
-        entity.setAttribute(STR1, "myval3");
+        entity.sensors().set(STR1, "myval2");
+        entity.sensors().set(STR1, "myval2");
+        entity.sensors().set(STR1, "myval3");
         Asserts.eventually(Suppliers.ofInstance(record), CollectionFunctionals.sizeEquals(5));
     }
 
@@ -224,46 +221,46 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         RecordingSensorEventListener<String> record = new RecordingSensorEventListener<>();
         app.getManagementContext().getSubscriptionManager().subscribe(entity, STR2, record);
 
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .transforming(STR1)
                 .publishing(STR2)
                 .computing(Functions.<String>identity())
                 .suppressDuplicates(true)
                 .build());
 
-        entity.setAttribute(STR1, "myval");
+        entity.sensors().set(STR1, "myval");
         Asserts.eventually(Suppliers.ofInstance(record), CollectionFunctionals.sizeEquals(1));
         EntityTestUtils.assertAttributeEquals(entity, STR2, "myval");
 
-        entity.setAttribute(STR1, "myval2");
-        entity.setAttribute(STR1, "myval2");
-        entity.setAttribute(STR1, "myval3");
+        entity.sensors().set(STR1, "myval2");
+        entity.sensors().set(STR1, "myval2");
+        entity.sensors().set(STR1, "myval3");
         EntityTestUtils.assertAttributeEqualsContinually(entity, STR2, "myval3");
         Asserts.assertThat(record.getEvents(), CollectionFunctionals.sizeEquals(3));
     }
 
     @Test
     public void testPropagating() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableList.of(STR1))
                 .from(entity2)
                 .build());
         
-        entity2.setAttribute(STR1, "myval");
+        entity2.sensors().set(STR1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(entity, STR1, "myval");
         
-        entity2.setAttribute(STR1, null);
+        entity2.sensors().set(STR1, null);
         EntityTestUtils.assertAttributeEqualsEventually(entity, STR1, null);
     }
     
     @Test
     public void testPropagatingAndRenaming() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(STR1, STR2))
                 .from(entity2)
                 .build());
         
-        entity2.setAttribute(STR1, "myval");
+        entity2.sensors().set(STR1, "myval");
         EntityTestUtils.assertAttributeEqualsEventually(entity, STR2, "myval");
     }
     
@@ -274,16 +271,16 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         Entities.manage(child1);
         group.addMember(entity);
         group.addMember(entity2);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(NUM1)
                 .publishing(NUM2)
                 .fromMembers()
                 .computingSum()
                 .build());
         
-        child1.setAttribute(NUM1, 1);
-        entity.setAttribute(NUM1, 2);
-        entity2.setAttribute(NUM1, 3);
+        child1.sensors().set(NUM1, 1);
+        entity.sensors().set(NUM1, 2);
+        entity2.sensors().set(NUM1, 3);
         EntityTestUtils.assertAttributeEqualsEventually(group, NUM2, 5);
     }
     
@@ -294,16 +291,16 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         Entities.manage(child1);
         TestEntity child2 = group.addChild(EntitySpec.create(TestEntity.class));
         Entities.manage(child2);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(NUM1)
                 .publishing(NUM2)
                 .fromChildren()
                 .computingSum()
                 .build());
         
-        entity.setAttribute(NUM1, 1);
-        child1.setAttribute(NUM1, 2);
-        child2.setAttribute(NUM1, 3);
+        entity.sensors().set(NUM1, 1);
+        child1.sensors().set(NUM1, 2);
+        child2.sensors().set(NUM1, 3);
         EntityTestUtils.assertAttributeEqualsEventually(group, NUM2, 5);
     }
 
@@ -311,7 +308,7 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
     public void testAggregatingExcludingBlankString() {
         group.addMember(entity);
         group.addMember(entity2);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(STR1)
                 .publishing(SET1)
                 .fromMembers()
@@ -323,23 +320,23 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                     }})
                 .build());
         
-        entity.setAttribute(STR1, "1");
-        entity2.setAttribute(STR1, "2");
+        entity.sensors().set(STR1, "1");
+        entity2.sensors().set(STR1, "2");
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("1", "2"));
         
-        entity.setAttribute(STR1, "3");
-        entity2.setAttribute(STR1, null);
+        entity.sensors().set(STR1, "3");
+        entity2.sensors().set(STR1, null);
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("3"));
         
-        entity.setAttribute(STR1, "");
-        entity2.setAttribute(STR1, "4");
+        entity.sensors().set(STR1, "");
+        entity2.sensors().set(STR1, "4");
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("4"));
     }
 
     @Test
     public void testAggregatingExcludingNull() {
         group.addMember(entity);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(NUM1)
                 .publishing(SET1)
                 .fromMembers()
@@ -353,34 +350,34 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of());
 
-        entity.setAttribute(NUM1, 1);
+        entity.sensors().set(NUM1, 1);
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of(1));
         
-        entity.setAttribute(NUM1, null);
+        entity.sensors().set(NUM1, null);
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of());
         
-        entity.setAttribute(NUM1, 2);
+        entity.sensors().set(NUM1, 2);
         EntityTestUtils.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of(2));
     }
 
     @Test
     public void testAggregatingCastsResult() {
         group.addMember(entity);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(NUM1)
                 .publishing(LONG1)
                 .fromMembers()
                 .computing(Functions.constant(Long.valueOf(1)))
                 .build());
         
-        entity.setAttribute(NUM1, 123);
+        entity.sensors().set(NUM1, 123);
         EntityTestUtils.assertAttributeEqualsEventually(group, LONG1, Long.valueOf(1));
     }
     
     @Test(groups="Integration") // because takes a second
     public void testAggregatingRespectsUnchanged() {
         group.addMember(entity);
-        group.addEnricher(Enrichers.builder()
+        group.enrichers().add(Enrichers.builder()
                 .aggregating(NUM1)
                 .<Object>publishing(LONG1)
                 .fromMembers()
@@ -394,15 +391,15 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                         }})
                 .build());
         
-        entity.setAttribute(NUM1, 123);
+        entity.sensors().set(NUM1, 123);
         EntityTestUtils.assertAttributeEqualsEventually(group, LONG1, Long.valueOf(123));
         
-        entity.setAttribute(NUM1, 987654);
+        entity.sensors().set(NUM1, 987654);
         EntityTestUtils.assertAttributeEqualsContinually(group, LONG1, Long.valueOf(123));
     }
     @Test
     public void testUpdatingMap1() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .updatingMap(MAP1)
                 .from(LONG1)
                 .computing(Functionals.ifEquals(-1L).value("-1 is not allowed"))
@@ -414,7 +411,7 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
     @SuppressWarnings({ "unchecked", "rawtypes" })
     @Test
     public void testUpdatingMap2() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .updatingMap((AttributeSensor)MAP2)
                 .from(LONG1)
                 .computing(Functionals.ifEquals(-1L).value("-1 is not allowed"))
@@ -427,11 +424,11 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
     protected void doUpdatingMapChecks(AttributeSensor mapSensor) {
         EntityTestUtils.assertAttributeEqualsEventually(entity, mapSensor, MutableMap.<String,String>of());
         
-        entity.setAttribute(LONG1, -1L);
+        entity.sensors().set(LONG1, -1L);
         EntityTestUtils.assertAttributeEqualsEventually(entity, mapSensor, MutableMap.<String,String>of(
             LONG1.getName(), "-1 is not allowed"));
         
-        entity.setAttribute(LONG1, 1L);
+        entity.sensors().set(LONG1, 1L);
         EntityTestUtils.assertAttributeEqualsEventually(entity, mapSensor, MutableMap.<String,String>of());
     }
 
@@ -439,27 +436,27 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testJoinerDefault() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .joining(LIST_SENSOR)
                 .publishing(TestEntity.NAME)
                 .build());
         // null values ignored, and it quotes
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of("a", "\"b").append(null));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of("a", "\"b").append(null));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, "\"a\",\"\\\"b\"");
         
         // empty list causes ""
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of().append(null));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of().append(null));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, "");
         
         // null causes null
-        entity.setAttribute(LIST_SENSOR, null);
+        entity.sensors().set(LIST_SENSOR, null);
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, null);
     }
 
     @Test
     public void testJoinerUnquoted() {
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of("a", "\"b", "ccc").append(null));
-        entity.addEnricher(Enrichers.builder()
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of("a", "\"b", "ccc").append(null));
+        entity.enrichers().add(Enrichers.builder()
             .joining(LIST_SENSOR)
             .publishing(TestEntity.NAME)
             .minimum(1)
@@ -471,13 +468,13 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
         EntityTestUtils.assertAttributeEquals(entity, TestEntity.NAME, "a:\"b");
         
         // empty list causes null here, because below the minimum
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of().append(null));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of().append(null));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, null);
     }
 
     @Test
     public void testJoinerMinMax() {
-        entity.addEnricher(Enrichers.builder()
+        entity.enrichers().add(Enrichers.builder()
                 .joining(LIST_SENSOR)
                 .publishing(TestEntity.NAME)
                 .minimum(2)
@@ -485,15 +482,15 @@ public class EnrichersTest extends BrooklynAppUnitTestSupport {
                 .quote(false)
                 .build());
         // null values ignored, and it quotes
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of("a", "b"));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of("a", "b"));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, "a,b");
         
         // empty list causes ""
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of("x"));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of("x"));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, null);
         
         // null causes null
-        entity.setAttribute(LIST_SENSOR, MutableList.<String>of("a", "b", "c", "d", "e"));
+        entity.sensors().set(LIST_SENSOR, MutableList.<String>of("a", "b", "c", "d", "e"));
         EntityTestUtils.assertAttributeEqualsEventually(entity, TestEntity.NAME, "a,b,c,d");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherDeprecatedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherDeprecatedTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherDeprecatedTest.java
index a52e2ee..2f7eca9 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherDeprecatedTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherDeprecatedTest.java
@@ -51,58 +51,58 @@ public class SensorPropagatingEnricherDeprecatedTest extends BrooklynAppUnitTest
     
     @Test
     public void testPropagatesSpecificSensor() {
-        app.addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(entity, TestEntity.NAME));
+        app.enrichers().add(SensorPropagatingEnricher.newInstanceListeningTo(entity, TestEntity.NAME));
 
         // name propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         
         // sequence not propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 100), app, TestEntity.SEQUENCE, null);
     }
     
     @Test
     public void testPropagatesAllSensors() {
-        app.addEnricher(SensorPropagatingEnricher.newInstanceListeningToAllSensors(entity));
+        app.enrichers().add(SensorPropagatingEnricher.newInstanceListeningToAllSensors(entity));
 
         // all attributes propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.SEQUENCE, 2);
         
         // notification-sensor propagated
         final AtomicReference<Integer> notif = new AtomicReference<Integer>();
-        app.subscribe(app, TestEntity.MY_NOTIF, new SensorEventListener<Integer>() {
+        app.subscriptions().subscribe(app, TestEntity.MY_NOTIF, new SensorEventListener<Integer>() {
                 @Override public void onEvent(SensorEvent<Integer> event) {
                     notif.set(event.getValue());
                 }});
-        entity.emit(TestEntity.MY_NOTIF, 7);
+        entity.sensors().emit(TestEntity.MY_NOTIF, 7);
         Asserts.eventually(AtomicReferences.supplier(notif), Predicates.equalTo(7));
     }
     
     @Test
     public void testPropagatesAllBut() {
-        app.addEnricher(SensorPropagatingEnricher.newInstanceListeningToAllSensorsBut(entity, TestEntity.SEQUENCE)) ;
+        app.enrichers().add(SensorPropagatingEnricher.newInstanceListeningToAllSensorsBut(entity, TestEntity.SEQUENCE)) ;
 
         // name propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         
         // sequence not propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 100), app, TestEntity.SEQUENCE, null);
     }
     
     @Test
     public void testPropagatingAsDifferentSensor() {
         final AttributeSensor<String> ANOTHER_ATTRIBUTE = Sensors.newStringSensor("another.attribute", "");
-        app.addEnricher(SensorPropagatingEnricher.newInstanceRenaming(entity, ImmutableMap.of(TestEntity.NAME, ANOTHER_ATTRIBUTE)));
+        app.enrichers().add(SensorPropagatingEnricher.newInstanceRenaming(entity, ImmutableMap.of(TestEntity.NAME, ANOTHER_ATTRIBUTE)));
 
         // name propagated as different attribute
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, ANOTHER_ATTRIBUTE, "foo");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherTest.java
index 090b0a4..4343127 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/SensorPropagatingEnricherTest.java
@@ -54,25 +54,25 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testPropagatesSpecificSensor() {
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(TestEntity.NAME)
                 .from(entity)
                 .build());
 
         // name propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         
         // sequence not propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 100), app, TestEntity.SEQUENCE, null);
     }
     
     @Test
     public void testPropagatesCurrentValue() {
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(TestEntity.NAME)
                 .from(entity)
                 .build());
@@ -83,25 +83,25 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
     
     @Test
     public void testPropagatesAllStaticSensors() {
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagatingAll()
                 .from(entity)
                 .build());
 
         // all attributes propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.SEQUENCE, 2);
         
         // notification-sensor propagated
         final AtomicReference<Integer> notif = new AtomicReference<Integer>();
-        app.subscribe(app, TestEntity.MY_NOTIF, new SensorEventListener<Integer>() {
+        app.subscriptions().subscribe(app, TestEntity.MY_NOTIF, new SensorEventListener<Integer>() {
                 @Override public void onEvent(SensorEvent<Integer> event) {
                     notif.set(event.getValue());
                 }});
-        entity.emit(TestEntity.MY_NOTIF, 7);
+        entity.sensors().emit(TestEntity.MY_NOTIF, 7);
         Asserts.eventually(AtomicReferences.supplier(notif), Predicates.equalTo(7));
     }
     
@@ -110,38 +110,38 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
         AttributeSensor<String> dynamicAttribute = Sensors.newStringSensor("test.dynamicsensor.strattrib");
         BasicNotificationSensor<String> dynamicNotificationSensor = new BasicNotificationSensor(String.class, "test.dynamicsensor.strnotif");
         
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagatingAll()
                 .from(entity)
                 .build());
 
-        entity.setAttribute(dynamicAttribute, "foo");
+        entity.sensors().set(dynamicAttribute, "foo");
         
         EntityTestUtils.assertAttributeEqualsEventually(app, dynamicAttribute, "foo");
         
         // notification-sensor propagated
         final AtomicReference<String> notif = new AtomicReference<String>();
-        app.subscribe(app, dynamicNotificationSensor, new SensorEventListener<String>() {
+        app.subscriptions().subscribe(app, dynamicNotificationSensor, new SensorEventListener<String>() {
                 @Override public void onEvent(SensorEvent<String> event) {
                     notif.set(event.getValue());
                 }});
-        entity.emit(dynamicNotificationSensor, "mynotifval");
+        entity.sensors().emit(dynamicNotificationSensor, "mynotifval");
         Asserts.eventually(AtomicReferences.supplier(notif), Predicates.equalTo("mynotifval"));
     }
     
     @Test
     public void testPropagatesAllBut() {
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagatingAllBut(TestEntity.SEQUENCE)
                 .from(entity)
                 .build());
 
         // name propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         
         // sequence not propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 100), app, TestEntity.SEQUENCE, null);
     }
     
@@ -149,30 +149,30 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testPropagatingAsDifferentSensor() {
         final AttributeSensor<String> ANOTHER_ATTRIBUTE = Sensors.newStringSensor("another.attribute", "");
         
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(TestEntity.NAME, ANOTHER_ATTRIBUTE))
                 .from(entity)
                 .build());
 
         // name propagated as different attribute
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, ANOTHER_ATTRIBUTE, "foo");
     }
     
     @Test
     public void testEnricherSpecPropagatesSpecificSensor() throws Exception {
-        app.addEnricher(EnricherSpec.create(Propagator.class)
+        app.enrichers().add(EnricherSpec.create(Propagator.class)
                 .configure(MutableMap.builder()
                         .putIfNotNull(Propagator.PRODUCER, entity)
                         .putIfNotNull(Propagator.PROPAGATING, ImmutableList.of(TestEntity.NAME))
                         .build()));
 
         // name propagated
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.NAME, "foo");
         
         // sequence not propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", 100), app, TestEntity.SEQUENCE, null);
     }
     
@@ -180,7 +180,7 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
     public void testEnricherSpecPropagatesSpecificSensorAndMapsOthers() throws Exception {
         final AttributeSensor<String> ANOTHER_ATTRIBUTE = Sensors.newStringSensor("another.attribute", "");
         
-        app.addEnricher(EnricherSpec.create(Propagator.class)
+        app.enrichers().add(EnricherSpec.create(Propagator.class)
                 .configure(MutableMap.builder()
                         .putIfNotNull(Propagator.PRODUCER, entity)
                         .putIfNotNull(Propagator.SENSOR_MAPPING, ImmutableMap.of(TestEntity.NAME, ANOTHER_ATTRIBUTE))
@@ -188,11 +188,11 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
                         .build()));
 
         // name propagated as alternative sensor
-        entity.setAttribute(TestEntity.NAME, "foo");
+        entity.sensors().set(TestEntity.NAME, "foo");
         EntityTestUtils.assertAttributeEqualsEventually(app, ANOTHER_ATTRIBUTE, "foo");
         
         // sequence also propagated
-        entity.setAttribute(TestEntity.SEQUENCE, 2);
+        entity.sensors().set(TestEntity.SEQUENCE, 2);
         EntityTestUtils.assertAttributeEqualsEventually(app, TestEntity.SEQUENCE, 2);
 
         // name not propagated as original sensor
@@ -202,7 +202,7 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testEnricherSpecThrowsOnPropagatesAndPropagatesAllSet() throws Exception {
         try {
-            app.addEnricher(EnricherSpec.create(Propagator.class)
+            app.enrichers().add(EnricherSpec.create(Propagator.class)
                     .configure(MutableMap.builder()
                             .put(Propagator.PRODUCER, entity)
                             .put(Propagator.PROPAGATING, ImmutableList.of(TestEntity.NAME))
@@ -219,7 +219,7 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
         AttributeSensor<String> origSensor = Sensors.newSensor(String.class, "origSensor");
         AttributeSensor<Object> sourceSensorFromYaml = Sensors.newSensor(Object.class, "origSensor");
         AttributeSensor<Object> targetSensor = Sensors.newSensor(Object.class, "newSensor");
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(sourceSensorFromYaml, targetSensor))
                 .from(entity)
                 .build());
@@ -253,11 +253,11 @@ public class SensorPropagatingEnricherTest extends BrooklynAppUnitTestSupport {
          */
         AttributeSensor<Object> targetSensor = Sensors.newSensor(Object.class, "newSensor");
         AttributeSensor<Object> sourceSensorFromYaml = Sensors.newSensor(Object.class, TestEntity.NAME.getName());
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(Sensors.newSensor(Object.class, TestEntity.NAME.getName()))
                 .from(entity)
                 .build());
-        app.addEnricher(Enrichers.builder()
+        app.enrichers().add(Enrichers.builder()
                 .propagating(ImmutableMap.of(sourceSensorFromYaml, targetSensor))
                 .from(app)
                 .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
index b524738..9d4952d 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
@@ -69,9 +69,9 @@ public class TransformingEnricherDeprecatedTest {
         final SensorTransformingEnricher e1 = new SensorTransformingEnricher<Integer,Long>(intSensorA, target, 
             { 2*it });
         
-        producer.setAttribute(intSensorA, 3);
+        producer.sensors().set(intSensorA, 3);
         //ensure previous values get picked up
-        producer.addEnricher(e1);
+        producer.enrichers().add(e1);
 
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), 
                 new Callable<Object>() { public Object call() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherTest.java
index ee8fc9e..74ea6ff 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherTest.java
@@ -57,9 +57,9 @@ public class TransformingEnricherTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testTransformingEnricher() throws Exception {
         //ensure previous values get picked up
-        producer.setAttribute(intSensorA, 3);
+        producer.sensors().set(intSensorA, 3);
 
-        producer.addEnricher(Enrichers.builder()
+        producer.enrichers().add(Enrichers.builder()
                 .transforming(intSensorA)
                 //.computing(MathFunctions.times(2)) // TODO calling it before "publishing" means it doesn't check return type!
                 .publishing(target)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlRollingTimeWindowMeanEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlRollingTimeWindowMeanEnricherTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlRollingTimeWindowMeanEnricherTest.java
index af683ac..58eed85 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlRollingTimeWindowMeanEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlRollingTimeWindowMeanEnricherTest.java
@@ -65,12 +65,12 @@ public class YamlRollingTimeWindowMeanEnricherTest {
         deltaSensor = new BasicAttributeSensor<Double>(Double.class, "delta sensor");
         avgSensor = new BasicAttributeSensor<Double>(Double.class, "avg sensor");
             
-        delta = producer.addEnricher(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
+        delta = producer.enrichers().add(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
                 .configure(YamlTimeWeightedDeltaEnricher.PRODUCER, producer)
                 .configure(YamlTimeWeightedDeltaEnricher.SOURCE_SENSOR, intSensor)
                 .configure(YamlTimeWeightedDeltaEnricher.TARGET_SENSOR, deltaSensor));
 
-        averager = producer.addEnricher(EnricherSpec.create(YamlRollingTimeWindowMeanEnricher.class)
+        averager = producer.enrichers().add(EnricherSpec.create(YamlRollingTimeWindowMeanEnricher.class)
                 .configure(YamlRollingTimeWindowMeanEnricher.PRODUCER, producer)
                 .configure(YamlRollingTimeWindowMeanEnricher.SOURCE_SENSOR, deltaSensor)
                 .configure(YamlRollingTimeWindowMeanEnricher.TARGET_SENSOR, avgSensor)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlTimeWeightedDeltaEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlTimeWeightedDeltaEnricherTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlTimeWeightedDeltaEnricherTest.java
index 41b75a7..8923333 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlTimeWeightedDeltaEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/YamlTimeWeightedDeltaEnricherTest.java
@@ -62,7 +62,7 @@ public class YamlTimeWeightedDeltaEnricherTest {
     @Test
     public void testMonospaceTimeWeightedDeltaEnricher() {
         @SuppressWarnings("unchecked")
-        YamlTimeWeightedDeltaEnricher<Integer> delta = producer.addEnricher(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
+        YamlTimeWeightedDeltaEnricher<Integer> delta = producer.enrichers().add(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
             .configure(YamlTimeWeightedDeltaEnricher.PRODUCER, producer)
             .configure(YamlTimeWeightedDeltaEnricher.SOURCE_SENSOR, intSensor)
             .configure(YamlTimeWeightedDeltaEnricher.TARGET_SENSOR, deltaSensor));
@@ -86,7 +86,7 @@ public class YamlTimeWeightedDeltaEnricherTest {
     @Test
     public void testVariableTimeWeightedDeltaEnricher() {
         @SuppressWarnings("unchecked")
-        YamlTimeWeightedDeltaEnricher<Integer> delta = producer.addEnricher(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
+        YamlTimeWeightedDeltaEnricher<Integer> delta = producer.enrichers().add(EnricherSpec.create(YamlTimeWeightedDeltaEnricher.class)
             .configure(YamlTimeWeightedDeltaEnricher.PRODUCER, producer)
             .configure(YamlTimeWeightedDeltaEnricher.SOURCE_SENSOR, intSensor)
             .configure(YamlTimeWeightedDeltaEnricher.TARGET_SENSOR, deltaSensor));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterTest.java
index 44e4fbd..f575a42 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterTest.java
@@ -215,7 +215,7 @@ public class DynamicClusterTest extends BrooklynAppUnitTestSupport {
             .configure(DynamicCluster.INITIAL_SIZE, 1));
         
         RecordingSensorEventListener<Lifecycle> r = new RecordingSensorEventListener<>();
-        app.subscribe(cluster, Attributes.SERVICE_STATE_ACTUAL, r);
+        app.subscriptions().subscribe(cluster, Attributes.SERVICE_STATE_ACTUAL, r);
 
         cluster.start(ImmutableList.of(loc));
         EntityTestUtils.assertAttributeEqualsEventually(cluster, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
index 42c7d90..4acc317 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
@@ -76,7 +76,7 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
 
     @Test
     public void testPicksCorrectNumSubLocations() throws Exception {
-        ((EntityLocal)cluster).setConfig(DynamicCluster.NUM_AVAILABILITY_ZONES, 2);
+        ((EntityLocal)cluster).config().set(DynamicCluster.NUM_AVAILABILITY_ZONES, 2);
         cluster.start(ImmutableList.of(loc));
         List<Location> subLocations = cluster.getAttribute(DynamicCluster.SUB_LOCATIONS);
         List<String> subLocationNames = getLocationNames(subLocations);
@@ -85,7 +85,7 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
     
     @Test
     public void testPicksCorrectNamedSubLocations() throws Exception {
-        ((EntityLocal)cluster).setConfig(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone2", "zone4"));
+        ((EntityLocal)cluster).config().set(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone2", "zone4"));
         cluster.start(ImmutableList.of(loc));
         List<Location> subLocations = cluster.getAttribute(DynamicCluster.SUB_LOCATIONS);
         List<String> subLocationNames = getLocationNames(subLocations);
@@ -94,7 +94,7 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
     
     @Test
     public void testSpreadsEntitiesAcrossZonesEvenly() throws Exception {
-        ((EntityLocal)cluster).setConfig(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
+        ((EntityLocal)cluster).config().set(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
         cluster.start(ImmutableList.of(loc));
         
         cluster.resize(4);
@@ -112,7 +112,7 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
     
     @Test
     public void testReplacesEntityInSameZone() throws Exception {
-        ((EntityLocal)cluster).setConfig(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
+        ((EntityLocal)cluster).config().set(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
         cluster.start(ImmutableList.of(loc));
         
         cluster.resize(4);
@@ -144,9 +144,9 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
             }
         };
         
-        ((EntityLocal)cluster).setConfig(DynamicCluster.ZONE_FAILURE_DETECTOR, new ProportionalZoneFailureDetector(2, Duration.ONE_HOUR, 0.9, ticker));
-        ((EntityLocal)cluster).setConfig(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
-        ((EntityLocal)cluster).setConfig(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
+        ((EntityLocal)cluster).config().set(DynamicCluster.ZONE_FAILURE_DETECTOR, new ProportionalZoneFailureDetector(2, Duration.ONE_HOUR, 0.9, ticker));
+        ((EntityLocal)cluster).config().set(DynamicCluster.AVAILABILITY_ZONE_NAMES, ImmutableList.of("zone1", "zone2"));
+        ((EntityLocal)cluster).config().set(DynamicCluster.MEMBER_SPEC, EntitySpec.create(FailingEntity.class)
                 .configure(FailingEntity.FAIL_ON_START_CONDITION, failurePredicate));
         cluster.start(ImmutableList.of(loc));
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java
index 1b7ec97..dc327e3 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicGroupTest.java
@@ -45,9 +45,6 @@ import org.apache.brooklyn.core.entity.EntityPredicates;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.core.test.entity.TestApplication;
 import org.apache.brooklyn.core.test.entity.TestEntity;
-import org.apache.brooklyn.entity.group.AbstractGroup;
-import org.apache.brooklyn.entity.group.DynamicGroup;
-import org.apache.brooklyn.entity.group.DynamicGroupImpl;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -156,7 +153,7 @@ public class DynamicGroupTest {
         assertEqualsIgnoringOrder(group.getMembers(), ImmutableSet.of());
         
         // When changed (such that subscription spots it), then entity added
-        e1.setAttribute(MY_ATTRIBUTE, "yes");
+        e1.sensors().set(MY_ATTRIBUTE, "yes");
         
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
@@ -164,7 +161,7 @@ public class DynamicGroupTest {
             }});
 
         // When it stops matching, entity is removed        
-        e1.setAttribute(MY_ATTRIBUTE, "no");
+        e1.sensors().set(MY_ATTRIBUTE, "no");
         
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
@@ -195,8 +192,8 @@ public class DynamicGroupTest {
         // Does not subscribe to things which do not match predicate filter, 
         // so event from e1 should normally be ignored 
         // but pending rescans may cause it to pick up e1, so we ignore e1 in the entity filter also
-        e1.setAttribute(MY_ATTRIBUTE, "yes");
-        e2.setAttribute(MY_ATTRIBUTE, "yes");
+        e1.sensors().set(MY_ATTRIBUTE, "yes");
+        e2.sensors().set(MY_ATTRIBUTE, "yes");
         
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
@@ -272,7 +269,7 @@ public class DynamicGroupTest {
         final AtomicInteger removedNotifications = new AtomicInteger(0);
         final List<Exception> exceptions = new CopyOnWriteArrayList<Exception>();
         
-        app.subscribe(group, DynamicGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(group, DynamicGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
             public void onEvent(SensorEvent<Entity> event) {
                 try {
                     TestEntity val = (TestEntity) event.getValue();
@@ -286,7 +283,7 @@ public class DynamicGroupTest {
                 }
             }});
 
-        app.subscribe(group, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(group, DynamicGroup.MEMBER_REMOVED, new SensorEventListener<Entity>() {
             public void onEvent(SensorEvent<Entity> event) {
                 try {
                     TestEntity val = (TestEntity) event.getValue();
@@ -376,7 +373,7 @@ public class DynamicGroupTest {
                 notificationCount.incrementAndGet();
             }
         };
-        ((EntityLocal)group2).setConfig(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class));
+        group2.config().set(DynamicGroup.ENTITY_FILTER, Predicates.instanceOf(TestEntity.class));
         app.addChild(group2);
         Entities.manage(group2);
         
@@ -427,7 +424,7 @@ public class DynamicGroupTest {
                 super.onEntityAdded(item);
             }
         };
-        ((EntityLocal)group2).setConfig(DynamicGroup.ENTITY_FILTER, Predicates.<Object>equalTo(e3));
+        group2.config().set(DynamicGroup.ENTITY_FILTER, Predicates.<Object>equalTo(e3));
         app.addChild(group2);
         
         Thread t1 = new Thread(new Runnable() {
@@ -476,18 +473,24 @@ public class DynamicGroupTest {
         final List<Entity> membersAdded = new CopyOnWriteArrayList<Entity>();
         
         final DynamicGroupImpl group2 = new DynamicGroupImpl() {
-            @Override
-            public <T> void emit(Sensor<T> sensor, T val) {
-                // intercept inside AbstractGroup.addMember, while it still holds lock on members
-                if (sensor == AbstractGroup.MEMBER_ADDED && addingMemberDoLatching.get()) {
-                    addingMemberReachedLatch.countDown();
-                    try {
-                        addingMemberContinueLatch.await();
-                    } catch (InterruptedException e) {
-                        throw Exceptions.propagate(e);
+            private final BasicSensorSupport interceptedSensors = new BasicSensorSupport() {
+                @Override
+                public <T> void emit(Sensor<T> sensor, T val) {
+                    // intercept inside AbstractGroup.addMember, while it still holds lock on members
+                    if (sensor == AbstractGroup.MEMBER_ADDED && addingMemberDoLatching.get()) {
+                        addingMemberReachedLatch.countDown();
+                        try {
+                            addingMemberContinueLatch.await();
+                        } catch (InterruptedException e) {
+                            throw Exceptions.propagate(e);
+                        }
                     }
+                    super.emit(sensor, val);
                 }
-                super.emit(sensor, val);
+            };
+            @Override
+            public BasicSensorSupport sensors() {
+                return interceptedSensors;
             }
             @Override
             public boolean removeMember(final Entity member) {
@@ -495,11 +498,11 @@ public class DynamicGroupTest {
                 return super.removeMember(member);
             }
         };
-        group2.setConfig(DynamicGroup.MEMBER_DELEGATE_CHILDREN, true);
+        group2.config().set(DynamicGroup.MEMBER_DELEGATE_CHILDREN, true);
         app.addChild(group2);
         Entities.manage(group2);
         
-        app.subscribe(group2, AbstractGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
+        app.subscriptions().subscribe(group2, AbstractGroup.MEMBER_ADDED, new SensorEventListener<Entity>() {
             @Override public void onEvent(SensorEvent<Entity> event) {
                 membersAdded.add(event.getValue());
             }});

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/DynamicMultiGroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicMultiGroupTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicMultiGroupTest.java
index d0d1235..7f96d71 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/DynamicMultiGroupTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/DynamicMultiGroupTest.java
@@ -78,7 +78,7 @@ public class DynamicMultiGroupTest {
                         .configure(ENTITY_FILTER, instanceOf(TestEntity.class))
                         .configure(BUCKET_FUNCTION, bucketFromAttribute(SENSOR))
         );
-        app.subscribeToChildren(group, SENSOR, new SensorEventListener<String>() {
+        app.subscriptions().subscribeToChildren(group, SENSOR, new SensorEventListener<String>() {
             public void onEvent(SensorEvent<String> event) { dmg.rescanEntities(); }
         });
 
@@ -118,7 +118,7 @@ public class DynamicMultiGroupTest {
                         .configure(ENTITY_FILTER, instanceOf(TestEntity.class))
                         .configure(BUCKET_FUNCTION, bucketFromAttribute(SENSOR))
         );
-        app.subscribeToChildren(group, SENSOR, new SensorEventListener<String>() {
+        app.subscriptions().subscribeToChildren(group, SENSOR, new SensorEventListener<String>() {
             public void onEvent(SensorEvent<String> event) { dmg.rescanEntities(); }
         });
 
@@ -127,8 +127,8 @@ public class DynamicMultiGroupTest {
         TestEntity child2 = app.createAndManageChild(EntitySpec.create(childSpec).displayName("child2"));
 
         // Expect two buckets: bucketA and bucketB 
-        child1.setAttribute(SENSOR, "bucketA");
-        child2.setAttribute(SENSOR, "bucketB");
+        child1.sensors().set(SENSOR, "bucketA");
+        child2.sensors().set(SENSOR, "bucketB");
         dmg.rescanEntities();
         Group bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
         Group bucketB = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketB"), null);
@@ -136,8 +136,8 @@ public class DynamicMultiGroupTest {
         assertNotNull(bucketB);
         
         // Expect second bucket to be removed when empty 
-        child1.setAttribute(SENSOR, "bucketA");
-        child2.setAttribute(SENSOR, "bucketA");
+        child1.sensors().set(SENSOR, "bucketA");
+        child2.sensors().set(SENSOR, "bucketA");
         dmg.rescanEntities();
         bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
         bucketB = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketB"), null);
@@ -147,8 +147,8 @@ public class DynamicMultiGroupTest {
 
     private void checkDistribution(final Group group, final DynamicMultiGroup dmg, final EntitySpec<TestEntity> childSpec, final TestEntity child1, final TestEntity child2) {
         // Start with both children in bucket A; there is no bucket B
-        child1.setAttribute(SENSOR, "bucketA");
-        child2.setAttribute(SENSOR, "bucketA");
+        child1.sensors().set(SENSOR, "bucketA");
+        child2.sensors().set(SENSOR, "bucketA");
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
@@ -160,7 +160,7 @@ public class DynamicMultiGroupTest {
         });
 
         // Move child 1 into bucket B
-        child1.setAttribute(SENSOR, "bucketB");
+        child1.sensors().set(SENSOR, "bucketB");
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
@@ -173,7 +173,7 @@ public class DynamicMultiGroupTest {
         });
 
         // Move child 2 into bucket B; there is now no bucket A
-        child2.setAttribute(SENSOR, "bucketB");
+        child2.sensors().set(SENSOR, "bucketB");
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketA = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketA"), null);
@@ -187,7 +187,7 @@ public class DynamicMultiGroupTest {
         // Add new child 3, associated with new bucket C
         final TestEntity child3 = group.addChild(EntitySpec.create(childSpec).displayName("child3"));
         Entities.manage(child3);
-        child3.setAttribute(SENSOR, "bucketC");
+        child3.sensors().set(SENSOR, "bucketC");
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketC = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketC"), null);
@@ -198,7 +198,7 @@ public class DynamicMultiGroupTest {
 
         // Un-set the sensor on child 3 -- gets removed from bucket C, which then
         // disappears as it is empty.
-        child3.setAttribute(SENSOR, null);
+        child3.sensors().set(SENSOR, null);
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketB = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketB"), null);
@@ -210,7 +210,7 @@ public class DynamicMultiGroupTest {
         });
 
         // Add child 3 back to bucket C -- this should result in a new group entity
-        child3.setAttribute(SENSOR, "bucketC");
+        child3.sensors().set(SENSOR, "bucketC");
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 Group bucketC = (Group) find(dmg.getChildren(), displayNameEqualTo("bucketC"), null);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/GroupPickUpEntitiesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/GroupPickUpEntitiesTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/GroupPickUpEntitiesTest.java
index 2ab2230..68db69a 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/GroupPickUpEntitiesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/GroupPickUpEntitiesTest.java
@@ -55,7 +55,7 @@ public class GroupPickUpEntitiesTest extends BrooklynAppUnitTestSupport {
         super.setUp();
         group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
         
-        group.addPolicy(PolicySpec.create(FindUpServicesWithNameBob.class));
+        group.policies().add(PolicySpec.create(FindUpServicesWithNameBob.class));
     }
 
     @Test
@@ -67,8 +67,8 @@ public class GroupPickUpEntitiesTest extends BrooklynAppUnitTestSupport {
 
         EntityTestUtils.assertAttributeEquals(group, BasicGroup.GROUP_SIZE, 0);
 
-        e1.setAttribute(Startable.SERVICE_UP, true);
-        e1.setAttribute(TestEntity.NAME, "bob");
+        e1.sensors().set(Startable.SERVICE_UP, true);
+        e1.sensors().set(TestEntity.NAME, "bob");
 
         EntityTestUtils.assertAttributeEqualsEventually(group, BasicGroup.GROUP_SIZE, 1);
         Asserts.assertEqualsIgnoringOrder(group.getAttribute(BasicGroup.GROUP_MEMBERS), ImmutableList.of(e1));
@@ -79,12 +79,12 @@ public class GroupPickUpEntitiesTest extends BrooklynAppUnitTestSupport {
         Assert.assertEquals(group.getMembers().size(), 1);
         Assert.assertTrue(group.getMembers().contains(e1));
 
-        e2.setAttribute(Startable.SERVICE_UP, true);
-        e2.setAttribute(TestEntity.NAME, "fred");
+        e2.sensors().set(Startable.SERVICE_UP, true);
+        e2.sensors().set(TestEntity.NAME, "fred");
 
         EntityTestUtils.assertAttributeEquals(group, BasicGroup.GROUP_SIZE, 1);
 
-        e2.setAttribute(TestEntity.NAME, "BOB");
+        e2.sensors().set(TestEntity.NAME, "BOB");
         EntityTestUtils.assertAttributeEqualsEventually(group, BasicGroup.GROUP_SIZE, 2);
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
@@ -113,7 +113,7 @@ public class GroupPickUpEntitiesTest extends BrooklynAppUnitTestSupport {
         public void setEntity(EntityLocal entity) {
             assert entity instanceof Group;
             super.setEntity(entity);
-            subscribe(null, Startable.SERVICE_UP, handler);
+            subscriptions().subscribe(null, Startable.SERVICE_UP, handler);
             for (Entity e : ((EntityInternal) entity).getManagementContext().getEntityManager().getEntities()) {
                 if (Objects.equal(e.getApplicationId(), entity.getApplicationId()))
                     updateMembership(e);
@@ -143,7 +143,7 @@ public class GroupPickUpEntitiesTest extends BrooklynAppUnitTestSupport {
         @Override
         public void setEntity(EntityLocal entity) {
             super.setEntity(entity);
-            subscribe(null, TestEntity.NAME, handler);
+            subscriptions().subscribe(null, TestEntity.NAME, handler);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/core/src/test/java/org/apache/brooklyn/entity/group/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/GroupTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/GroupTest.java
index cae461f..40c6693 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/GroupTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/GroupTest.java
@@ -74,10 +74,10 @@ public class GroupTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testEntityGetGroups() throws Exception {
         group.addMember(entity1);
-        Asserts.assertEqualsIgnoringOrder(entity1.getGroups(), ImmutableSet.of(group));
+        Asserts.assertEqualsIgnoringOrder(entity1.groups(), ImmutableSet.of(group));
         
         group.removeMember(entity1);
-        Asserts.assertEqualsIgnoringOrder(entity1.getGroups(), ImmutableSet.of());
+        Asserts.assertEqualsIgnoringOrder(entity1.groups(), ImmutableSet.of());
    }
     
     @Test
@@ -91,7 +91,7 @@ public class GroupTest extends BrooklynAppUnitTestSupport {
     public void testUnmanagedGroupAutomaticallyRemovedMembers() throws Exception {
         group.addMember(entity1);
         Entities.unmanage(group);
-        Asserts.assertEqualsIgnoringOrder(entity1.getGroups(), ImmutableSet.of());
+        Asserts.assertEqualsIgnoringOrder(entity1.groups(), ImmutableSet.of());
     }
     
     @Test
@@ -115,7 +115,7 @@ public class GroupTest extends BrooklynAppUnitTestSupport {
         mgmt.getSubscriptionManager().subscribe(entity1, AbstractEntity.GROUP_ADDED, groupAddedListener);
         mgmt.getSubscriptionManager().subscribe(entity1, AbstractEntity.GROUP_REMOVED, groupRemovedListener);
         
-        entity1.addGroup(group);
+        group.addMember(entity1);
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 String msg = "events="+groupAddedListener.getEvents();
@@ -125,7 +125,7 @@ public class GroupTest extends BrooklynAppUnitTestSupport {
             }});
         assertEquals(groupRemovedListener.getEvents().size(), 0, "events="+groupRemovedListener.getEvents());
         
-        entity1.removeGroup(group);
+        group.removeMember(entity1);
         Asserts.succeedsEventually(new Runnable() {
             public void run() {
                 String msg = "events="+groupRemovedListener.getEvents();


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

Posted by al...@apache.org.
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()));
     }
     



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

Posted by al...@apache.org.
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);
     }
 }



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

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
index a4c04b6..204ec54 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -104,7 +104,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
     @Override
     public void init() {
         super.init();
-        setAttribute(SERVER_POOL_TARGETS, ImmutableMap.<Entity, String>of());
+        sensors().set(SERVER_POOL_TARGETS, ImmutableMap.<Entity, String>of());
     }
     
     protected void addServerPoolMemberTrackingPolicy() {
@@ -116,7 +116,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             LOG.debug("Call to addServerPoolMemberTrackingPolicy when serverPoolMemberTrackingPolicy already exists, removing and re-adding, in {}", this);
             removeServerPoolMemberTrackingPolicy();
         }
-        for (Policy p: getPolicies()) {
+        for (Policy p: policies()) {
             if (p instanceof ServerPoolMemberTrackerPolicy) {
                 // TODO want a more elegant idiom for this!
                 LOG.info(this+" picking up "+p+" as the tracker (already set, often due to rebind)");
@@ -135,7 +135,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             sensorsToTrack = ImmutableSet.<AttributeSensor<?>>of(hostnameSensor, portSensor);
         }
         
-        serverPoolMemberTrackerPolicy = addPolicy(PolicySpec.create(ServerPoolMemberTrackerPolicy.class)
+        serverPoolMemberTrackerPolicy = policies().add(PolicySpec.create(ServerPoolMemberTrackerPolicy.class)
                 .displayName("Controller targets tracker")
                 .configure("group", serverPool)
                 .configure("sensorsToTrack", sensorsToTrack));
@@ -155,12 +155,12 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
         }
 
         LOG.info("Resetting {}, server pool targets {}", new Object[] {this, serverPoolTargets});
-        setAttribute(SERVER_POOL_TARGETS, serverPoolTargets);
+        sensors().set(SERVER_POOL_TARGETS, serverPoolTargets);
     }
     
     protected void removeServerPoolMemberTrackingPolicy() {
         if (serverPoolMemberTrackerPolicy != null) {
-            removePolicy(serverPoolMemberTrackerPolicy);
+            policies().remove(serverPoolMemberTrackerPolicy);
         }
     }
     
@@ -311,9 +311,9 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
 
         ConfigToAttributes.apply(this);
 
-        setAttribute(PROTOCOL, inferProtocol());
-        setAttribute(MAIN_URI, URI.create(inferUrl()));
-        setAttribute(ROOT_URL, inferUrl());
+        sensors().set(PROTOCOL, inferProtocol());
+        sensors().set(MAIN_URI, URI.create(inferUrl()));
+        sensors().set(ROOT_URL, inferUrl());
  
         checkNotNull(getPortNumberSensor(), "no sensor configured to infer port number");
     }
@@ -500,7 +500,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             Map<K, V> oldMap = entity.getAttribute(attribute);
             Map<K, V> newMap = MutableMap.copyOf(oldMap);
             V oldVal = newMap.put(key, value);
-            ((EntityInternal)entity).setAttribute(attribute, newMap);
+            ((EntityInternal)entity).sensors().set(attribute, newMap);
             return oldVal;
         }
         
@@ -508,7 +508,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             Map<K, V> oldMap = entity.getAttribute(attribute);
             Map<K, V> newMap = MutableMap.copyOf(oldMap);
             V oldVal = newMap.remove(key);
-            ((EntityInternal)entity).setAttribute(attribute, newMap);
+            ((EntityInternal)entity).sensors().set(attribute, newMap);
             return oldVal;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractNonProvisionedControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractNonProvisionedControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractNonProvisionedControllerImpl.java
index 7996444..7ad111a 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractNonProvisionedControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractNonProvisionedControllerImpl.java
@@ -124,7 +124,7 @@ public abstract class AbstractNonProvisionedControllerImpl extends AbstractEntit
     protected void addServerPoolMemberTrackerPolicy() {
         Group serverPool = getServerPool();
         if (serverPool != null) {
-            serverPoolMemberTrackerPolicy = addPolicy(PolicySpec.create(MemberTrackingPolicy.class)
+            serverPoolMemberTrackerPolicy = policies().add(PolicySpec.create(MemberTrackingPolicy.class)
                     .displayName("Controller targets tracker")
                     .configure("group", serverPool));
             
@@ -148,13 +148,13 @@ public abstract class AbstractNonProvisionedControllerImpl extends AbstractEntit
             }
             
             LOG.info("Resetting {}, members {} with addresses {}", new Object[] {this, serverPoolTargets, serverPoolAddresses});
-            setAttribute(SERVER_POOL_TARGETS, serverPoolTargets);
+            sensors().set(SERVER_POOL_TARGETS, serverPoolTargets);
         }
     }
     
     protected void removeServerPoolMemberTrackerPolicy() {
         if (serverPoolMemberTrackerPolicy != null) {
-            removePolicy(serverPoolMemberTrackerPolicy);
+            policies().remove(serverPoolMemberTrackerPolicy);
         }
     }
     
@@ -174,7 +174,7 @@ public abstract class AbstractNonProvisionedControllerImpl extends AbstractEntit
             LOG.debug("Reloading {} in response to changes", this);
             invoke(RELOAD);
         }
-        setAttribute(SERVER_POOL_TARGETS, serverPoolTargets);
+        sensors().set(SERVER_POOL_TARGETS, serverPoolTargets);
     }
     
     protected synchronized void onServerPoolMemberChanged(Entity member) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
index eadde49..2326228 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
@@ -140,7 +140,7 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
             // gate with the above check to prevent flashing on ON_FIRE during rebind (this is invoked on rebind as well as during start)
             ServiceNotUpLogic.updateNotUpIndicator(this, NGINX_URL_ANSWERS_NICELY, "No response from nginx yet");
         }
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
             .uniqueTag("not-up-unless-url-answers")
             .from(NGINX_URL_ANSWERS_NICELY)
             .computing(Functionals.ifNotEquals(true).value("URL where nginx listens is not answering correctly (with expected header)") )
@@ -151,26 +151,26 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
         Group urlMappings = getConfig(URL_MAPPINGS);
         if (urlMappings!=null && urlMappingsMemberTrackerPolicy==null) {
             // Listen to the targets of each url-mapping changing
-            targetAddressesHandler = subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
+            targetAddressesHandler = subscriptions().subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
                     @Override public void onEvent(SensorEvent<Collection<String>> event) {
                         updateNeeded();
                     }
                 });
 
             // Listen to url-mappings being added and removed
-            urlMappingsMemberTrackerPolicy = addPolicy(PolicySpec.create(UrlMappingsMemberTrackerPolicy.class)
+            urlMappingsMemberTrackerPolicy = policies().add(PolicySpec.create(UrlMappingsMemberTrackerPolicy.class)
                     .configure("group", urlMappings));
         }
     }
 
     protected void removeUrlMappingsMemberTrackerPolicy() {
         if (urlMappingsMemberTrackerPolicy != null) {
-            removePolicy(urlMappingsMemberTrackerPolicy);
+            policies().remove(urlMappingsMemberTrackerPolicy);
             urlMappingsMemberTrackerPolicy = null;
         }
         Group urlMappings = getConfig(URL_MAPPINGS);
         if (urlMappings!=null && targetAddressesHandler!=null) {
-            unsubscribe(urlMappings, targetAddressesHandler);
+            subscriptions().unsubscribe(urlMappings, targetAddressesHandler);
             targetAddressesHandler = null;
         }
     }
@@ -193,7 +193,7 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
     protected void postStop() {
         // TODO don't want stop to race with the last poll.
         super.postStop();
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index f309ca4..2cdbc91 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -71,9 +71,9 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
     public NginxSshDriver(NginxControllerImpl entity, SshMachineLocation machine) {
         super(entity, machine);
 
-        entity.setAttribute(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
-        entity.setAttribute(NginxController.ACCESS_LOG_LOCATION, getAccessLogLocation());
-        entity.setAttribute(NginxController.ERROR_LOG_LOCATION, getErrorLogLocation());
+        entity.sensors().set(Attributes.LOG_FILE_LOCATION, getLogFileLocation());
+        entity.sensors().set(NginxController.ACCESS_LOG_LOCATION, getAccessLogLocation());
+        entity.sensors().set(NginxController.ERROR_LOG_LOCATION, getErrorLogLocation());
     }
 
     @Override
@@ -117,12 +117,12 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
 
     @Override
     public void postLaunch() {
-        entity.setAttribute(NginxController.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
+        entity.sensors().set(NginxController.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
         if (((AbstractController)entity).isSsl()) {
-            entity.setAttribute(Attributes.HTTPS_PORT, getPort());
+            entity.sensors().set(Attributes.HTTPS_PORT, getPort());
             ((EntityInternal)entity).removeAttribute(Attributes.HTTP_PORT);
         } else {
-            entity.setAttribute(Attributes.HTTP_PORT, getPort());
+            entity.sensors().set(Attributes.HTTP_PORT, getPort());
             ((EntityInternal)entity).removeAttribute(Attributes.HTTPS_PORT);
         }
         super.postLaunch();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
index 121219a..c8f2afe 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
@@ -80,7 +80,7 @@ public class UrlMappingImpl extends AbstractGroupImpl implements UrlMapping {
             rewrites = new ArrayList<UrlRewriteRule>();
         }
         rewrites.add(rule);
-        setConfig(REWRITES, rewrites);
+        config().set(REWRITES, rewrites);
         return this;
     }
 
@@ -101,7 +101,7 @@ public class UrlMappingImpl extends AbstractGroupImpl implements UrlMapping {
 
     @Override
     public void setTarget(Entity target) {
-        setConfig(TARGET_PARENT, target);
+        config().set(TARGET_PARENT, target);
         recompute();
     }
 
@@ -162,7 +162,7 @@ public class UrlMappingImpl extends AbstractGroupImpl implements UrlMapping {
         Set<String> result = Collections.unmodifiableSet(resultM);
         Collection<String> oldAddresses = getAttribute(TARGET_ADDRESSES);
         if (oldAddresses == null || !result.equals(ImmutableSet.copyOf(oldAddresses))) {
-            setAttribute(TARGET_ADDRESSES, result);
+            sensors().set(TARGET_ADDRESSES, result);
         }
     }
 
@@ -189,14 +189,14 @@ public class UrlMappingImpl extends AbstractGroupImpl implements UrlMapping {
 
         Entity t = getTarget();
         if (t != null) {
-            subscriptionHandle = subscribeToChildren(t, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+            subscriptionHandle = subscriptions().subscribeToChildren(t, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
                 @Override public void onEvent(SensorEvent<Boolean> event) {
                     boolean changed = (event.getValue()) ? addMember(event.getSource()) : removeMember(event.getSource());
                     if (changed) {
                         recomputeAddresses();
                     }
                 }});
-            subscriptionHandle2 = subscribe(t, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
+            subscriptionHandle2 = subscriptions().subscribe(t, Changeable.MEMBER_REMOVED, new SensorEventListener<Entity>() {
                 @Override public void onEvent(SensorEvent<Entity> event) {
                     removeMember(event.getValue());
                     // recompute, irrespective of change, because framework may have already invoked the removeMember call

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
index 3785a47..be7b5a7 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
@@ -90,7 +90,7 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme
         if (webServerFactory == null && webServerSpec == null) {
             log.debug("creating default web server spec for {}", this);
             webServerSpec = EntitySpec.create(TomcatServer.class);
-            setAttribute(MEMBER_SPEC, webServerSpec);
+            sensors().set(MEMBER_SPEC, webServerSpec);
         }
         
         log.debug("creating cluster child for {}", this);
@@ -114,11 +114,11 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme
         } else {
             log.warn("In {}, not setting cluster's {} because already set on webClusterSpec", new Object[] {this, webClusterFlags.keySet()});
         }
-        setAttribute(WEB_CLUSTER_SPEC, webClusterSpec);
+        sensors().set(WEB_CLUSTER_SPEC, webClusterSpec);
         
         DynamicWebAppCluster cluster = addChild(webClusterSpec);
         if (Entities.isManaged(this)) Entities.manage(cluster);
-        setAttribute(CLUSTER, cluster);
+        sensors().set(CLUSTER, cluster);
         setEntityFilter(EntityPredicates.isMemberOf(cluster));
         
         LoadBalancer controller = getAttribute(CONTROLLER);
@@ -127,21 +127,21 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme
             if (controllerSpec == null) {
                 log.debug("creating controller using default spec for {}", this);
                 controllerSpec = EntitySpec.create(NginxController.class);
-                setAttribute(CONTROLLER_SPEC, controllerSpec);
+                sensors().set(CONTROLLER_SPEC, controllerSpec);
             } else {
                 log.debug("creating controller using custom spec for {}", this);
             }
             controller = addChild(controllerSpec);
-            addEnricher(Enrichers.builder().propagating(LoadBalancer.PROXY_HTTP_PORT, LoadBalancer.PROXY_HTTPS_PORT).from(controller).build());
+            enrichers().add(Enrichers.builder().propagating(LoadBalancer.PROXY_HTTP_PORT, LoadBalancer.PROXY_HTTPS_PORT).from(controller).build());
             if (Entities.isManaged(this)) Entities.manage(controller);
-            setAttribute(CONTROLLER, controller);
+            sensors().set(CONTROLLER, controller);
         }
         
         Group controlledGroup = getAttribute(CONTROLLED_GROUP);
         if (controlledGroup == null) {
             log.debug("using cluster as controlledGroup for {}", this);
             controlledGroup = cluster;
-            setAttribute(CONTROLLED_GROUP, cluster);
+            sensors().set(CONTROLLED_GROUP, cluster);
         } else {
             log.debug("using custom controlledGroup {} for {}", controlledGroup, this);
         }
@@ -167,7 +167,7 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme
     protected void doBind() {
         DynamicWebAppCluster cluster = getAttribute(CLUSTER);
         if (cluster != null) {
-            subscribe(cluster, DynamicWebAppCluster.GROUP_MEMBERS, new SensorEventListener<Object>() {
+            subscriptions().subscribe(cluster, DynamicWebAppCluster.GROUP_MEMBERS, new SensorEventListener<Object>() {
                 @Override public void onEvent(SensorEvent<Object> event) {
                     // TODO inefficient impl; also worth extracting this into a mixin of some sort.
                     rescanEntities();
@@ -277,11 +277,11 @@ public class ControlledDynamicWebAppClusterImpl extends DynamicGroupImpl impleme
     
     void connectSensors() {
         // FIXME no longer needed
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 .propagatingAllButUsualAnd(Attributes.MAIN_URI, ROOT_URL, GROUP_MEMBERS, GROUP_SIZE)
                 .from(getCluster())
                 .build());
-        addEnricher(Enrichers.builder()
+        enrichers().add(Enrichers.builder()
                 // include hostname and address of controller (need both in case hostname only resolves to internal/private ip)
                 .propagating(LoadBalancer.HOSTNAME, Attributes.ADDRESS, Attributes.MAIN_URI, ROOT_URL)
                 .from(getController())

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterImpl.java
index 81f72f9..4fbf1be 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterImpl.java
@@ -98,7 +98,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         for (List<? extends AttributeSensor<? extends Number>> es : summingEnricherSetup) {
             AttributeSensor<? extends Number> t = es.get(0);
             AttributeSensor<? extends Number> total = es.get(1);
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(t)
                     .publishing(total)
                     .fromMembers()
@@ -111,7 +111,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
             AttributeSensor<Number> t = (AttributeSensor<Number>) es.get(0);
             @SuppressWarnings("unchecked")
             AttributeSensor<Double> average = (AttributeSensor<Double>) es.get(1);
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(t)
                     .publishing(average)
                     .fromMembers()
@@ -187,7 +187,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         // TODO support for atomic sensor update (should be part of standard tooling; NB there is some work towards this, according to @aledsage)
         Set<String> deployedWars = MutableSet.copyOf(getAttribute(DEPLOYED_WARS));
         deployedWars.add(targetName);
-        setAttribute(DEPLOYED_WARS, deployedWars);
+        sensors().set(DEPLOYED_WARS, deployedWars);
     }
     
     @Override
@@ -213,7 +213,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         // Update attribute
         Set<String> deployedWars = MutableSet.copyOf(getAttribute(DEPLOYED_WARS));
         deployedWars.remove( FILENAME_TO_WEB_CONTEXT_MAPPER.convertDeploymentTargetNameToContext(targetName) );
-        setAttribute(DEPLOYED_WARS, deployedWars);
+        sensors().set(DEPLOYED_WARS, deployedWars);
     }
 
     static void addToWarsByContext(Entity entity, String url, String targetName) {
@@ -222,7 +222,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         synchronized (entity) {
             Map<String,String> newWarsMap = MutableMap.copyOf(entity.getConfig(WARS_BY_CONTEXT));
             newWarsMap.put(targetName, url);
-            ((EntityInternal)entity).setConfig(WARS_BY_CONTEXT, newWarsMap);
+            entity.config().set(WARS_BY_CONTEXT, newWarsMap);
         }
     }
 
@@ -235,7 +235,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
             if (url==null) {
                 return false;
             }
-            ((EntityInternal)entity).setConfig(WARS_BY_CONTEXT, newWarsMap);
+            entity.config().set(WARS_BY_CONTEXT, newWarsMap);
             return true;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricImpl.java
index 2c9747d..5e6dd58 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricImpl.java
@@ -54,7 +54,7 @@ public class DynamicWebAppFabricImpl extends DynamicFabricImpl implements Dynami
         for (List<? extends AttributeSensor<? extends Number>> es : summingEnricherSetup) {
             AttributeSensor<? extends Number> t = es.get(0);
             AttributeSensor<? extends Number> total = es.get(1);
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .aggregating(t)
                     .publishing(total)
                     .fromMembers()
@@ -69,7 +69,7 @@ public class DynamicWebAppFabricImpl extends DynamicFabricImpl implements Dynami
             AttributeSensor<Double> average = (AttributeSensor<Double>) es.get(1);
             
             // TODO This needs to respond to changes in FABRIC_SIZE as well, to recalculate
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .transforming(t)
                     .publishing(average)
                     .computing(new Function<Number, Double>() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
index 8721162..7099276 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
@@ -75,7 +75,7 @@ public abstract class JavaWebAppSoftwareProcessImpl extends SoftwareProcessImpl
 
     // TODO thread-safety issues: if multiple concurrent calls, may break (e.g. deployment_wars being reset)
     public void deployInitialWars() {
-        if (getAttribute(DEPLOYED_WARS) == null) setAttribute(DEPLOYED_WARS, Sets.<String>newLinkedHashSet());
+        if (getAttribute(DEPLOYED_WARS) == null) sensors().set(DEPLOYED_WARS, Sets.<String>newLinkedHashSet());
         
         String rootWar = getConfig(ROOT_WAR);
         if (rootWar!=null) deploy(rootWar, "ROOT.war");
@@ -134,7 +134,7 @@ public abstract class JavaWebAppSoftwareProcessImpl extends SoftwareProcessImpl
                 deployedWars = Sets.newLinkedHashSet();
             }
             deployedWars.add(deployedName);
-            setAttribute(DEPLOYED_WARS, deployedWars);
+            sensors().set(DEPLOYED_WARS, deployedWars);
         } catch (RuntimeException e) {
             // Log and propagate, so that log says which entity had problems...
             LOG.warn("Error deploying '"+url+"' to "+targetName+" on "+toString()+"; rethrowing...", e);
@@ -157,7 +157,7 @@ public abstract class JavaWebAppSoftwareProcessImpl extends SoftwareProcessImpl
                 deployedWars = Sets.newLinkedHashSet();
             }
             deployedWars.remove( driver.getFilenameContextMapper().convertDeploymentTargetNameToContext(targetName) );
-            setAttribute(DEPLOYED_WARS, deployedWars);
+            sensors().set(DEPLOYED_WARS, deployedWars);
         } catch (RuntimeException e) {
             // Log and propagate, so that log says which entity had problems...
             LOG.warn("Error undeploying '"+targetName+"' on "+toString()+"; rethrowing...", e);
@@ -172,8 +172,8 @@ public abstract class JavaWebAppSoftwareProcessImpl extends SoftwareProcessImpl
         // TODO might not be enough, as policy may still be executing and have a record of historic vals; should remove policies
         // (also not sure we want this; implies more generally a responsibility for sensors to announce things when disconnected,
         // vs them just showing the last known value...)
-        setAttribute(REQUESTS_PER_SECOND_LAST, 0D);
-        setAttribute(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
+        sensors().set(REQUESTS_PER_SECOND_LAST, 0D);
+        sensors().set(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
     }
 
     public boolean isHttpEnabled() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSshDriver.java
index 5c81dc4..2a149e7 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSshDriver.java
@@ -106,8 +106,8 @@ public abstract class JavaWebAppSshDriver extends JavaSoftwareProcessSshDriver i
     @Override
     public void postLaunch() {
         String rootUrl = inferRootUrl();
-        entity.setAttribute(Attributes.MAIN_URI, URI.create(rootUrl));
-        entity.setAttribute(WebAppService.ROOT_URL, rootUrl);
+        entity.sensors().set(Attributes.MAIN_URI, URI.create(rootUrl));
+        entity.sensors().set(WebAppService.ROOT_URL, rootUrl);
     }
 
     /** 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/WebAppServiceMethods.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/WebAppServiceMethods.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/WebAppServiceMethods.java
index 0fdf149..3ce748b 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/WebAppServiceMethods.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/WebAppServiceMethods.java
@@ -42,17 +42,17 @@ public class WebAppServiceMethods implements WebAppServiceConstants {
     }
 
     public static void connectWebAppServerPolicies(EntityLocal entity, Duration windowPeriod) {
-        entity.addEnricher(TimeWeightedDeltaEnricher.<Integer>getPerSecondDeltaEnricher(entity, REQUEST_COUNT, REQUESTS_PER_SECOND_LAST));
+        entity.enrichers().add(TimeWeightedDeltaEnricher.<Integer>getPerSecondDeltaEnricher(entity, REQUEST_COUNT, REQUESTS_PER_SECOND_LAST));
 
         if (windowPeriod!=null) {
-            entity.addEnricher(new RollingTimeWindowMeanEnricher<Double>(entity, REQUESTS_PER_SECOND_LAST,
+            entity.enrichers().add(new RollingTimeWindowMeanEnricher<Double>(entity, REQUESTS_PER_SECOND_LAST,
                     REQUESTS_PER_SECOND_IN_WINDOW, windowPeriod));
         }
 
-        entity.addEnricher(new TimeFractionDeltaEnricher<Integer>(entity, TOTAL_PROCESSING_TIME, PROCESSING_TIME_FRACTION_LAST, TimeUnit.MILLISECONDS));
+        entity.enrichers().add(new TimeFractionDeltaEnricher<Integer>(entity, TOTAL_PROCESSING_TIME, PROCESSING_TIME_FRACTION_LAST, TimeUnit.MILLISECONDS));
 
         if (windowPeriod!=null) {
-            entity.addEnricher(new RollingTimeWindowMeanEnricher<Double>(entity, PROCESSING_TIME_FRACTION_LAST,
+            entity.enrichers().add(new RollingTimeWindowMeanEnricher<Double>(entity, PROCESSING_TIME_FRACTION_LAST,
                     PROCESSING_TIME_FRACTION_IN_WINDOW, windowPeriod));
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
index e542af6..30509a9 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
@@ -84,7 +84,7 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
 
     @Override
     public void postLaunch() {
-        entity.setAttribute(JBoss6Server.HTTP_PORT, DEFAULT_HTTP_PORT + getPortIncrement());
+        entity.sensors().set(JBoss6Server.HTTP_PORT, DEFAULT_HTTP_PORT + getPortIncrement());
         super.postLaunch();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
index 51e624d..4ebd545 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
@@ -78,7 +78,7 @@ public class JBoss7ServerImpl extends JavaWebAppSoftwareProcessImpl implements J
         
         String managementUri = String.format("http://%s:%s/management/subsystem/web/connector/http/read-resource",
                 hp.getHostText(), hp.getPort());
-        setAttribute(MANAGEMENT_URL, managementUri);
+        sensors().set(MANAGEMENT_URL, managementUri);
         log.debug("JBoss sensors for "+this+" reading from "+managementUri);
         Map<String, String> includeRuntimeUriVars = ImmutableMap.of("include-runtime","true");
         boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS);
@@ -128,7 +128,7 @@ public class JBoss7ServerImpl extends JavaWebAppSoftwareProcessImpl implements J
     protected void connectServiceUp() {
         connectServiceUpIsRunning();
         
-        addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+        enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
             .from(MANAGEMENT_URL_UP)
             .computing(Functionals.ifNotEquals(true).value("Management URL not reachable") )
             .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index 8425b6a..1468d24 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -145,7 +145,7 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver
         String managementPassword = getManagementPassword();
         if (Strings.isBlank(managementPassword)) {
             LOG.debug(this+" has no password specified for "+JBoss7Server.MANAGEMENT_PASSWORD.getName()+"; using a random string");
-            entity.setConfig(JBoss7Server.MANAGEMENT_PASSWORD, Strings.makeRandomId(8));
+            entity.config().set(JBoss7Server.MANAGEMENT_PASSWORD, Strings.makeRandomId(8));
         }
         String hashedPassword = hashPassword(getManagementUsername(), getManagementPassword(), MANAGEMENT_REALM);
 
@@ -196,7 +196,7 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver
 
     @Override
     public void launch() {
-        entity.setAttribute(JBoss7Server.PID_FILE, Os.mergePathsUnix(getRunDir(), PID_FILENAME));
+        entity.sensors().set(JBoss7Server.PID_FILE, Os.mergePathsUnix(getRunDir(), PID_FILENAME));
 
         // We wait for evidence of JBoss running because, using SshCliTool,
         // we saw the ssh session return before the JBoss process was fully running

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6ServerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6ServerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6ServerImpl.java
index d8f2433..c772b51 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6ServerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6ServerImpl.java
@@ -76,7 +76,7 @@ public class Jetty6ServerImpl extends JavaWebAppSoftwareProcessImpl implements J
                     // NB: requestsActive may be useful
                     .build();
             
-            addEnricher(Enrichers.builder()
+            enrichers().add(Enrichers.builder()
                     .combining(RESPONSES_4XX_COUNT, RESPONSES_5XX_COUNT)
                     .publishing(ERROR_COUNT)
                     .computingSum()

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppServiceImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppServiceImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppServiceImpl.java
index d72b6db..449680b 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppServiceImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppServiceImpl.java
@@ -81,8 +81,8 @@ public class NodeJsWebAppServiceImpl extends SoftwareProcessImpl implements Node
     protected void postStop() {
         super.postStop();
 
-        setAttribute(REQUESTS_PER_SECOND_LAST, 0D);
-        setAttribute(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
+        sensors().set(REQUESTS_PER_SECOND_LAST, 0D);
+        sensors().set(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
index b1d7523..e6001ca 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
@@ -67,8 +67,8 @@ public class NodeJsWebAppSshDriver extends AbstractSoftwareProcessSshDriver impl
     @Override
     public void postLaunch() {
         String rootUrl = String.format("http://%s:%d/", getHostname(), getHttpPort());
-        entity.setAttribute(Attributes.MAIN_URI, URI.create(rootUrl));
-        entity.setAttribute(WebAppService.ROOT_URL, rootUrl);
+        entity.sensors().set(Attributes.MAIN_URI, URI.create(rootUrl));
+        entity.sensors().set(WebAppService.ROOT_URL, rootUrl);
     }
 
     protected Map<String, Integer> getPortMap() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
index f37c49a..e8aa73f 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
@@ -200,7 +200,7 @@ public class AbstractGeoDnsServiceTest {
 
     @Test
     public void testSubscribesToHostname() {
-        ((EntityInternal)geoDns).setConfig(GeoDnsTestServiceImpl.ADD_ANYTHING, false);
+        ((EntityInternal)geoDns).config().set(GeoDnsTestServiceImpl.ADD_ANYTHING, false);
         app.start( ImmutableList.of(westChild, eastChildWithLocationAndWithPrivateHostname) );
         Assert.assertEquals(geoDns.getTargetHostsByName().size(), 0);
         publishSensors(2, true, true, true);
@@ -218,15 +218,15 @@ public class AbstractGeoDnsServiceTest {
         
         for (Entity e: testEntities.getMembers()) {
             if (includeServiceUp)
-                ((EntityInternal)e).setAttribute(Attributes.SERVICE_UP, true);
+                ((EntityInternal)e).sensors().set(Attributes.SERVICE_UP, true);
             
             SshMachineLocation l = Machines.findUniqueSshMachineLocation(e.getLocations()).get();
             if (includeAddress)
-                ((EntityInternal)e).setAttribute(Attributes.ADDRESS, l.getAddress().getHostAddress());
+                ((EntityInternal)e).sensors().set(Attributes.ADDRESS, l.getAddress().getHostAddress());
             String h = (String) l.config().getBag().getStringKey("hostname");
             if (h==null) h = l.getAddress().getHostName();
             if (includeHostname)
-                ((EntityInternal)e).setAttribute(Attributes.HOSTNAME, h);
+                ((EntityInternal)e).sensors().set(Attributes.HOSTNAME, h);
         }
     }
     
@@ -252,7 +252,7 @@ public class AbstractGeoDnsServiceTest {
 
     @Test
     public void testFiltersEntirelyPrivate() {
-        ((EntityInternal)geoDns).setConfig(GeoDnsTestServiceImpl.ADD_ANYTHING, false);
+        ((EntityInternal)geoDns).config().set(GeoDnsTestServiceImpl.ADD_ANYTHING, false);
         app.start( ImmutableList.of(westChild, eastChildWithLocationAndWithPrivateHostname, northChildWithLocation) );
         Assert.assertEquals(geoDns.getTargetHostsByName().size(), 0);
         publishSensors(3, true, true, true);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
index 95c0c6f..f030987 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingIntegrationTest.java
@@ -121,9 +121,9 @@ public class GeoscalingIntegrationTest {
     @Test(groups={"Integration"})
     public void testRoutesToExpectedLocation() {
         // Without this config, running on a home network (i.e. no public IP) the entity will have a private IP and will be ignored
-        ((EntityLocal)geoDns).setConfig(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, true);
+        ((EntityLocal)geoDns).config().set(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, true);
         
-        target.setAttribute(Attributes.HOSTNAME,addrWithGeo.getHostName());
+        target.sensors().set(Attributes.HOSTNAME,addrWithGeo.getHostName());
         
         app.start(ImmutableList.of(locWithGeo));
         
@@ -135,10 +135,10 @@ public class GeoscalingIntegrationTest {
     @Test(groups={"Integration"})
     public void testIgnoresAddressWithoutGeography() throws Exception {
         System.setProperty(BrooklynSystemProperties.HOST_GEO_LOOKUP_IMPL.getPropertyName(), StubHostGeoLookup.class.getName());
-        ((EntityLocal)geoDns).setConfig(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, false); // false is default
+        ((EntityLocal)geoDns).config().set(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, false); // false is default
         
         app.start(ImmutableList.of(locWithoutGeo));
-        target.setAttribute(Attributes.HOSTNAME, StubHostGeoLookup.HOMELESS_IP);
+        target.sensors().set(Attributes.HOSTNAME, StubHostGeoLookup.HOMELESS_IP);
         
         LOG.info("geo-scaling test, using {}.{}; expect not to be wired to {}", new Object[] {subDomain, primaryDomain, addrWithoutGeo});
         
@@ -152,10 +152,10 @@ public class GeoscalingIntegrationTest {
     @Test(groups={"Integration"})
     public void testIncludesAddressWithoutGeography() {
         System.setProperty(BrooklynSystemProperties.HOST_GEO_LOOKUP_IMPL.getPropertyName(), StubHostGeoLookup.class.getName());
-        ((EntityLocal)geoDns).setConfig(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, true);
+        ((EntityLocal)geoDns).config().set(GeoscalingDnsService.INCLUDE_HOMELESS_ENTITIES, true);
         
         app.start(ImmutableList.of(locWithoutGeo));
-        target.setAttribute(Attributes.HOSTNAME, StubHostGeoLookup.HOMELESS_IP);
+        target.sensors().set(Attributes.HOSTNAME, StubHostGeoLookup.HOMELESS_IP);
         
         LOG.info("geo-scaling test, using {}.{}; expect to be wired to {}", new Object[] {subDomain, primaryDomain, addrWithoutGeo});
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
index bc2503c..ff84dce 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
@@ -110,25 +110,25 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         List<Collection<String>> u = Lists.newArrayList(controller.getUpdates());
         assertTrue(u.isEmpty(), "expected no updates, but got "+u);
         
-        child.setAttribute(Startable.SERVICE_UP, true);
+        child.sensors().set(Startable.SERVICE_UP, true);
         
         // TODO Ugly sleep to allow AbstractController to detect node having been added
         Thread.sleep(100);
         
-        child.setAttribute(ClusteredEntity.HOSTNAME, "mymachine");
-        child.setAttribute(Attributes.SUBNET_HOSTNAME, "mymachine");
-        child.setAttribute(ClusteredEntity.HTTP_PORT, 1234);
+        child.sensors().set(ClusteredEntity.HOSTNAME, "mymachine");
+        child.sensors().set(Attributes.SUBNET_HOSTNAME, "mymachine");
+        child.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine:1234"));
         
-        child.setAttribute(ClusteredEntity.HOSTNAME, "mymachine2");
-        child.setAttribute(Attributes.SUBNET_HOSTNAME, "mymachine2");
+        child.sensors().set(ClusteredEntity.HOSTNAME, "mymachine2");
+        child.sensors().set(Attributes.SUBNET_HOSTNAME, "mymachine2");
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine2:1234"));
         
-        child.setAttribute(ClusteredEntity.HTTP_PORT, 1235);
+        child.sensors().set(ClusteredEntity.HTTP_PORT, 1235);
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine2:1235"));
         
-        child.setAttribute(ClusteredEntity.HOSTNAME, null);
-        child.setAttribute(Attributes.SUBNET_HOSTNAME, null);
+        child.sensors().set(ClusteredEntity.HOSTNAME, null);
+        child.sensors().set(Attributes.SUBNET_HOSTNAME, null);
         assertEventuallyExplicitAddressesMatch(ImmutableList.<String>of());
     }
 
@@ -141,8 +141,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         List<Collection<String>> u = Lists.newArrayList(controller.getUpdates());
         assertTrue(u.isEmpty(), "expected empty list but got "+u);
         
-        child.setAttribute(ClusteredEntity.HTTP_PORT, 1234);
-        child.setAttribute(Startable.SERVICE_UP, true);
+        child.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+        child.sensors().set(Startable.SERVICE_UP, true);
         assertEventuallyAddressesMatchCluster();
 
         // Second child
@@ -154,8 +154,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
             }});
         EntityLocal child2 = (EntityLocal) Iterables.getOnlyElement(MutableSet.builder().addAll(cluster.getMembers()).remove(child).build());
         
-        child2.setAttribute(ClusteredEntity.HTTP_PORT, 1234);
-        child2.setAttribute(Startable.SERVICE_UP, true);
+        child2.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+        child2.sensors().set(Startable.SERVICE_UP, true);
         assertEventuallyAddressesMatchCluster();
         
         // And remove all children; expect all addresses to go away
@@ -173,8 +173,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         // Get some children, so we can remove one...
         cluster.resize(2);
         for (Entity it: cluster.getMembers()) { 
-            ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, 1234);
-            ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, true);
+            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, true);
         }
         assertEventuallyAddressesMatchCluster();
 
@@ -189,17 +189,17 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         // Get some children, so we can remove one...
         cluster.resize(2);
         for (Entity it: cluster.getMembers()) { 
-            ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, 1234);
-            ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, true);
+            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, true);
         }
         assertEventuallyAddressesMatchCluster();
 
         // Now unset host/port, and remove children
         // Note the unsetting of hostname is done in SoftwareProcessImpl.stop(), so this is realistic
         for (Entity it : cluster.getMembers()) {
-            ((EntityLocal)it).setAttribute(ClusteredEntity.HTTP_PORT, null);
-            ((EntityLocal)it).setAttribute(ClusteredEntity.HOSTNAME, null);
-            ((EntityLocal)it).setAttribute(Startable.SERVICE_UP, false);
+            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, null);
+            ((EntityLocal)it).sensors().set(ClusteredEntity.HOSTNAME, null);
+            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, false);
         }
         assertEventuallyAddressesMatch(ImmutableList.<Entity>of());
     }
@@ -219,12 +219,12 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         List<Collection<String>> u = Lists.newArrayList(controller.getUpdates());
         assertTrue(u.isEmpty(), "expected no updates, but got "+u);
         
-        child.setAttribute(Startable.SERVICE_UP, true);
+        child.sensors().set(Startable.SERVICE_UP, true);
         
         // TODO Ugly sleep to allow AbstractController to detect node having been added
         Thread.sleep(100);
         
-        child.setAttribute(ClusteredEntity.HOST_AND_PORT, "mymachine:1234");
+        child.sensors().set(ClusteredEntity.HOST_AND_PORT, "mymachine:1234");
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine:1234"));
     }
 
@@ -277,7 +277,7 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         cluster.addMember(child);
 
         for (int i = 0; i < 100; i++) {
-            child.setAttribute(Attributes.SERVICE_UP, true);
+            child.sensors().set(Attributes.SERVICE_UP, true);
         }
         
         Thread.sleep(100);
@@ -352,8 +352,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
                 throw Exceptions.propagate(e);
             }
             addLocations(Arrays.asList(machine));
-            setAttribute(HOSTNAME, machine.getAddress().getHostName());
-            setAttribute(Attributes.SUBNET_HOSTNAME, machine.getAddress().getHostName());
+            sensors().set(HOSTNAME, machine.getAddress().getHostName());
+            sensors().set(Attributes.SUBNET_HOSTNAME, machine.getAddress().getHostName());
         }
         public void stop() {
             if (provisioner!=null) provisioner.release((MachineLocation) firstLocation());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/StubAppServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/StubAppServer.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/StubAppServer.java
index 2d75f98..7d18021 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/StubAppServer.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/StubAppServer.java
@@ -71,13 +71,13 @@ public class StubAppServer extends AbstractEntity implements Startable {
     
     private void startInLocation(MachineLocation loc) {
         addLocations(ImmutableList.of((Location)loc));
-        setAttribute(HOSTNAME, loc.getAddress().getHostName());
-        setAttribute(HTTP_PORT, nextPort.getAndIncrement());
-        setAttribute(SERVICE_UP, true);
+        sensors().set(HOSTNAME, loc.getAddress().getHostName());
+        sensors().set(HTTP_PORT, nextPort.getAndIncrement());
+        sensors().set(SERVICE_UP, true);
     }
 
     public void stop() {
-        setAttribute(SERVICE_UP, false);
+        sensors().set(SERVICE_UP, false);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/TrackingAbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/TrackingAbstractControllerImpl.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/TrackingAbstractControllerImpl.java
index 4291e33..f0b165d 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/TrackingAbstractControllerImpl.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/TrackingAbstractControllerImpl.java
@@ -43,7 +43,7 @@ public class TrackingAbstractControllerImpl extends AbstractControllerImpl imple
     @Override
     public void connectSensors() {
         super.connectSensors();
-        setAttribute(SERVICE_UP, true);
+        sensors().set(SERVICE_UP, true);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
index 56ed612..a571627 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
@@ -139,7 +139,7 @@ public class UrlMappingTest {
         assertExpectedTargetsEventually(members);
         
         // Stop one member, and expect the URL Mapping to be updated accordingly
-        target1.setAttribute(StubAppServer.SERVICE_UP, false);
+        target1.sensors().set(StubAppServer.SERVICE_UP, false);
 
         assertExpectedTargetsEventually(ImmutableSet.of(target2));
     }
@@ -178,7 +178,7 @@ public class UrlMappingTest {
         
         // Stop one member, and expect the URL Mapping to be updated accordingly
         log.info("pretending one node down");
-        target1.setAttribute(StubAppServer.SERVICE_UP, false);
+        target1.sensors().set(StubAppServer.SERVICE_UP, false);
         assertExpectedTargetsEventually(ImmutableSet.of(target2, target3));
 
         // Unmanage a member, and expect the URL Mapping to be updated accordingly

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
index abaa2d6..b54394a 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
@@ -219,8 +219,8 @@ public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
                 .certificateDestination(getFile("ssl/certs/localhost/server.crt"))
                 .keyDestination(getFile("ssl/certs/localhost/server.key"))
                 .build();
-        ((EntityInternal)nginx).setConfig(LoadBalancer.PROXY_HTTPS_PORT, PortRanges.fromString("8443+"));
-        ((EntityInternal)nginx).setConfig(NginxController.SSL_CONFIG, ssl);
+        ((EntityInternal)nginx).config().set(LoadBalancer.PROXY_HTTPS_PORT, PortRanges.fromString("8443+"));
+        ((EntityInternal)nginx).config().set(NginxController.SSL_CONFIG, ssl);
 
         try {
             log.info("restarting nginx as ssl");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
index 9c77b45..728acae 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
@@ -437,7 +437,7 @@ public abstract class AbstractWebAppFixtureIntegrationTest {
         URL resource = getClass().getClassLoader().getResource(war);
         assertNotNull(resource);
         
-        ((EntityLocal)entity).setConfig(JavaWebAppService.ROOT_WAR, resource.toString());
+        ((EntityLocal)entity).config().set(JavaWebAppService.ROOT_WAR, resource.toString());
         Entities.start(entity.getApplication(), ImmutableList.of(loc));
         
         //tomcat may need a while to unpack everything
@@ -459,7 +459,7 @@ public abstract class AbstractWebAppFixtureIntegrationTest {
         URL resource = getClass().getClassLoader().getResource(war);
         assertNotNull(resource);
         
-        ((EntityLocal)entity).setConfig(JavaWebAppService.NAMED_WARS, ImmutableList.of(resource.toString()));
+        ((EntityLocal)entity).config().set(JavaWebAppService.NAMED_WARS, ImmutableList.of(resource.toString()));
         Entities.start(entity.getApplication(), ImmutableList.of(loc));
 
         Asserts.succeedsEventually(MutableMap.of("timeout", 60*1000), new Runnable() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
index 8b340ec..aa6d030 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
@@ -140,7 +140,7 @@ public class ControlledDynamicWebAppClusterIntegrationTest extends BrooklynAppLi
         EntityTestUtils.assertAttributeEqualsEventually(cluster, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
         
         RecordingSensorEventListener<Lifecycle> listener = new RecordingSensorEventListener<Lifecycle>(true);
-        app.subscribe(cluster, Attributes.SERVICE_STATE_ACTUAL, listener);
+        app.subscriptions().subscribe(cluster, Attributes.SERVICE_STATE_ACTUAL, listener);
         app.start(locs);
         
         Asserts.eventually(Suppliers.ofInstance(listener.getEventValues()), CollectionFunctionals.sizeEquals(2));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
index c33c862..b12e6f9 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
@@ -88,8 +88,8 @@ public class ControlledDynamicWebAppClusterTest extends BrooklynAppUnitTestSuppo
     @Test
     public void testUsesCustomControlledGroup() {
         TestJavaWebAppEntity webServer = app.createAndManageChild(EntitySpec.create(TestJavaWebAppEntity.class));
-        webServer.setAttribute(Attributes.SUBNET_HOSTNAME, "myhostname");
-        webServer.setAttribute(Attributes.HTTP_PORT, 1234);
+        webServer.sensors().set(Attributes.SUBNET_HOSTNAME, "myhostname");
+        webServer.sensors().set(Attributes.HTTP_PORT, 1234);
         
         TrackingAbstractController controller = app.createAndManageChild(EntitySpec.create(TrackingAbstractController.class));
         Group controlledGroup = app.createAndManageChild(EntitySpec.create(BasicGroup.class));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
index 29d2d2a..c463520 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
@@ -98,7 +98,7 @@ public class DynamicWebAppClusterTest {
         EntityTestUtils.assertAttributeEqualsEventually(cluster, DynamicWebAppCluster.SERVICE_UP, true);
         
         // When child is !service_up, should report false
-        ((EntityLocal)Iterables.get(cluster.getMembers(), 0)).setAttribute(Startable.SERVICE_UP, false);
+        ((EntityLocal)Iterables.get(cluster.getMembers(), 0)).sensors().set(Startable.SERVICE_UP, false);
         EntityTestUtils.assertAttributeEqualsEventually(cluster, DynamicWebAppCluster.SERVICE_UP, false);
         EntityTestUtils.assertAttributeEqualsContinually(MutableMap.of("timeout", SHORT_WAIT_MS), cluster, DynamicWebAppCluster.SERVICE_UP, false);
         
@@ -109,7 +109,7 @@ public class DynamicWebAppClusterTest {
 
         // And if that serviceUp child goes away, should again report false
         Entities.unmanage(Iterables.get(cluster.getMembers(), 1));
-        ((EntityLocal)Iterables.get(cluster.getMembers(), 0)).setAttribute(Startable.SERVICE_UP, false);
+        ((EntityLocal)Iterables.get(cluster.getMembers(), 0)).sensors().set(Startable.SERVICE_UP, false);
         
         EntityTestUtils.assertAttributeEqualsEventually(cluster, DynamicWebAppCluster.SERVICE_UP, false);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
index d16b74a..bdc81f4 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
@@ -73,11 +73,11 @@ public class DynamicWebAppFabricTest {
         
         app.start(locs);
         for (Entity member : fabric.getChildren()) {
-            ((EntityLocal)member).setAttribute(Changeable.GROUP_SIZE, 1);
+            ((EntityLocal)member).sensors().set(Changeable.GROUP_SIZE, 1);
         }
         
         for (Entity member : fabric.getChildren()) {
-            ((EntityInternal)member).setAttribute(DynamicGroup.GROUP_SIZE, 1);
+            ((EntityInternal)member).sensors().set(DynamicGroup.GROUP_SIZE, 1);
             ((TestJavaWebAppEntity)member).spoofRequest();
         }
         EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", TIMEOUT_MS), fabric, DynamicWebAppFabric.REQUEST_COUNT, 2);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ElasticCustomLocationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ElasticCustomLocationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ElasticCustomLocationTest.java
index 5f7afde..5eb8496 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ElasticCustomLocationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/ElasticCustomLocationTest.java
@@ -73,8 +73,8 @@ public class ElasticCustomLocationTest {
     @Test
     public void testElasticClusterCreatesTestEntity() {
         MockWebServiceLocation l = new MockWebServiceLocation();
-        app.setConfig(MockWebService.ROOT_WAR, "WAR0");
-        app.setConfig(MockWebService.NAMED_WARS, ImmutableList.of("ignore://WARn"));
+        app.config().set(MockWebService.ROOT_WAR, "WAR0");
+        app.config().set(MockWebService.NAMED_WARS, ImmutableList.of("ignore://WARn"));
         
         ElasticJavaWebAppService svc = 
             new ElasticJavaWebAppService.Factory().newFactoryForLocation(l).newEntity(MutableMap.of("war", "WAR1"), app);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
index 9e0ef45..7ffed3e 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
@@ -91,7 +91,7 @@ public class TomcatAutoScalerPolicyTest {
                 .metricRange(0, 1)
                 .minPoolSize(1)
                 .build();
-        cluster.addPolicy(policy);
+        cluster.policies().add(policy);
         
         app.start(ImmutableList.of(loc));
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntity.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntity.java b/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntity.java
index 5ab23a8..77da396 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntity.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntity.java
@@ -59,8 +59,8 @@ public interface TestJavaWebAppEntity extends VanillaJavaApp, WebAppService, Ent
         public void start(java.util.Collection<? extends Location> locations) {
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.STARTING);
             LOG.trace("Starting {}", this);
-            entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, true);
-            entity().setAttribute(Attributes.SERVICE_UP, true);
+            entity().sensors().set(SERVICE_PROCESS_IS_RUNNING, true);
+            entity().sensors().set(Attributes.SERVICE_UP, true);
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.RUNNING);
         }
 
@@ -68,8 +68,8 @@ public interface TestJavaWebAppEntity extends VanillaJavaApp, WebAppService, Ent
         public void stop(ConfigBag parameters) {
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPING);
             LOG.trace("Stopping {}", this);
-            entity().setAttribute(Attributes.SERVICE_UP, false);
-            entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, false);
+            entity().sensors().set(Attributes.SERVICE_UP, false);
+            entity().sensors().set(SERVICE_PROCESS_IS_RUNNING, false);
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPED);
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntityImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntityImpl.java b/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntityImpl.java
index a0f53f6..2b780e9 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntityImpl.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/test/entity/TestJavaWebAppEntityImpl.java
@@ -40,7 +40,7 @@ public class TestJavaWebAppEntityImpl extends VanillaJavaAppImpl implements Test
     public synchronized void spoofRequest() {
         Integer rc = getAttribute(WebAppServiceConstants.REQUEST_COUNT);
         if (rc==null) rc = 0;
-        setAttribute(WebAppServiceConstants.REQUEST_COUNT, rc+1);
+        sensors().set(WebAppServiceConstants.REQUEST_COUNT, rc+1);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
index 79addd4..42bf9f1 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
@@ -116,14 +116,14 @@ public class DslAndRebindYamlTest extends AbstractYamlTest {
     @Test
     public void testDslAttributeWhenReady() throws Exception {
         Entity testEntity = entityWithAttributeWhenReady();
-        ((EntityInternal)testEntity).setAttribute(Sensors.newStringSensor("foo"), "bar");
+        ((EntityInternal)testEntity).sensors().set(Sensors.newStringSensor("foo"), "bar");
         Assert.assertEquals(getConfigInTask(testEntity, TestEntity.CONF_NAME), "bar");
     }
 
     @Test
     public void testDslAttributeWhenReadyRebind() throws Exception {
         Entity testEntity = entityWithAttributeWhenReady();
-        ((EntityInternal)testEntity).setAttribute(Sensors.newStringSensor("foo"), "bar");
+        ((EntityInternal)testEntity).sensors().set(Sensors.newStringSensor("foo"), "bar");
         Application app2 = rebind(testEntity.getApplication());
         Entity e2 = Iterables.getOnlyElement( app2.getChildren() );
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
index 6816ce2..fb46789 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
@@ -63,14 +63,14 @@ public class EnrichersSlightlySimplerYamlTest extends AbstractYamlTest {
         Iterator<Entity> li = leafs.iterator();
         
         Entity e1 = li.next();
-        ((EntityInternal)e1).setAttribute(Sensors.newStringSensor("ip"), "127.0.0.1");
+        ((EntityInternal)e1).sensors().set(Sensors.newStringSensor("ip"), "127.0.0.1");
         EntityTestUtils.assertAttributeEqualsEventually(e1, Sensors.newStringSensor("url"), "http://127.0.0.1/");
         EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.MAIN_URI, URI.create("http://127.0.0.1/"));
 
         int i=2;
         while (li.hasNext()) {
             Entity ei = li.next();
-            ((EntityInternal)ei).setAttribute(Sensors.newStringSensor("ip"), "127.0.0."+i);
+            ((EntityInternal)ei).sensors().set(Sensors.newStringSensor("ip"), "127.0.0."+i);
             i++;
         }
         
@@ -105,22 +105,22 @@ public class EnrichersSlightlySimplerYamlTest extends AbstractYamlTest {
         EntityInternal dwac = (EntityInternal) srv0.getParent();
         EntityInternal cdwac = (EntityInternal) dwac.getParent();
         
-        srv0.setAttribute(Sensors.newDoubleSensor("my.load"), 20.0);
+        srv0.sensors().set(Sensors.newDoubleSensor("my.load"), 20.0);
         
         EntityTestUtils.assertAttributeEventually(dwac, Sensors.newSensor(Double.class, "my.load.averaged"),
             MathPredicates.equalsApproximately(20));
         EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
             MathPredicates.equalsApproximately(20));
 
-        srv0.setAttribute(Sensors.newDoubleSensor("my.load"), null);
+        srv0.sensors().set(Sensors.newDoubleSensor("my.load"), null);
         EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
             Predicates.isNull());
 
-        ((EntityInternal) appservers.get(1)).setAttribute(Sensors.newDoubleSensor("my.load"), 10.0);
-        ((EntityInternal) appservers.get(2)).setAttribute(Sensors.newDoubleSensor("my.load"), 20.0);
+        ((EntityInternal) appservers.get(1)).sensors().set(Sensors.newDoubleSensor("my.load"), 10.0);
+        ((EntityInternal) appservers.get(2)).sensors().set(Sensors.newDoubleSensor("my.load"), 20.0);
         EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
             MathPredicates.equalsApproximately(15));
-        srv0.setAttribute(Sensors.newDoubleSensor("my.load"), 0.0);
+        srv0.sensors().set(Sensors.newDoubleSensor("my.load"), 0.0);
         EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
             MathPredicates.equalsApproximately(10));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
index 868b036..cf9f204 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
@@ -117,7 +117,7 @@ public class EnrichersYamlTest extends AbstractYamlTest {
         log.info("App started:");
         Entities.dumpInfo(app);
         TestEntity entity = (TestEntity)app.getChildren().iterator().next();
-        entity.setAttribute(TestEntity.NAME, "New Name");
+        entity.sensors().set(TestEntity.NAME, "New Name");
         Asserts.eventually(Entities.attributeSupplier(app, TestEntity.NAME), Predicates.<String>equalTo("New Name"));
     }
     
@@ -162,7 +162,7 @@ public class EnrichersYamlTest extends AbstractYamlTest {
             }}).get();
         Assert.assertEquals(producer, childEntity);
         Asserts.assertTrue(Boolean.valueOf(propagator.getConfig(Propagator.PROPAGATING_ALL)), "Expected Propagator.PROPAGATING_ALL to be true");
-        ((TestEntity)childEntity).setAttribute(TestEntity.NAME, "New Name");
+        ((TestEntity)childEntity).sensors().set(TestEntity.NAME, "New Name");
         Asserts.eventually(Entities.attributeSupplier(parentEntity, TestEntity.NAME), Predicates.<String>equalTo("New Name"));
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
index 02acbca..6e9e39c 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
@@ -232,7 +232,7 @@ public class JavaWebAppsIntegrationTest {
             log.info("pc1 - "+clusterComponent+" - "+cluster);
             
             Assert.assertEquals(cluster.getPolicies().size(), 1);
-            Policy policy = cluster.getPolicies().iterator().next();
+            Policy policy = cluster.policies().iterator().next();
             Assert.assertNotNull(policy);
             Assert.assertTrue(policy instanceof AutoScalerPolicy, "policy="+policy);
             Assert.assertEquals(policy.getConfig(AutoScalerPolicy.MAX_POOL_SIZE), (Integer)5);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
index 4b89552..9648c51 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
@@ -54,7 +54,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
         Entities.dumpInfo(app);
 
         Assert.assertEquals(app.getPolicies().size(), 1);
-        Policy policy = app.getPolicies().iterator().next();
+        Policy policy = app.policies().iterator().next();
         Assert.assertTrue(policy instanceof TestPolicy);
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from YAML");
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_FROM_FUNCTION), "$brooklyn: is a fun place");
@@ -77,7 +77,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
         Assert.assertEquals(app.getChildren().size(), 1);
         Entity child = app.getChildren().iterator().next();
         Assert.assertEquals(child.getPolicies().size(), 1);
-        Policy policy = child.getPolicies().iterator().next();
+        Policy policy = child.policies().iterator().next();
         Assert.assertNotNull(policy);
         Assert.assertTrue(policy instanceof TestPolicy, "policy=" + policy + "; type=" + policy.getClass());
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from YAML");
@@ -118,7 +118,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
             }
         }, Predicates.<Integer> equalTo(1));
         
-        Policy policy = child.getPolicies().iterator().next();
+        Policy policy = child.policies().iterator().next();
         Assert.assertTrue(policy instanceof TestPolicy);
         Assert.assertEquals(policy.getConfig(TestPolicy.TEST_ATTRIBUTE_SENSOR), TestEntity.NAME);
     }
@@ -201,7 +201,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
     
     private Policy getPolicy(Entity entity) {
         Assert.assertEquals(entity.getPolicies().size(), 1);
-        Policy policy = entity.getPolicies().iterator().next();
+        Policy policy = entity.policies().iterator().next();
         Assert.assertTrue(policy instanceof TestReferencingPolicy);
         return policy;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
index 67f7369..a73dd8d 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
@@ -49,7 +49,7 @@ public class TestSensorAndEffectorInitializer implements EntityInitializer {
                 @Override
                 public String call(ConfigBag parameters) {
                     Object name = parameters.getStringKey("name");
-                    entity().setAttribute(Sensors.newStringSensor(SENSOR_LAST_HELLO), ""+name);
+                    entity().sensors().set(Sensors.newStringSensor(SENSOR_LAST_HELLO), ""+name);
                     return helloWord()+" "+name;
                 }
             }).build();
@@ -59,7 +59,7 @@ public class TestSensorAndEffectorInitializer implements EntityInitializer {
         
         AttributeSensor<String> emitted = Sensors.newStringSensor(SENSOR_HELLO_DEFINED_EMITTED);
         ((EntityInternal)entity).getMutableEntityType().addSensor(emitted);
-        entity.setAttribute(emitted, "1");
+        entity.sensors().set(emitted, "1");
     }
 
     public static class TestConfigurableInitializer extends TestSensorAndEffectorInitializer {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
index de40d41..2d7a117 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
@@ -87,7 +87,7 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
         Assert.assertEquals(moreEntity.getCatalogItemId(), "more-entity:1.0");
         
         Assert.assertEquals(moreEntity.getPolicies().size(), 1, "wrong policies: "+moreEntity.getPolicies());
-        Policy policy = Iterables.getOnlyElement(moreEntity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(moreEntity.policies());
         // it was loaded by yaml w ref to catalog, so should have the simple-policy catalog-id
         Assert.assertEquals(policy.getCatalogItemId(), "simple-policy:1.0");
     }
@@ -106,7 +106,7 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
         OsgiVersionMoreEntityTest.assertV2MethodCall(moreEntity);
         
         Assert.assertEquals(moreEntity.getPolicies().size(), 1, "wrong policies: "+moreEntity.getPolicies());
-        Policy policy = Iterables.getOnlyElement(moreEntity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(moreEntity.policies());
         // it was loaded from the java so should have the base more-entity catalog id
         Assert.assertEquals(policy.getCatalogItemId(), "more-entity:1.0");
     }
@@ -220,7 +220,7 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
                 "  brooklyn.policies:",
                 "  - type: more-policy:2.0.test");
         Entity basicEntity = Iterables.getOnlyElement(app.getChildren());
-        Policy morePolicy = Iterables.getOnlyElement(basicEntity.getPolicies());
+        Policy morePolicy = Iterables.getOnlyElement(basicEntity.policies());
         
         Assert.assertEquals(morePolicy.getCatalogItemId(), "more-policy:2.0.test");
         OsgiVersionMoreEntityTest.assertV2MethodCall(morePolicy);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
index b1f1851..062cb47 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
@@ -80,7 +80,7 @@ public class CatalogYamlPolicyTest extends AbstractYamlTest {
             "        config3: config3");
 
         Entity simpleEntity = Iterables.getOnlyElement(app.getChildren());
-        Policy policy = Iterables.getOnlyElement(simpleEntity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(simpleEntity.policies());
         assertEquals(policy.getPolicyType().getName(), SIMPLE_POLICY_TYPE);
         assertEquals(policy.getConfig(new BasicConfigKey<String>(String.class, "config1")), "config1");
         assertEquals(policy.getConfig(new BasicConfigKey<String>(String.class, "config2")), "config2 override");
@@ -105,7 +105,7 @@ public class CatalogYamlPolicyTest extends AbstractYamlTest {
             "        config3: config3");
 
         Entity simpleEntity = Iterables.getOnlyElement(app.getChildren());
-        Policy policy = Iterables.getOnlyElement(simpleEntity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(simpleEntity.policies());
         assertEquals(policy.getPolicyType().getName(), SIMPLE_POLICY_TYPE);
         assertEquals(policy.getConfig(new BasicConfigKey<String>(String.class, "config1")), "config1");
         assertEquals(policy.getConfig(new BasicConfigKey<String>(String.class, "config2")), "config2 override");
@@ -143,7 +143,7 @@ public class CatalogYamlPolicyTest extends AbstractYamlTest {
         Entity app = createAndStartApplication(yaml);
 
         Entity simpleEntity = Iterables.getOnlyElement(app.getChildren());
-        Policy policy = Iterables.getOnlyElement(simpleEntity.getPolicies());
+        Policy policy = Iterables.getOnlyElement(simpleEntity.policies());
         assertEquals(policy.getPolicyType().getName(), SIMPLE_POLICY_TYPE);
 
         deleteCatalogEntity(referencedSymbolicName);



[13/13] incubator-brooklyn git commit: This closes #935

Posted by al...@apache.org.
This closes #935


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

Branch: refs/heads/master
Commit: 44755eb1222ce799d348421c5a984acd0a083662
Parents: bdcc5ce 4d08310
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 7 10:30:53 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 7 10:30:53 2015 +0100

----------------------------------------------------------------------
 .../org/apache/brooklyn/api/policy/Policy.java  |   2 +-
 .../core/enricher/AbstractEnricher.java         |   4 +-
 .../core/entity/AbstractApplication.java        |   2 +-
 .../brooklyn/core/entity/AbstractEntity.java    |  20 +--
 .../apache/brooklyn/core/entity/Entities.java   |   4 +-
 .../brooklyn/core/entity/EntityAdjuncts.java    |   2 +-
 .../core/entity/EntityAndAttribute.java         |   2 +-
 .../brooklyn/core/entity/EntityDynamicType.java |  12 +-
 .../brooklyn/core/entity/EntityFunctions.java   |   2 +-
 .../entity/lifecycle/ServiceStateLogic.java     |  14 +-
 .../core/feed/AttributePollHandler.java         |   2 +-
 .../brooklyn/core/feed/ConfigToAttributes.java  |   2 +-
 .../access/PortForwardManagerClient.java        |   2 +-
 .../core/mgmt/internal/LocalEntityManager.java  |   3 +-
 .../mgmt/persist/BrooklynPersistenceUtils.java  |   4 +-
 .../mgmt/rebind/BasicEntityRebindSupport.java   |   7 +-
 .../rebind/PeriodicDeltaChangeListener.java     |   4 +-
 .../mgmt/rebind/dto/MementosGenerators.java     |   4 +-
 .../core/objs/AbstractEntityAdjunct.java        |   4 +-
 .../core/objs/proxy/InternalEntityFactory.java  |  10 +-
 .../objs/proxy/InternalLocationFactory.java     |   2 +-
 .../apache/brooklyn/core/policy/Policies.java   |   4 +-
 .../brooklyn/core/sensor/StaticSensor.java      |   2 +-
 .../core/server/entity/BrooklynMetricsImpl.java |  14 +-
 .../stock/AbstractAggregatingEnricher.java      |   8 +-
 .../enricher/stock/AbstractAggregator.java      |  10 +-
 .../stock/AbstractMultipleSensorAggregator.java |   4 +-
 .../enricher/stock/AbstractTransformer.java     |   2 +-
 .../stock/AbstractTypeTransformingEnricher.java |   2 +-
 .../brooklyn/enricher/stock/AddingEnricher.java |   6 +-
 .../brooklyn/enricher/stock/Aggregator.java     |   6 +-
 .../brooklyn/enricher/stock/Combiner.java       |   2 +-
 .../stock/CustomAggregatingEnricher.java        |   2 +-
 .../apache/brooklyn/enricher/stock/Joiner.java  |   2 +-
 .../brooklyn/enricher/stock/Propagator.java     |   6 +-
 .../stock/SensorPropagatingEnricher.java        |  10 +-
 .../stock/SensorTransformingEnricher.java       |   4 +-
 .../entity/group/AbstractGroupImpl.java         |  28 ++--
 .../group/AbstractMembershipTrackingPolicy.java |   8 +-
 .../entity/group/DynamicClusterImpl.java        |  22 +--
 .../entity/group/DynamicFabricImpl.java         |   8 +-
 .../brooklyn/entity/group/DynamicGroupImpl.java |   6 +-
 .../entity/group/DynamicMultiGroupImpl.java     |   4 +-
 .../entity/stock/BasicStartableImpl.java        |   4 +-
 .../brooklyn/entity/stock/DataEntityImpl.java   |   4 +-
 .../entity/stock/DelegateEntityImpl.java        |   6 +-
 .../windows/WindowsPerformanceCounterFeed.java  |   6 +-
 .../winrm/AdvertiseWinrmLoginPolicy.java        |   4 +-
 .../brooklyn/util/core/flags/FlagUtils.java     |   2 +-
 .../config/MapConfigKeyAndFriendsMoreTest.java  | 100 ++++++------
 ...apListAndOtherStructuredConfigKeyTest.groovy | 112 +++++++-------
 .../core/enricher/BasicEnricherTest.java        |  12 +-
 .../core/enricher/EnricherConfigTest.java       |  18 +--
 .../brooklyn/core/entity/AttributeMapTest.java  |   2 +-
 .../brooklyn/core/entity/AttributeTest.java     |   4 +-
 .../entity/ConfigEntityInheritanceTest.java     |   6 +-
 .../core/entity/DependentConfigurationTest.java |  44 +++---
 .../brooklyn/core/entity/EntitiesTest.java      |   6 +-
 .../core/entity/EntityFunctionsTest.java        |   4 +-
 .../core/entity/EntityLocationsTest.java        |   8 +-
 .../core/entity/EntityPreManagementTest.java    |  14 +-
 .../core/entity/EntityPredicatesTest.java       |   4 +-
 .../core/entity/EntityRegistrationTest.java     |   4 +-
 .../brooklyn/core/entity/EntitySpecTest.java    |  12 +-
 .../core/entity/EntitySubscriptionTest.java     |  44 +++---
 .../brooklyn/core/entity/EntityTypeTest.java    |   4 +-
 .../core/entity/PolicyRegistrationTest.java     |  48 +++---
 .../downloads/BasicDownloadsRegistryTest.java   |  26 ++--
 .../DownloadProducerFromLocalRepoTest.java      |   6 +-
 .../DownloadProducerFromPropertiesTest.java     |   6 +-
 .../downloads/DownloadSubstitutersTest.java     |   8 +-
 .../core/entity/hello/HelloEntityImpl.java      |   4 +-
 .../core/entity/hello/LocalEntitiesTest.java    |  16 +-
 .../entity/internal/ConfigMapGroovyTest.groovy  |   2 +-
 .../core/entity/internal/ConfigMapTest.java     |  14 +-
 .../EntityConfigMapUsageLegacyTest.java         |  32 ++--
 .../internal/EntityConfigMapUsageTest.java      |  20 +--
 .../entity/lifecycle/ServiceStateLogicTest.java |   8 +-
 .../core/location/LocationPredicatesTest.java   |   2 +-
 .../access/BrooklynAccessUtilsTest.java         |   2 +-
 .../access/PortForwardManagerRebindTest.java    |   4 +-
 .../ha/HighAvailabilityManagerInMemoryTest.java |   2 +-
 .../HighAvailabilityManagerSplitBrainTest.java  |   2 +-
 .../brooklyn/core/mgmt/ha/HotStandbyTest.java   |  16 +-
 .../internal/EntityExecutionManagerTest.java    |   4 +-
 .../internal/LocalSubscriptionManagerTest.java  |  16 +-
 .../mgmt/osgi/OsgiVersionMoreEntityTest.java    |   6 +-
 ...ntoPersisterInMemorySizeIntegrationTest.java |   4 +-
 .../BrooklynMementoPersisterTestFixture.java    |   4 +-
 .../core/mgmt/rebind/CheckpointEntityTest.java  |   4 +-
 .../mgmt/rebind/RebindCatalogEntityTest.java    |   2 +-
 .../core/mgmt/rebind/RebindEnricherTest.java    |  48 +++---
 .../rebind/RebindEntityDynamicTypeInfoTest.java |   6 +-
 .../core/mgmt/rebind/RebindEntityTest.java      |  36 ++---
 .../core/mgmt/rebind/RebindFailuresTest.java    |   8 +-
 .../core/mgmt/rebind/RebindFeedTest.java        |   8 +-
 .../core/mgmt/rebind/RebindFeedWithHaTest.java  |   4 +-
 .../core/mgmt/rebind/RebindManagerTest.java     |   2 +-
 .../core/mgmt/rebind/RebindPolicyTest.java      |  50 +++---
 .../transformer/CompoundTransformerTest.java    |   4 +-
 .../core/policy/basic/BasicPolicyTest.java      |   6 +-
 .../core/policy/basic/PolicyConfigTest.java     |  22 +--
 .../policy/basic/PolicySubscriptionTest.java    |  30 ++--
 .../core/sensor/http/HttpRequestSensorTest.java |   2 +-
 .../ssh/SshCommandSensorIntegrationTest.java    |   2 +-
 .../core/server/entity/BrooklynMetricsTest.java |   4 +-
 .../core/test/entity/TestClusterImpl.java       |   2 +-
 .../core/test/entity/TestEntityImpl.java        |   6 +-
 .../EntityCleanupLongevityTestFixture.java      |   6 +-
 .../qa/performance/EntityPerformanceTest.java   |   6 +-
 .../EntityPersistencePerformanceTest.java       |   8 +-
 ...stomAggregatingEnricherDeprecatedTest.groovy |  46 +++---
 .../stock/CustomAggregatingEnricherTest.java    | 120 +++++++--------
 .../brooklyn/enricher/stock/EnrichersTest.java  | 151 +++++++++----------
 ...SensorPropagatingEnricherDeprecatedTest.java |  26 ++--
 .../stock/SensorPropagatingEnricherTest.java    |  58 +++----
 .../TransformingEnricherDeprecatedTest.groovy   |   4 +-
 .../stock/TransformingEnricherTest.java         |   4 +-
 .../YamlRollingTimeWindowMeanEnricherTest.java  |   4 +-
 .../YamlTimeWeightedDeltaEnricherTest.java      |   4 +-
 .../entity/group/DynamicClusterTest.java        |   2 +-
 ...DynamicClusterWithAvailabilityZonesTest.java |  14 +-
 .../brooklyn/entity/group/DynamicGroupTest.java |  49 +++---
 .../entity/group/DynamicMultiGroupTest.java     |  26 ++--
 .../entity/group/GroupPickUpEntitiesTest.java   |  16 +-
 .../apache/brooklyn/entity/group/GroupTest.java |  10 +-
 .../group/MembershipTrackingPolicyTest.java     |  44 +++---
 .../feed/function/FunctionFeedTest.java         |   4 +-
 .../apache/brooklyn/feed/http/HttpFeedTest.java |   4 +-
 .../feed/ssh/SshFeedIntegrationTest.java        |   2 +-
 .../WindowsPerformanceCounterFeedLiveTest.java  |   2 +-
 ...stMachineProvisioningLocationRebindTest.java |   2 +-
 .../brooklyn/util/core/task/TasksTest.java      |  12 +-
 .../util/core/task/ssh/SshTasksTest.java        |   4 +-
 .../util/core/text/TemplateProcessorTest.java   |   2 +-
 .../brooklyn/demo/CumulusRDFApplication.java    |   2 +-
 .../brooklyn/demo/ResilientMongoDbApp.java      |  10 +-
 .../demo/WebClusterDatabaseExample.java         |   8 +-
 .../demo/WebClusterDatabaseExampleApp.java      |   8 +-
 .../demo/WebClusterDatabaseExampleGroovy.groovy |   2 +-
 .../apache/brooklyn/demo/WebClusterExample.java |   2 +-
 ...lusterDatabaseExampleAppIntegrationTest.java |   6 +-
 .../policy/jclouds/os/CreateUserPolicy.java     |   4 +-
 .../location/jclouds/LiveTestEntity.java        |   8 +-
 .../jclouds/RebindJcloudsLocationLiveTest.java  |   2 +-
 .../policy/autoscaling/AutoScalerPolicy.java    |  10 +-
 .../brooklyn/policy/enricher/DeltaEnricher.java |   2 +-
 .../policy/enricher/HttpLatencyDetector.java    |   6 +-
 .../policy/enricher/RollingMeanEnricher.java    |   2 +-
 .../enricher/RollingTimeWindowMeanEnricher.java |   2 +-
 .../enricher/TimeFractionDeltaEnricher.java     |   2 +-
 .../enricher/TimeWeightedDeltaEnricher.java     |   4 +-
 .../policy/followthesun/FollowTheSunPolicy.java |  16 +-
 .../followthesun/FollowTheSunPoolImpl.java      |  28 ++--
 .../policy/ha/AbstractFailureDetector.java      |   4 +-
 .../policy/ha/ConditionalSuspendPolicy.java     |   6 +-
 .../policy/ha/ServiceFailureDetector.java       |   4 +-
 .../brooklyn/policy/ha/ServiceReplacer.java     |   4 +-
 .../brooklyn/policy/ha/ServiceRestarter.java    |   4 +-
 .../BalanceableWorkerPoolImpl.java              |  26 ++--
 .../ItemsInContainersGroupImpl.java             |   6 +-
 .../loadbalancing/LoadBalancingPolicy.java      |  18 +--
 .../autoscaling/AutoScalerPolicyMetricTest.java |  60 ++++----
 .../autoscaling/AutoScalerPolicyRebindTest.java |  10 +-
 .../AutoScalerPolicyReconfigurationTest.java    |  32 ++--
 .../autoscaling/AutoScalerPolicyTest.java       | 132 ++++++++--------
 .../autoscaling/LocallyResizableEntity.java     |   2 +-
 .../policy/enricher/DeltaEnrichersTests.groovy  |   8 +-
 .../enricher/HttpLatencyDetectorTest.java       |  18 +--
 .../policy/enricher/RebindEnricherTest.java     |  32 ++--
 .../enricher/RollingMeanEnricherTest.groovy     |   6 +-
 .../RollingTimeWindowMeanEnricherTest.groovy    |   4 +-
 .../enricher/TimeFractionDeltaEnricherTest.java |   6 +-
 .../AbstractFollowTheSunPolicyTest.java         |   6 +-
 .../FollowTheSunPolicySoakTest.java             |   2 +-
 .../followthesun/FollowTheSunPolicyTest.java    |  35 +++--
 .../ha/ConnectionFailureDetectorTest.java       |  20 +--
 .../brooklyn/policy/ha/HaPolicyRebindTest.java  |  14 +-
 ...ServiceFailureDetectorStabilizationTest.java |  44 +++---
 .../policy/ha/ServiceFailureDetectorTest.java   |  78 +++++-----
 .../brooklyn/policy/ha/ServiceReplacerTest.java |  28 ++--
 .../policy/ha/ServiceRestarterTest.java         |  28 ++--
 .../AbstractLoadBalancingPolicyTest.java        |   7 +-
 .../LoadBalancingPolicyConcurrencyTest.java     |   2 +-
 .../LoadBalancingPolicySoakTest.java            |   2 +-
 .../loadbalancing/LoadBalancingPolicyTest.java  |   8 +-
 .../loadbalancing/MockContainerEntityImpl.java  |  15 +-
 .../loadbalancing/MockItemEntityImpl.java       |   4 +-
 .../postgresql/PostgreSqlNodeSaltImpl.java      |   2 +-
 .../brooklyn/entity/salt/SaltConfigs.java       |   8 +-
 .../entity/salt/SaltLifecycleEffectorTasks.java |   4 +-
 .../entity/monitoring/zabbix/ZabbixFeed.java    |   2 +-
 .../monitoring/zabbix/ZabbixServerImpl.java     |   4 +-
 .../nosql/hazelcast/HazelcastClusterImpl.java   |   8 +-
 .../nosql/hazelcast/HazelcastNodeImpl.java      |   2 +-
 .../nosql/hazelcast/HazelcastNodeSshDriver.java |   2 +-
 .../Infinispan5ServerIntegrationTest.groovy     |   2 +-
 .../brooklynnode/BrooklynClusterImpl.java       |   2 +-
 .../brooklynnode/BrooklynEntityMirrorImpl.java  |   8 +-
 .../entity/brooklynnode/BrooklynNodeImpl.java   |   4 +-
 .../brooklynnode/LocalBrooklynNodeImpl.java     |   4 +-
 .../BrooklynClusterUpgradeEffectorBody.java     |   4 +-
 .../BrooklynNodeUpgradeEffectorBody.java        |   8 +-
 .../brooklyn/entity/chef/ChefAttributeFeed.java |   8 +-
 .../brooklyn/entity/chef/ChefConfigs.java       |   8 +-
 .../entity/chef/ChefLifecycleEffectorTasks.java |   6 +-
 .../brooklyn/entity/java/JavaAppUtils.java      |   4 +-
 .../java/JavaSoftwareProcessSshDriver.java      |   2 +-
 .../apache/brooklyn/entity/java/JmxSupport.java |  12 +-
 .../entity/java/VanillaJavaAppImpl.java         |   4 +-
 .../entity/java/VanillaJavaAppSshDriver.java    |   4 +-
 .../entity/machine/pool/ServerPoolImpl.java     |  40 ++---
 .../base/AbstractSoftwareProcessSshDriver.java  |  12 +-
 .../AbstractSoftwareProcessWinRmDriver.java     |   4 +-
 .../software/base/SameServerEntityImpl.java     |   2 +-
 .../software/base/SoftwareProcessImpl.java      |  20 +--
 .../base/VanillaWindowsProcessImpl.java         |   4 +-
 .../base/VanillaWindowsProcessWinRmDriver.java  |   2 +-
 .../MachineLifecycleEffectorTasks.java          |  28 ++--
 .../system_service/SystemServiceEnricher.java   |   2 +-
 .../org/apache/brooklyn/feed/jmx/JmxHelper.java |   2 +-
 .../BrooklynNodeIntegrationTest.java            |   2 +-
 .../entity/brooklynnode/BrooklynNodeTest.java   |   2 +-
 .../entity/brooklynnode/MockBrooklynNode.java   |   2 +-
 .../brooklynnode/SameBrooklynNodeImpl.java      |   4 +-
 .../brooklynnode/SelectMasterEffectorTest.java  |   4 +-
 .../entity/chef/ChefLiveTestSupport.java        |   2 +-
 .../chef/mysql/TypedToyMySqlEntityChef.java     |  12 +-
 .../brooklyn/entity/java/JavaOptsTest.java      |   2 +-
 .../brooklyn/entity/java/JmxSupportTest.java    |   8 +-
 .../entity/java/VanillaJavaAppRebindTest.java   |   4 +-
 .../entity/java/VanillaJavaAppTest.java         |   8 +-
 .../base/DoNothingSoftwareProcessImpl.java      |   2 +-
 .../base/SoftwareProcessEntityLatchTest.java    |   2 +-
 .../base/SoftwareProcessEntityRebindTest.java   |   4 +-
 .../base/SoftwareProcessEntityTest.java         |  14 +-
 ...SoftwareProcessSshDriverIntegrationTest.java |  18 +--
 .../MachineLifecycleEffectorTasksTest.java      |   4 +-
 .../base/lifecycle/StartStopSshDriverTest.java  |   4 +-
 .../mysql/DynamicToyMySqlEntityBuilder.java     |   6 +-
 .../apache/brooklyn/feed/jmx/JmxFeedTest.java   |  12 +-
 .../brooklyn/feed/jmx/RebindJmxFeedTest.java    |  10 +-
 .../entity/database/crate/CrateNodeImpl.java    |   6 +-
 .../database/mariadb/MariaDbNodeImpl.java       |   8 +-
 .../database/mariadb/MariaDbSshDriver.java      |   2 +-
 .../entity/database/mysql/MySqlClusterImpl.java |  29 ++--
 .../entity/database/mysql/MySqlNodeImpl.java    |   8 +-
 .../entity/database/mysql/MySqlSshDriver.java   |   4 +-
 .../PostgreSqlNodeChefImplFromScratch.java      |   2 +-
 .../database/postgresql/PostgreSqlNodeImpl.java |   2 +-
 .../postgresql/PostgreSqlSshDriver.java         |   4 +-
 .../database/rubyrep/RubyRepNodeImpl.java       |   4 +-
 .../database/rubyrep/RubyRepSshDriver.java      |   2 +-
 .../messaging/activemq/ActiveMQBrokerImpl.java  |   4 +-
 .../messaging/activemq/ActiveMQQueueImpl.java   |   2 +-
 .../messaging/activemq/ActiveMQTopicImpl.java   |   2 +-
 .../entity/messaging/kafka/KafkaBrokerImpl.java |  13 +-
 .../messaging/kafka/KafkaClusterImpl.java       |  16 +-
 .../entity/messaging/qpid/QpidBrokerImpl.java   |   2 +-
 .../messaging/qpid/QpidDestinationImpl.java     |   2 +-
 .../entity/messaging/qpid/QpidQueueImpl.java    |   2 +-
 .../entity/messaging/qpid/QpidTopicImpl.java    |   2 +-
 .../messaging/rabbit/RabbitBrokerImpl.java      |   4 +-
 .../messaging/rabbit/RabbitDestination.java     |   2 +-
 .../entity/messaging/rabbit/RabbitQueue.java    |   2 +-
 .../messaging/storm/StormDeploymentImpl.java    |  10 +-
 .../entity/messaging/storm/StormImpl.java       |   2 +-
 .../entity/zookeeper/ZooKeeperEnsembleImpl.java |   6 +-
 .../entity/monitoring/monit/MonitNodeImpl.java  |   2 +-
 .../entity/network/bind/BindDnsServerImpl.java  |  28 ++--
 .../bind/BindDnsServerIntegrationTest.java      |   4 +-
 .../network/bind/PrefixAndIdEnricher.java       |   4 +-
 .../cassandra/CassandraDatacenterImpl.java      |  18 +--
 .../nosql/cassandra/CassandraFabricImpl.java    |  10 +-
 .../nosql/cassandra/CassandraNodeImpl.java      |  14 +-
 .../nosql/couchbase/CouchbaseClusterImpl.java   |  36 ++---
 .../nosql/couchbase/CouchbaseNodeImpl.java      |   4 +-
 .../nosql/couchbase/CouchbaseNodeSshDriver.java |  12 +-
 .../couchbase/CouchbaseSyncGatewayImpl.java     |   2 +-
 .../entity/nosql/couchdb/CouchDBNodeImpl.java   |   4 +-
 .../nosql/couchdb/CouchDBNodeSshDriver.java     |   2 +-
 .../ElasticSearchNodeSshDriver.java             |   2 +-
 .../entity/nosql/mongodb/MongoDBClientImpl.java |   2 +-
 .../nosql/mongodb/MongoDBReplicaSetImpl.java    |  14 +-
 .../entity/nosql/mongodb/MongoDBServerImpl.java |   2 +-
 .../sharding/CoLocatedMongoDBRouterImpl.java    |   2 +-
 .../sharding/MongoDBRouterClusterImpl.java      |   8 +-
 .../sharding/MongoDBShardClusterImpl.java       |   4 +-
 .../sharding/MongoDBShardedDeploymentImpl.java  |   4 +-
 .../entity/nosql/redis/RedisClusterImpl.java    |   2 +-
 .../entity/nosql/riak/RiakClusterImpl.java      |  26 ++--
 .../entity/nosql/riak/RiakNodeImpl.java         |   4 +-
 .../entity/nosql/riak/RiakNodeSshDriver.java    |  14 +-
 .../entity/nosql/solr/SolrServerImpl.java       |   2 +-
 .../entity/osgi/karaf/KarafContainerImpl.java   |  28 ++--
 .../entity/dns/AbstractGeoDnsServiceImpl.java   |   8 +-
 .../geoscaling/GeoscalingDnsServiceImpl.java    |  16 +-
 .../entity/proxy/AbstractControllerImpl.java    |  20 +--
 .../AbstractNonProvisionedControllerImpl.java   |   8 +-
 .../entity/proxy/nginx/NginxControllerImpl.java |  12 +-
 .../entity/proxy/nginx/NginxSshDriver.java      |  12 +-
 .../entity/proxy/nginx/UrlMappingImpl.java      |  10 +-
 .../ControlledDynamicWebAppClusterImpl.java     |  20 +--
 .../entity/webapp/DynamicWebAppClusterImpl.java |  12 +-
 .../entity/webapp/DynamicWebAppFabricImpl.java  |   4 +-
 .../webapp/JavaWebAppSoftwareProcessImpl.java   |  10 +-
 .../entity/webapp/JavaWebAppSshDriver.java      |   4 +-
 .../entity/webapp/WebAppServiceMethods.java     |   8 +-
 .../entity/webapp/jboss/JBoss6SshDriver.java    |   2 +-
 .../entity/webapp/jboss/JBoss7ServerImpl.java   |   4 +-
 .../entity/webapp/jboss/JBoss7SshDriver.java    |   4 +-
 .../entity/webapp/jetty/Jetty6ServerImpl.java   |   2 +-
 .../webapp/nodejs/NodeJsWebAppServiceImpl.java  |   4 +-
 .../webapp/nodejs/NodeJsWebAppSshDriver.java    |   4 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |  10 +-
 .../geoscaling/GeoscalingIntegrationTest.java   |  12 +-
 .../entity/proxy/AbstractControllerTest.java    |  50 +++---
 .../brooklyn/entity/proxy/StubAppServer.java    |   8 +-
 .../proxy/TrackingAbstractControllerImpl.java   |   2 +-
 .../brooklyn/entity/proxy/UrlMappingTest.java   |   4 +-
 .../nginx/NginxHttpsSslIntegrationTest.java     |   4 +-
 .../AbstractWebAppFixtureIntegrationTest.java   |   4 +-
 ...lledDynamicWebAppClusterIntegrationTest.java |   2 +-
 .../ControlledDynamicWebAppClusterTest.java     |   4 +-
 .../entity/webapp/DynamicWebAppClusterTest.java |   4 +-
 .../entity/webapp/DynamicWebAppFabricTest.java  |   4 +-
 .../webapp/ElasticCustomLocationTest.java       |   4 +-
 .../webapp/TomcatAutoScalerPolicyTest.java      |   2 +-
 .../test/entity/TestJavaWebAppEntity.java       |   8 +-
 .../test/entity/TestJavaWebAppEntityImpl.java   |   2 +-
 .../camp/brooklyn/DslAndRebindYamlTest.java     |   4 +-
 .../EnrichersSlightlySimplerYamlTest.java       |  14 +-
 .../camp/brooklyn/EnrichersYamlTest.java        |   4 +-
 .../brooklyn/JavaWebAppsIntegrationTest.java    |   2 +-
 .../camp/brooklyn/PoliciesYamlTest.java         |   8 +-
 .../TestSensorAndEffectorInitializer.java       |   4 +-
 .../CatalogOsgiVersionMoreEntityTest.java       |   6 +-
 .../brooklyn/catalog/CatalogYamlPolicyTest.java |   6 +-
 .../brooklyn/catalog/CatalogYamlRebindTest.java |   8 +-
 .../BrooklynEntityMirrorIntegrationTest.java    |   8 +-
 .../brooklynnode/BrooklynNodeRestTest.java      |   2 +-
 .../qa/load/SimulatedJBoss7ServerImpl.java      |  18 +--
 .../qa/load/SimulatedMySqlNodeImpl.java         |   6 +-
 .../qa/load/SimulatedNginxControllerImpl.java   |   8 +-
 .../brooklyn/qa/load/SimulatedTheeTierApp.java  |   6 +-
 .../webcluster/SinusoidalLoadGenerator.java     |   2 +-
 .../qa/longevity/webcluster/WebClusterApp.java  |   4 +-
 .../brooklyn/rest/resources/PolicyResource.java |  19 ++-
 .../brooklyn/rest/resources/SensorResource.java |   4 +-
 .../rest/util/BrooklynRestResourceUtils.java    |   6 +-
 .../brooklyn/rest/domain/SensorSummaryTest.java |   2 +-
 .../rest/resources/ApplicationResourceTest.java |   4 +-
 .../rest/resources/DescendantsTest.java         |   4 +-
 .../rest/resources/SensorResourceTest.java      |   2 +-
 .../brooklynnode/DeployBlueprintTest.java       |   2 +-
 .../testing/mocks/RestMockSimpleEntity.java     |   2 +-
 .../util/BrooklynRestResourceUtilsTest.java     |   2 +-
 .../apache/brooklyn/test/EntityTestUtils.java   |   4 +-
 358 files changed, 1910 insertions(+), 1908 deletions(-)
----------------------------------------------------------------------