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

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

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4d08310c/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);