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

[04/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/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