You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/08/20 14:39:39 UTC

[01/16] incubator-brooklyn git commit: Move HasBrooklynManagementContext to o.a.b.core.mgmt

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master d70091b0c -> 0c2405808


Move HasBrooklynManagementContext to o.a.b.core.mgmt

- Was previously in o.a.b.camp.brooklyn.api, in the core module

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

Branch: refs/heads/master
Commit: 8e439bdb398e12d12c4c7d5aeff31497207be742
Parents: 147f9ec
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 10:47:38 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 10:47:38 2015 +0100

----------------------------------------------------------------------
 .../api/HasBrooklynManagementContext.java       | 27 -----------------
 .../core/mgmt/HasBrooklynManagementContext.java | 31 ++++++++++++++++++++
 .../core/objs/BasicConfigurableObject.java      |  2 +-
 .../camp/brooklyn/BrooklynCampPlatform.java     |  2 +-
 .../BrooklynAssemblyTemplateInstantiator.java   |  2 +-
 .../platform/BrooklynImmutableCampPlatform.java |  2 +-
 .../lite/CampPlatformWithJustBrooklynMgmt.java  |  2 +-
 .../test/lite/TestAppAssemblyInstantiator.java  |  2 +-
 8 files changed, 37 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/core/src/main/java/org/apache/brooklyn/camp/brooklyn/api/HasBrooklynManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/camp/brooklyn/api/HasBrooklynManagementContext.java b/core/src/main/java/org/apache/brooklyn/camp/brooklyn/api/HasBrooklynManagementContext.java
deleted file mode 100644
index 9523a16..0000000
--- a/core/src/main/java/org/apache/brooklyn/camp/brooklyn/api/HasBrooklynManagementContext.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.camp.brooklyn.api;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-
-public interface HasBrooklynManagementContext {
-
-    public ManagementContext getBrooklynManagementContext();
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/core/src/main/java/org/apache/brooklyn/core/mgmt/HasBrooklynManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/HasBrooklynManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/HasBrooklynManagementContext.java
new file mode 100644
index 0000000..2048c9e
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/HasBrooklynManagementContext.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.mgmt;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+
+/**
+ * Provides a generic way to obtain a {@link ManagementContext}, which things can implement. 
+ * The intent is to reduce coupling between components by only referring to this interface.
+ */
+public interface HasBrooklynManagementContext {
+
+    public ManagementContext getBrooklynManagementContext();
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java b/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java
index 5197be6..18b7d85 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java
@@ -22,10 +22,10 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.objs.Configurable;
 import org.apache.brooklyn.api.objs.Identifiable;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.config.ConfigMap;
 import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 import org.apache.brooklyn.core.mgmt.ManagementContextInjectable;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
index e774300..bc6a9fd 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
@@ -22,12 +22,12 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.ManagementContext.PropertiesReloadListener;
 import org.apache.brooklyn.camp.AggregatingCampPlatform;
 import org.apache.brooklyn.camp.CampPlatform;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynEntityMatcher;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslInterpreter;
 import org.apache.brooklyn.camp.brooklyn.spi.platform.BrooklynImmutableCampPlatform;
 import org.apache.brooklyn.camp.spi.PlatformRootSummary;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 
 /** {@link CampPlatform} implementation which includes Brooklyn entities 
  * (via {@link BrooklynImmutableCampPlatform})

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index eff9c4f..63fa664 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@ -34,7 +34,6 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.camp.CampPlatform;
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
 import org.apache.brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.camp.spi.Assembly;
 import org.apache.brooklyn.camp.spi.AssemblyTemplate;
 import org.apache.brooklyn.camp.spi.AssemblyTemplate.Builder;
@@ -45,6 +44,7 @@ import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLo
 import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 import org.apache.brooklyn.core.mgmt.EntityManagementUtils.CreationResult;
 import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
 import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/platform/BrooklynImmutableCampPlatform.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/platform/BrooklynImmutableCampPlatform.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/platform/BrooklynImmutableCampPlatform.java
index ba3bd99..0d874bf 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/platform/BrooklynImmutableCampPlatform.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/platform/BrooklynImmutableCampPlatform.java
@@ -20,7 +20,6 @@ package org.apache.brooklyn.camp.brooklyn.spi.platform;
 
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.camp.CampPlatform;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.camp.brooklyn.spi.lookup.AssemblyBrooklynLookup;
 import org.apache.brooklyn.camp.brooklyn.spi.lookup.AssemblyTemplateBrooklynLookup;
 import org.apache.brooklyn.camp.brooklyn.spi.lookup.PlatformComponentBrooklynLookup;
@@ -36,6 +35,7 @@ import org.apache.brooklyn.camp.spi.PlatformTransaction;
 import org.apache.brooklyn.camp.spi.collection.BasicResourceLookup;
 import org.apache.brooklyn.camp.spi.collection.ResourceLookup;
 import org.apache.brooklyn.camp.spi.collection.ResourceLookup.EmptyResourceLookup;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 
 /** Immutable CAMP platform which reflects things in the underlying Brooklyn system */
 public class BrooklynImmutableCampPlatform extends CampPlatform implements HasBrooklynManagementContext {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
index e65d49d..20681a6 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
@@ -21,8 +21,8 @@ package org.apache.brooklyn.camp.brooklyn.test.lite;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.camp.BasicCampPlatform;
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 
 public class CampPlatformWithJustBrooklynMgmt extends BasicCampPlatform implements HasBrooklynManagementContext {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8e439bdb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
index b30d889..dc0c33d 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
@@ -25,13 +25,13 @@ import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.camp.CampPlatform;
 import org.apache.brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
-import org.apache.brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import org.apache.brooklyn.camp.spi.AbstractResource;
 import org.apache.brooklyn.camp.spi.Assembly;
 import org.apache.brooklyn.camp.spi.AssemblyTemplate;
 import org.apache.brooklyn.camp.spi.PlatformComponentTemplate;
 import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
 import org.apache.brooklyn.camp.spi.instantiate.BasicAssemblyTemplateInstantiator;
+import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
 import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
 import org.apache.brooklyn.core.test.entity.TestApplication;
 import org.apache.brooklyn.core.test.entity.TestEntity;


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

Posted by he...@apache.org.
This closes #856


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

Branch: refs/heads/master
Commit: 50a19d3d8ecdb24a324b2c689aaaca6a0b5fde23
Parents: d70091b e7420b1
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Aug 20 13:38:46 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Aug 20 13:38:46 2015 +0100

----------------------------------------------------------------------
 .../api/HasBrooklynManagementContext.java       |  27 ----
 .../core/effector/ssh/SshCommandEffector.java   | 102 +++++++++++++
 .../core/entity/BrooklynConfigKeys.java         |   9 ++
 .../core/mgmt/HasBrooklynManagementContext.java |  31 ++++
 .../core/objs/BasicConfigurableObject.java      |   2 +-
 .../brooklyn/core/sensor/HttpRequestSensor.java |  96 -------------
 .../core/sensor/http/HttpRequestSensor.java     |  97 +++++++++++++
 .../core/sensor/ssh/SshCommandSensor.java       | 141 ++++++++++++++++++
 .../WindowsPerformanceCounterSensors.java       |  73 ++++++++++
 .../ssh/SshCommandEffectorIntegrationTest.java  |  94 ++++++++++++
 .../core/sensor/HttpRequestSensorTest.java      |  85 -----------
 .../core/sensor/http/HttpRequestSensorTest.java |  85 +++++++++++
 .../ssh/SshCommandSensorIntegrationTest.java    |  89 ++++++++++++
 .../entity/java/JmxAttributeSensor.java         |   4 +-
 .../entity/software/base/SoftwareProcess.java   |   7 +-
 .../brooklyn/sensor/ssh/SshCommandEffector.java | 103 --------------
 .../brooklyn/sensor/ssh/SshCommandSensor.java   | 142 -------------------
 .../winrm/WindowsPerformanceCounterSensors.java |  73 ----------
 .../test/ssh/SshCommandIntegrationTest.java     | 126 ----------------
 .../camp/brooklyn/BrooklynCampPlatform.java     |   2 +-
 .../BrooklynAssemblyTemplateInstantiator.java   |   2 +-
 .../platform/BrooklynImmutableCampPlatform.java |   2 +-
 .../lite/CampPlatformWithJustBrooklynMgmt.java  |   2 +-
 .../test/lite/TestAppAssemblyInstantiator.java  |   2 +-
 24 files changed, 732 insertions(+), 664 deletions(-)
----------------------------------------------------------------------



[09/16] incubator-brooklyn git commit: Deleted deprecated o.a.b.core.entity.lifecycle.QuorumCheck

Posted by he...@apache.org.
Deleted deprecated o.a.b.core.entity.lifecycle.QuorumCheck


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

Branch: refs/heads/master
Commit: b1322495c762a9c43a3ba32d915e98512f0b4b71
Parents: 1ca4230
Author: Aled Sage <al...@gmail.com>
Authored: Wed Aug 19 18:43:38 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:04:13 2015 +0100

----------------------------------------------------------------------
 .../core/entity/lifecycle/QuorumCheck.java      | 108 -------------------
 .../entity/group/DynamicClusterImpl.java        |   2 +-
 .../core/test/entity/TestClusterImpl.java       |   4 +-
 .../brooklyn/policy/ha/ServiceReplacerTest.java |   2 +-
 4 files changed, 4 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1322495/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/QuorumCheck.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/QuorumCheck.java b/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/QuorumCheck.java
deleted file mode 100644
index 29f8deb..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/QuorumCheck.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.entity.lifecycle;
-
-import java.io.Serializable;
-
-/**
- * For checking if a group/cluster is quorate. That is, whether the group has sufficient
- * healthy members.
- * @deprecated since 0.7.0 use {@link org.apache.brooklyn.util.collections.QuorumCheck}. 
- * but keep this for a while as old quorum checks might be persisted. 
- */
-@Deprecated
-public interface QuorumCheck extends org.apache.brooklyn.util.collections.QuorumCheck {
-
-    /**
-     * @param sizeHealthy Number of healthy members
-     * @param totalSize   Total number of members one would expect to be healthy (i.e. ignoring stopped members)
-     * @return            Whether this group is healthy
-     */
-    public boolean isQuorate(int sizeHealthy, int totalSize);
-
-    public static class QuorumChecks {
-        /**
-         * Checks that all members that should be up are up (i.e. ignores stopped nodes).
-         */
-        public static QuorumCheck all() {
-            return new NumericQuorumCheck(0, 1.0, false);
-        }
-        /**
-         * Checks all members that should be up are up, and that there is at least one such member.
-         */
-        public static QuorumCheck allAndAtLeastOne() {
-            return new NumericQuorumCheck(1, 1.0, false);
-        }
-        /**
-         * Requires at least one member that should be up is up.
-         */
-        public static QuorumCheck atLeastOne() {
-            return new NumericQuorumCheck(1, 0.0, false);
-        }
-        /**
-         * Requires at least one member to be up if the total size is non-zero.
-         * i.e. okay if empty, or if non-empty and something is healthy, but not okay if not-empty and nothing is healthy.
-         * "Empty" means that no members are supposed to be up  (e.g. there may be stopped members).
-         */
-        public static QuorumCheck atLeastOneUnlessEmpty() {
-            return new NumericQuorumCheck(1, 0.0, true);
-        }
-        /**
-         * Always "healthy"
-         */
-        public static QuorumCheck alwaysTrue() {
-            return new NumericQuorumCheck(0, 0.0, true);
-        }
-        public static QuorumCheck newInstance(int minRequiredSize, double minRequiredRatio, boolean allowEmpty) {
-            return new NumericQuorumCheck(minRequiredSize, minRequiredRatio, allowEmpty);
-        }
-    }
-    
-    /** @deprecated since 0.7.0 use {@link org.apache.brooklyn.util.collections.QuorumCheck}. 
-    * but keep this until we have a transition defined. 
-    */
-    @Deprecated
-    public static class NumericQuorumCheck implements QuorumCheck, Serializable {
-        private static final long serialVersionUID = -5090669237460159621L;
-        
-        protected final int minRequiredSize;
-        protected final double minRequiredRatio;
-        protected final boolean allowEmpty;
-
-        public NumericQuorumCheck(int minRequiredSize, double minRequiredRatio, boolean allowEmpty) {
-            this.minRequiredSize = minRequiredSize;
-            this.minRequiredRatio = minRequiredRatio;
-            this.allowEmpty = allowEmpty;
-        }
-        
-        @Override
-        public boolean isQuorate(int sizeHealthy, int totalSize) {
-            if (allowEmpty && totalSize==0) return true;
-            if (sizeHealthy < minRequiredSize) return false;
-            if (sizeHealthy < totalSize*minRequiredRatio-0.000000001) return false;
-            return true;
-        }
-        
-        @Override
-        public String toString() {
-            return "QuorumCheck[require="+minRequiredSize+","+((int)100*minRequiredRatio)+"%"+(allowEmpty ? "|0" : "")+"]";
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1322495/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
index b330675..e335fd0 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
@@ -45,7 +45,6 @@ import org.apache.brooklyn.core.entity.factory.EntityFactory;
 import org.apache.brooklyn.core.entity.factory.EntityFactoryForLocation;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.core.entity.lifecycle.QuorumCheck.QuorumChecks;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic.ServiceProblemsLogic;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.entity.trait.StartableMethods;
@@ -56,6 +55,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.collections.QuorumCheck.QuorumChecks;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.core.task.TaskTags;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1322495/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
index 0bc9e32..debe110 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/entity/TestClusterImpl.java
@@ -18,9 +18,9 @@
  */
 package org.apache.brooklyn.core.test.entity;
 
-import org.apache.brooklyn.core.entity.lifecycle.QuorumCheck.QuorumChecks;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.entity.group.DynamicClusterImpl;
+import org.apache.brooklyn.util.collections.QuorumCheck.QuorumChecks;
 
 /**
 * Mock cluster entity for testing.
@@ -41,7 +41,7 @@ public class TestClusterImpl extends DynamicClusterImpl implements TestCluster {
     @Override
     protected void initEnrichers() {
         // say this is up if it has no children 
-        setConfig(UP_QUORUM_CHECK, QuorumChecks.atLeastOneUnlessEmpty());
+        config().set(UP_QUORUM_CHECK, QuorumChecks.atLeastOneUnlessEmpty());
         
         super.initEnrichers();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1322495/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
index d984b0e..ba08666 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
@@ -40,7 +40,6 @@ import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.QuorumCheck;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic.ComputeServiceIndicatorsFromChildrenAndMembers;
 import org.apache.brooklyn.core.entity.trait.FailingEntity;
 import org.apache.brooklyn.core.location.SimulatedLocation;
@@ -50,6 +49,7 @@ import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.entity.group.DynamicCluster;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.util.collections.QuorumCheck;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.javalang.JavaClassNames;
 import org.slf4j.Logger;


[04/16] incubator-brooklyn git commit: move WindowsPerformanceCounterSensors to o.a.b.core.sensor.windows

Posted by he...@apache.org.
move WindowsPerformanceCounterSensors to o.a.b.core.sensor.windows

- Was previously in software-base, in o.a.b.sensor.winrm.
- Renamed to .windows to be consistent with .feed.windows
- Moved to core to be consistent with .sensor.ssh and .sensor.http

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

Branch: refs/heads/master
Commit: e7420b1e4194cbe597a9d467bddc1a197804af50
Parents: 1dde632
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 11:32:42 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 11:32:42 2015 +0100

----------------------------------------------------------------------
 .../WindowsPerformanceCounterSensors.java       | 73 ++++++++++++++++++++
 .../winrm/WindowsPerformanceCounterSensors.java | 73 --------------------
 2 files changed, 73 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e7420b1e/core/src/main/java/org/apache/brooklyn/core/sensor/windows/WindowsPerformanceCounterSensors.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/windows/WindowsPerformanceCounterSensors.java b/core/src/main/java/org/apache/brooklyn/core/sensor/windows/WindowsPerformanceCounterSensors.java
new file mode 100644
index 0000000..f5c2271
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/windows/WindowsPerformanceCounterSensors.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.sensor.windows;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.brooklyn.api.entity.EntityInitializer;
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.feed.windows.WindowsPerformanceCounterFeed;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.reflect.TypeToken;
+
+public class WindowsPerformanceCounterSensors implements EntityInitializer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WindowsPerformanceCounterSensors.class);
+
+    public final static ConfigKey<Set<Map<String, String>>> PERFORMANCE_COUNTERS = ConfigKeys.newConfigKey(new TypeToken<Set<Map<String, String>>>(){}, "performance.counters");
+
+    protected final Set<Map<String, String>> sensors;
+
+    public WindowsPerformanceCounterSensors(ConfigBag params) {
+        sensors = params.get(PERFORMANCE_COUNTERS);
+    }
+
+    public WindowsPerformanceCounterSensors(Map<String, String> params) {
+        this(ConfigBag.newInstance(params));
+    }
+
+    @Override
+    public void apply(EntityLocal entity) {
+        WindowsPerformanceCounterFeed.Builder builder = WindowsPerformanceCounterFeed.builder()
+                .entity(entity);
+        for (Map<String, String> sensorConfig : sensors) {
+            String name = sensorConfig.get("name");
+            String sensorType = sensorConfig.get("sensorType");
+            Class<?> clazz;
+            try {
+                clazz = Strings.isNonEmpty(sensorType)
+                        ? ((EntityInternal)entity).getManagementContext().getCatalog().getRootClassLoader().loadClass(sensorType) 
+                        : String.class;
+            } catch (ClassNotFoundException e) {
+                throw new IllegalStateException("Could not load type "+sensorType+" for sensor "+name, e);
+            }
+            builder.addSensor(sensorConfig.get("counter"), Sensors.newSensor(clazz, name, sensorConfig.get("description")));
+        }
+        builder.build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e7420b1e/software/base/src/main/java/org/apache/brooklyn/sensor/winrm/WindowsPerformanceCounterSensors.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/sensor/winrm/WindowsPerformanceCounterSensors.java b/software/base/src/main/java/org/apache/brooklyn/sensor/winrm/WindowsPerformanceCounterSensors.java
deleted file mode 100644
index 3e0e4c6..0000000
--- a/software/base/src/main/java/org/apache/brooklyn/sensor/winrm/WindowsPerformanceCounterSensors.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.sensor.winrm;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.entity.EntityInitializer;
-import org.apache.brooklyn.api.entity.EntityLocal;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.EntityInternal;
-import org.apache.brooklyn.core.sensor.Sensors;
-import org.apache.brooklyn.feed.windows.WindowsPerformanceCounterFeed;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.text.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.reflect.TypeToken;
-
-public class WindowsPerformanceCounterSensors implements EntityInitializer {
-
-    private static final Logger LOG = LoggerFactory.getLogger(WindowsPerformanceCounterSensors.class);
-
-    public final static ConfigKey<Set<Map<String, String>>> PERFORMANCE_COUNTERS = ConfigKeys.newConfigKey(new TypeToken<Set<Map<String, String>>>(){}, "performance.counters");
-
-    protected final Set<Map<String, String>> sensors;
-
-    public WindowsPerformanceCounterSensors(ConfigBag params) {
-        sensors = params.get(PERFORMANCE_COUNTERS);
-    }
-
-    public WindowsPerformanceCounterSensors(Map<String, String> params) {
-        this(ConfigBag.newInstance(params));
-    }
-
-    @Override
-    public void apply(EntityLocal entity) {
-        WindowsPerformanceCounterFeed.Builder builder = WindowsPerformanceCounterFeed.builder()
-                .entity(entity);
-        for (Map<String, String> sensorConfig : sensors) {
-            String name = sensorConfig.get("name");
-            String sensorType = sensorConfig.get("sensorType");
-            Class<?> clazz;
-            try {
-                clazz = Strings.isNonEmpty(sensorType)
-                        ? ((EntityInternal)entity).getManagementContext().getCatalog().getRootClassLoader().loadClass(sensorType) 
-                        : String.class;
-            } catch (ClassNotFoundException e) {
-                throw new IllegalStateException("Could not load type "+sensorType+" for sensor "+name, e);
-            }
-            builder.addSensor(sensorConfig.get("counter"), Sensors.newSensor(clazz, name, sensorConfig.get("description")));
-        }
-        builder.build();
-    }
-}


[08/16] incubator-brooklyn git commit: Delete deprecated MachinePool and BrooklynMachinePool

Posted by he...@apache.org.
Delete deprecated MachinePool and BrooklynMachinePool


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

Branch: refs/heads/master
Commit: 7d072fded80e796a6afe9820bf821e4dce1dd976
Parents: b132249
Author: Aled Sage <al...@gmail.com>
Authored: Wed Aug 19 18:49:07 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:04:13 2015 +0100

----------------------------------------------------------------------
 .../location/jclouds/BrooklynMachinePool.java   | 218 ----------
 .../location/jclouds/pool/MachinePool.java      | 395 -------------------
 .../jclouds/BrooklynMachinePoolLiveTest.java    | 102 -----
 .../pool/JcloudsMachinePoolLiveTest.java        | 120 ------
 4 files changed, 835 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7d072fde/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
deleted file mode 100644
index 3b53139..0000000
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.jclouds;
-
-import static org.apache.brooklyn.location.jclouds.pool.MachinePoolPredicates.matching;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.MachineLocation;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.jclouds.pool.MachinePool;
-import org.apache.brooklyn.location.jclouds.pool.MachineSet;
-import org.apache.brooklyn.location.jclouds.pool.ReusableMachineTemplate;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.task.BasicExecutionContext;
-
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-
-/**
- * @deprecated since 0.6.0; never used in production setting, and thus of dubious value; best avoided as unlikely to be supported in future versions
- */
-@Deprecated
-public class BrooklynMachinePool extends MachinePool {
-
-    private static final Logger log = LoggerFactory.getLogger(BrooklynMachinePool.class);
-    
-    protected final JcloudsLocation location;
-    final List<Task<?>> activeTasks = new ArrayList<Task<?>>();
-    final String providerLocationId;
-    
-    public BrooklynMachinePool(JcloudsLocation l) {
-        super(l.getComputeService());
-        providerLocationId = l.getRegion();
-        this.location = l;
-    }
-    
-    /** claims a machine with the indicated spec, creating if necessary */
-    public SshMachineLocation obtain(ReusableMachineTemplate t) {
-        MachineSet previous = unclaimed(matching(t));
-        
-        while (true) {
-            NodeMetadata m = claim(1, t).iterator().next();
-            // TODO ideally shouldn't have to rebind
-            SshMachineLocation result = null;
-            try {
-                result = toSshMachineLocation( m );
-            } catch (Exception e) {
-                if (previous.contains(m)) {
-                    log.debug("attempt to bind to previous existing machine "+m+" failed (will blacklist and retry another): "+e);
-                } else {
-                    log.warn("attempt to bind to machine "+m+" failed: "+e);
-                    throw Throwables.propagate(e);
-                }
-            }
-            if (result!=null) return result;
-            if (previous.contains(m)) {
-                log.debug("could not bind to previous existing machine "+m+"; blacklisting and trying a new one");
-                addToBlacklist(new MachineSet(m));
-            } else {
-                throw new IllegalStateException("cannot bind/connect to newly created machine; error in configuration");
-            }
-        }
-    }
-    
-    protected MachineSet filterForAllowedMachines(MachineSet input) {
-        MachineSet result = super.filterForAllowedMachines(input);
-        if (providerLocationId!=null) {
-            result = result.filtered(matching( new ReusableMachineTemplate().locationId(providerLocationId).strict(false) ));
-        }
-        return result;
-    }
-
-    /** returns an SshMachineLocation, if one can be created and accessed; returns null if it cannot be created */
-    protected SshMachineLocation toSshMachineLocation(NodeMetadata m) {
-        try {
-            JcloudsSshMachineLocation sshM = location.rebindMachine(m);
-            if (sshM.execCommands("check-reachable", Arrays.asList("whoami")) != 0) {
-                log.warn("cannot bind to machine "+m);
-                return null;
-            }
-            return sshM;
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-    
-    @Override
-    public MachineSet create(int count, ReusableMachineTemplate template) {
-        List<NodeMetadata> nodes = new ArrayList<NodeMetadata>();
-        for (int i=0; i<count; i++) {
-            // TODO this in parallel
-            JcloudsSshMachineLocation m;
-            try {
-                MachineLocation machineLocation = location.obtain(MutableMap.of("callerContext", ""+this+"("+template+")"), template);
-                // Class has been deprecated since 0.6.0, and prior to that, obtain would have returned a JcloudsSshMachineLocation
-                if (machineLocation instanceof JcloudsSshMachineLocation) {
-                    m = (JcloudsSshMachineLocation) machineLocation;
-                } else {
-                    throw new UnsupportedOperationException("Cannot create WinRmMachineLocation");
-                }
-            } catch (Exception e) {
-                throw Throwables.propagate(e);
-            }
-            nodes.add(m.getNode());
-        }
-        MachineSet result = new MachineSet(nodes);
-        registerNewNodes(result, template);
-        return result;
-    }
-
-    public boolean unclaim(SshMachineLocation location) {
-        init();
-        if (location instanceof JcloudsSshMachineLocation)
-            return unclaim(new MachineSet( ((JcloudsSshMachineLocation)location).getNode()) ) > 0;
-        return false;
-    }
-    public boolean destroy(SshMachineLocation location) {
-        init();
-        if (location instanceof JcloudsSshMachineLocation)
-            return destroy(new MachineSet( ((JcloudsSshMachineLocation)location).getNode()) ) > 0;
-        return false;
-    }
-
-    // TODO we need to remove stale tasks somewhere
-    protected <T> Task<T> addTask(Task<T> t) {
-        synchronized (activeTasks) { activeTasks.add(t); }
-        return t;
-    }
-    
-    public List<Task<?>> getActiveTasks() {
-        List<Task<?>> result;
-        synchronized (activeTasks) { result = ImmutableList.<Task<?>>copyOf(activeTasks); }
-        return result;
-    }
-
-    public void blockUntilTasksEnded() {
-        while (true) {
-            boolean allDone = true;
-            List<Task<?>> tt = getActiveTasks();
-            for (Task<?> t: tt) {
-                if (!t.isDone()) {
-                    allDone = false;
-                    if (log.isDebugEnabled()) log.debug("Pool "+this+", blocking for completion of: "+t);
-                    t.blockUntilEnded();
-                }
-            }
-            synchronized (activeTasks) {
-                List<Task> newTT = new ArrayList<Task>(getActiveTasks());
-                newTT.removeAll(tt);
-                if (allDone && tt.isEmpty()) {
-                    //task list has stabilized, and there are no active tasks; clear and exit
-                    if (log.isDebugEnabled()) log.debug("Pool "+this+", all known tasks have completed, clearing list");
-                    activeTasks.clear();
-                    break;
-                }
-                if (log.isDebugEnabled()) log.debug("Pool "+this+", all previously known tasks have completed, but there are new tasks ("+newTT+") checking them");
-            }
-        }
-    }
-
-    /** starts the given template; for use only within a task (e.g. application's start effector).
-     * returns a child task of the current task.
-     * <p>
-     * throws exception if not in a task. (you will have to claim, then invoke the effectors manually.) */
-    public Task<?> start(final ReusableMachineTemplate template, final List<? extends Startable> entities) {
-        BasicExecutionContext ctx = BasicExecutionContext.getCurrentExecutionContext();
-        if (ctx==null) throw new IllegalStateException("Pool.start is only permitted within a task (effector)");
-        final AtomicReference<Task<?>> t = new AtomicReference<Task<?>>();
-        synchronized (t) {
-            t.set(ctx.submit(new Runnable() {
-                public void run() {
-                    synchronized (t) {
-                        if (log.isDebugEnabled()) log.debug("Pool "+this+", task "+t.get()+" claiming a "+template);
-                        SshMachineLocation m = obtain(template);
-                        if (log.isDebugEnabled()) log.debug("Pool "+this+", task "+t.get()+" got "+m+"; starting "+entities);
-                        for (Startable entity: entities)
-                            addTask( ((Entity)entity).invoke(Startable.START, MutableMap.of("locations", Arrays.asList(m))) );
-                    }
-                }
-            }));
-        }
-        addTask(t.get());
-        return t.get();
-    }
-
-    /** @see #start(ReusableMachineTemplate, List) */
-    public Task<?> start(ReusableMachineTemplate template, Startable ...entities) {
-        return start(template, Arrays.asList(entities));
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7d072fde/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/pool/MachinePool.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/pool/MachinePool.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/pool/MachinePool.java
deleted file mode 100644
index 79a3dc8..0000000
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/pool/MachinePool.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.jclouds.pool;
-
-import static org.apache.brooklyn.location.jclouds.pool.MachinePoolPredicates.compose;
-import static org.apache.brooklyn.location.jclouds.pool.MachinePoolPredicates.matching;
-
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.jclouds.compute.ComputeService;
-import org.jclouds.compute.RunNodesException;
-import org.jclouds.compute.domain.ComputeMetadata;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Template;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
-/**
- * Contains details of machines detected at a given cloud (ComputeService),
- * and records claims made against those machines via this pool.
- * <p>
- * Machine instances themselves are persisted and rescanned as new instances of this class are created.
- * Claims however are specific to this instance of the class, i.e. <b>not</b> persisted.
- * <p>
- * This class is believed to be thread-safe.
- * Refreshes to the remote detected machines are synchronized on the pool instance.
- * Details of detected and claimed machines are also synchronized on the pool instance.
- * (If it is necessary to claim machines whilst the pool is being rescanned,
- * we can investigate a more sophisticated threading model.
- * Access to some fields is clearly independent and uses a tighter synchonization
- * strategy, e.g. templates.  
- * Synchronization of fields within a synch block on the class instance
- * is permitted, but not the other way round,
- * and synching on multiple fields is also not permitted.)
- * <p>
- * Callers wishing to guarantee results of e.g. ensureUnclaimed remaining available
- * can synchronize on this class for the duration that they wish to have that guarantee
- * (at the cost, of course, of any other threads being able to access this pool).
- * <p>
- * If underlying provisioning/destroying operations fail, the pool
- * currently may be in an unknown state, currently.
- * If more robustness is needed this can be added.
- * 
- * @deprecated since 0.6.0; never used in production setting, and thus of dubious value; best avoided as unlikely to be supported in future versions
- */
-@Deprecated
-public class MachinePool {
-    
-    private static final Logger log = LoggerFactory.getLogger(MachinePool.class);
-    
-    protected final ComputeService computeService;
-    final AtomicBoolean refreshNeeded = new AtomicBoolean(true);
-    final List<ReusableMachineTemplate> templates = new ArrayList<ReusableMachineTemplate>();
-    String poolName = null;
-    
-    /** all machines detected, less those in the black list */
-    volatile MachineSet detectedMachines = new MachineSet();
-    volatile MachineSet matchedMachines = new MachineSet();
-    volatile MachineSet claimedMachines = new MachineSet();
-    volatile MachineSet blacklistedMachines = new MachineSet();
-    
-    public MachinePool(ComputeService computeService) {
-        this.computeService = computeService;
-    }
-    
-    protected synchronized void init() {
-        if (!refreshNeeded.get()) return;
-        refresh();
-    }
-    
-    public void setPoolName(String poolName) {
-        if (poolName!=null)
-            log.warn("Changing pool name of "+this+" (from "+this.poolName+" to "+poolName+") is discouraged.");
-        this.poolName = poolName;
-    }
-    /** pool name is used as a group/label by jclouds, for convenience only; 
-     * it has no special properties for detecting matching instances
-     * (use explicit tags on the templates, for that). 
-     * defaults to name of pool class and user name.
-     * callers should set pool name before getting, if using a custom name. */
-    public synchronized String getPoolName() {
-        if (poolName==null)
-            poolName = getClass().getSimpleName()+"-"+System.getProperty("user.name");
-        return poolName;
-    }
-    
-    /** refreshes the pool of machines from the server (finding all instances matching the registered templates) */
-    public synchronized void refresh() {
-        refreshNeeded.set(false);
-        Set<? extends ComputeMetadata> computes = computeService.listNodes();
-        Set<NodeMetadata> nodes = new LinkedHashSet<NodeMetadata>();
-        for (ComputeMetadata c: computes) {
-            if (c instanceof NodeMetadata) {
-                nodes.add((NodeMetadata)c);
-            } else {
-                // TODO should we try to fetch more info?
-                log.warn("MachinePool "+this+" ignoring non-Node record for remote machine: "+c);
-            }
-        }
-
-        MachineSet allNewDetectedMachines = new MachineSet(nodes);
-        MachineSet newDetectedMachines = filterForAllowedMachines(allNewDetectedMachines);
-        MachineSet oldDetectedMachines = detectedMachines;
-        MachineSet newMatchedMachines = new MachineSet();
-        detectedMachines = newDetectedMachines;
-
-        MachineSet appearedMachinesIncludingBlacklist = allNewDetectedMachines.removed(oldDetectedMachines);
-        MachineSet appearedMachines = filterForAllowedMachines(appearedMachinesIncludingBlacklist);
-        if (appearedMachinesIncludingBlacklist.size()>appearedMachines.size())
-            if (log.isDebugEnabled()) log.debug("Pool "+this+", ignoring "+(appearedMachinesIncludingBlacklist.size()-appearedMachines.size())+" disallowed");
-        int matchedAppeared = 0;
-        for (NodeMetadata m: appearedMachines) {
-            if (m.getStatus() != NodeMetadata.Status.RUNNING) {
-                if (log.isDebugEnabled()) 
-                    log.debug("Pool "+this+", newly detected machine "+m+", not running ("+m.getStatus()+")");
-            } else {
-                Set<ReusableMachineTemplate> ts = getTemplatesMatchingInstance(m);
-                if (!ts.isEmpty()) {
-                    matchedAppeared++;
-                    newMatchedMachines = newMatchedMachines.added(new MachineSet(m));
-                    if (log.isDebugEnabled()) 
-                        log.debug("Pool "+this+", newly detected machine "+m+", matches pool templates "+ts);
-                } else {
-                    if (log.isDebugEnabled()) 
-                        log.debug("Pool "+this+", newly detected machine "+m+", does not match any pool templates");
-                }
-            }
-        }
-        if (matchedAppeared>0) {
-            log.info("Pool "+this+" discovered "+matchedAppeared+" matching machines (of "+appearedMachines.size()+" total new; "+newDetectedMachines.size()+" total including claimed and unmatched)");
-        } else {
-            if (log.isDebugEnabled()) 
-                log.debug("Pool "+this+" discovered "+matchedAppeared+" matching machines (of "+appearedMachines.size()+" total new; "+newDetectedMachines.size()+" total including claimed and unmatched)");
-        }
-        matchedMachines = newMatchedMachines;
-    }
-
-    protected MachineSet filterForAllowedMachines(MachineSet input) {
-        return input.removed(blacklistedMachines);
-    }
-
-    // TODO template registry and claiming from a template could be a separate responsibility
-    
-    protected ReusableMachineTemplate registerTemplate(ReusableMachineTemplate template) {
-        registerTemplates(template);
-        return template;
-    }
-    protected void registerTemplates(ReusableMachineTemplate ...templatesToReg) {
-        synchronized (templates) { 
-            for (ReusableMachineTemplate template: templatesToReg)
-                templates.add(template); 
-        }
-    }
-    
-    protected ReusableMachineTemplate newTemplate(String name) {
-        return registerTemplate(new ReusableMachineTemplate(name));
-    }
-
-    
-    public List<ReusableMachineTemplate> getTemplates() {
-        List<ReusableMachineTemplate> result;
-        synchronized (templates) { result = ImmutableList.copyOf(templates); }
-        return result;
-    }
-    
-    /** all machines matching any templates */
-    public MachineSet all() {
-        init();
-        return matchedMachines;
-    }
-
-    /** machines matching any templates which have not been claimed */
-    public MachineSet unclaimed() {
-        init();
-        synchronized (this) {
-            return matchedMachines.removed(claimedMachines);
-        }
-    }
-    
-    /** returns all machines matching the given criteria (may be claimed) */
-    @SuppressWarnings("unchecked")
-    public MachineSet all(Predicate<NodeMetadata> criterion) {
-        // To avoid generics complaints in callers caused by varargs, overload here
-        return all(new Predicate[] {criterion});
-    }
-    
-    /** returns all machines matching the given criteria (may be claimed) */
-    public MachineSet all(Predicate<NodeMetadata> ...ops) {
-        return new MachineSet(Iterables.filter(all(), compose(ops)));
-    }
-
-    /** returns unclaimed machines matching the given criteria */
-    @SuppressWarnings("unchecked")
-    public MachineSet unclaimed(Predicate<NodeMetadata> criterion) {
-        // To avoid generics complaints in callers caused by varargs, overload here
-        return unclaimed(new Predicate[] {criterion});
-    }
-    
-    /** returns unclaimed machines matching the given criteria */
-    public MachineSet unclaimed(Predicate<NodeMetadata> ...criteria) {
-        return new MachineSet(Iterables.filter(unclaimed(), compose(criteria)));
-    }
-
-    /** creates machines if necessary so that this spec exists (may already be claimed however) 
-     * returns a set of all matching machines, guaranteed non-empty 
-     * (but possibly some are already claimed) */
-    public MachineSet ensureExists(ReusableMachineTemplate template) {
-        return ensureExists(1, template);
-    }
-
-    public synchronized void addToBlacklist(MachineSet newToBlacklist) {
-        setBlacklist(blacklistedMachines.added(newToBlacklist));
-    }
-    
-    /** replaces the blacklist set; callers should generally perform a refresh()
-     * afterwards, to trigger re-detection of blacklisted machines
-     */
-    public synchronized void setBlacklist(MachineSet newBlacklist) {
-        blacklistedMachines = newBlacklist;
-        detectedMachines = detectedMachines.removed(blacklistedMachines);
-        matchedMachines = matchedMachines.removed(blacklistedMachines);
-    }
-    
-    /** creates machines if necessary so that this spec exists (may already be claimed however);
-     * returns a set of all matching machines, of size at least count (but possibly some are already claimed).
-     * (the pool can change at any point, so this set is a best-effort but may be out of date.
-     * see javadoc comments on this class.) */
-    public MachineSet ensureExists(int count, ReusableMachineTemplate template) {
-        MachineSet current;
-        current = all(matching(template));
-        if (current.size() >= count)
-            return current;
-        //have to create more
-        MachineSet moreNeeded = create(count-current.size(), template);
-        return current.added(moreNeeded);
-    }
-    
-    /** creates machines if necessary so that this spec can subsequently be claimed;
-     * returns all such unclaimed machines, guaranteed to be non-empty.
-    * (the pool can change at any point, so this set is a best-effort but may be out of date.
-    * see javadoc comments on this class.) */
-    public MachineSet ensureUnclaimed(ReusableMachineTemplate template) {
-        return ensureUnclaimed(1, template);
-    }
-
-    /** creates machines if necessary so that this spec can subsequently be claimed;
-     * returns a set of at least count unclaimed machines */
-    public MachineSet ensureUnclaimed(int count, ReusableMachineTemplate template) {
-        MachineSet current;
-        current = unclaimed(matching(template));
-        if (current.size() >= count)
-            return current;
-        //have to create more
-        MachineSet moreNeeded = create(count-current.size(), template);
-        return current.added(moreNeeded);
-    }
-
-    public Set<ReusableMachineTemplate> getTemplatesMatchingInstance(NodeMetadata nm) {
-        Set<ReusableMachineTemplate> result = new LinkedHashSet<ReusableMachineTemplate>(); 
-        for (ReusableMachineTemplate t: getTemplates()) {
-            if (matching(t).apply(nm)) {
-               result.add(t); 
-            }
-        }        
-        return result;
-    }
-    
-    /** creates the given number of machines of the indicated template */
-    public MachineSet create(int count, ReusableMachineTemplate template) {
-        Set<? extends NodeMetadata> nodes;
-        try {
-            Template t = template.newJcloudsTemplate(computeService);
-            if (log.isDebugEnabled()) log.debug("Creating "+count+" new instances of "+t);
-            nodes = computeService.createNodesInGroup(getPoolName(), count, t);
-        } catch (RunNodesException e) {
-            throw Throwables.propagate(e);
-        }
-        MachineSet result = new MachineSet(nodes);
-        registerNewNodes(result, template);
-        return result;
-    }
-    protected void registerNewNodes(MachineSet result, ReusableMachineTemplate template) {
-        for (NodeMetadata m: result) {
-            Set<ReusableMachineTemplate> ts = getTemplatesMatchingInstance(m);
-            if (ts.isEmpty()) {
-                log.error("Pool "+this+", created machine "+m+" from template "+template+", but no pool templates match!");
-            } else {
-                if (log.isDebugEnabled())
-                    log.debug("Pool "+this+", created machine "+m+" from template "+template+", matching templates "+ts);
-            }
-        }
-        synchronized (this) {
-            detectedMachines = detectedMachines.added(result);
-            matchedMachines = matchedMachines.added(result);
-        }
-    }
-
-    /** claims the indicated number of machines with the indicated spec, creating if necessary */
-    public MachineSet claim(int count, ReusableMachineTemplate t) {
-        init();
-        Set<NodeMetadata> claiming = new LinkedHashSet<NodeMetadata>();
-        while (claiming.size() < count) {
-            MachineSet mm = ensureUnclaimed(count - claiming.size(), t);
-            for (NodeMetadata m : mm) {
-                synchronized (this) {
-                    if (claiming.size() < count && !claimedMachines.contains(m)) {
-                        claiming.add(m);
-                        claimedMachines = claimedMachines.added(new MachineSet(m));
-                    }
-                }
-            }
-        }
-        MachineSet result = new MachineSet(claiming);
-        return result;
-    }
-
-
-    /** claims the indicated set of machines;
-     * throws exception if cannot all be claimed;
-     * returns the set passed in if successful */
-    public MachineSet claim(MachineSet set) {
-        init();
-        synchronized (this) {
-            MachineSet originalClaimed = claimedMachines;
-            claimedMachines = claimedMachines.added(set);
-            MachineSet newlyClaimed = claimedMachines.removed(originalClaimed);
-            if (newlyClaimed.size() != set.size()) {
-                //did not claim all; unclaim and fail
-                claimedMachines = originalClaimed;
-                MachineSet unavailable = set.removed(newlyClaimed); 
-                throw new IllegalArgumentException("Could not claim all requested machines; failed to claim "+unavailable);
-            }
-            return newlyClaimed;
-        }
-    }
-    
-    public int unclaim(MachineSet set) {
-        init();
-        synchronized (this) {
-            MachineSet originalClaimed = claimedMachines;
-            claimedMachines = claimedMachines.removed(set);
-            return originalClaimed.size() - claimedMachines.size();
-        }
-    }
-
-    
-    public int destroy(final MachineSet set) {
-        init();
-        synchronized (this) {
-            detectedMachines = detectedMachines.removed(set);
-            matchedMachines = matchedMachines.removed(set);
-            claimedMachines = claimedMachines.removed(set);
-        }
-        Set<? extends NodeMetadata> destroyed = computeService.destroyNodesMatching(new Predicate<NodeMetadata>() {
-            @Override
-            public boolean apply(NodeMetadata input) {
-                return set.contains(input);
-            }
-        });
-        synchronized (this) {
-            //in case a rescan happened while we were destroying
-            detectedMachines = detectedMachines.removed(set);
-            matchedMachines = matchedMachines.removed(set);
-            claimedMachines = claimedMachines.removed(set);
-        }
-        return destroyed.size();        
-    }
-        
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7d072fde/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java
deleted file mode 100644
index 2f6afcb..0000000
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.jclouds;
-
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.location.jclouds.pool.MachineSet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.location.jclouds.pool.MachinePoolPredicates;
-import org.apache.brooklyn.location.jclouds.pool.ReusableMachineTemplate;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-
-public class BrooklynMachinePoolLiveTest {
-
-    public static final Logger log = LoggerFactory.getLogger(BrooklynMachinePoolLiveTest.class);
-    
-    public static class SamplePool extends BrooklynMachinePool {
-        public SamplePool(JcloudsLocation l) {
-            super(l);
-        }
-
-        public final static ReusableMachineTemplate 
-            USUAL_VM = 
-                new ReusableMachineTemplate("usual").templateOwnedByMe().
-                tagOptional("tagForUsualVm").
-                metadataOptional("metadataForUsualVm", "12345").
-                minRam(1024).minCores(2);
-
-        public final static ReusableMachineTemplate 
-            ANYONE_NOT_TINY_VM = 
-                new ReusableMachineTemplate("anyone").
-                minRam(512).minCores(1).strict(false);
-
-        public static final ReusableMachineTemplate 
-            VM_LARGE1 = 
-                new ReusableMachineTemplate("vm.large1").templateOwnedByMe().
-                minRam(16384).minCores(4),
-            VM_SMALL1 = 
-                new ReusableMachineTemplate("vm.small1").templateOwnedByMe().smallest();
-        
-        { registerTemplates(USUAL_VM, ANYONE_NOT_TINY_VM, VM_LARGE1, VM_SMALL1); }
-    }
-
-
-    private LocalManagementContext managementContext;
-    
-    @BeforeMethod(alwaysRun=true)
-    public void setUp() throws Exception {
-        managementContext = new LocalManagementContext();
-    }
-    
-    @AfterMethod(alwaysRun=true)
-    public void tearDown() throws Exception {
-        if (managementContext != null) managementContext.terminate();
-    }
-    
-    @Test(groups="Live")
-    public void buildClaimAndDestroy() {
-        SamplePool p = new SamplePool(resolve("aws-ec2:us-west-1"));
-        log.info("buildClaimAndDestroy: created pool");
-        p.refresh();
-        log.info("buildClaimAndDestroy: refreshed pool");
-        p.ensureExists(2, SamplePool.USUAL_VM);
-        log.info("buildClaimAndDestroy: ensure have 2");
-        SshMachineLocation l = p.obtain(SamplePool.USUAL_VM);
-        Assert.assertNotNull(l);
-        log.info("buildClaimAndDestroy: claimed 1");
-        MachineSet unclaimedUsual = p.unclaimed(MachinePoolPredicates.matching(SamplePool.USUAL_VM));
-        log.info("buildClaimAndDestroy: unclaimed now "+unclaimedUsual);
-        Assert.assertTrue(!unclaimedUsual.isEmpty(), "should have been unclaimed machines (can fail if there are some we cannot connect to, ie blacklisted)");
-        p.destroy(unclaimedUsual);
-        p.destroy(l);
-        unclaimedUsual = p.unclaimed(MachinePoolPredicates.matching(SamplePool.USUAL_VM));
-        log.info("buildClaimAndDestroy: destroyed, unclaimed now "+unclaimedUsual);
-        log.info("end");
-    }
-    
-
-    private JcloudsLocation resolve(String spec) {
-        return (JcloudsLocation) managementContext.getLocationRegistry().resolve(new JcloudsLocationResolver().getPrefix() + ":" + spec);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7d072fde/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/pool/JcloudsMachinePoolLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/pool/JcloudsMachinePoolLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/pool/JcloudsMachinePoolLiveTest.java
deleted file mode 100644
index 4d30c80..0000000
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/pool/JcloudsMachinePoolLiveTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.jclouds.pool;
-
-import java.util.Arrays;
-
-import org.apache.brooklyn.location.jclouds.AbstractJcloudsLiveTest;
-import org.jclouds.ContextBuilder;
-import org.jclouds.compute.ComputeService;
-import org.jclouds.compute.ComputeServiceContext;
-import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
-import org.jclouds.sshj.config.SshjSshClientModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-
-public class JcloudsMachinePoolLiveTest extends AbstractJcloudsLiveTest {
-
-    public static final Logger log = LoggerFactory.getLogger(JcloudsMachinePoolLiveTest.class);
-    
-    private static final String PROVIDER = AWS_EC2_PROVIDER;
-    private static final String LOCATION_SPEC = PROVIDER + ":" + AWS_EC2_EUWEST_REGION_NAME;
-    
-    public static class SamplePool extends MachinePool {
-        public SamplePool(ComputeService svc) {
-            super(svc);
-        }
-
-        public final static ReusableMachineTemplate 
-            USUAL_VM = 
-                new ReusableMachineTemplate("usual").templateOwnedByMe().
-                tagOptional("tagForUsualVm").
-                metadataOptional("metadataForUsualVm", "12345").
-                minRam(1024).minCores(2);
-
-        public final static ReusableMachineTemplate 
-            ANYONE_NOT_TINY_VM = 
-                new ReusableMachineTemplate("anyone").
-                minRam(512).minCores(1).strict(false);
-
-        public static final ReusableMachineTemplate 
-            VM_LARGE1 = 
-                new ReusableMachineTemplate("vm.large1").templateOwnedByMe().
-                minRam(16384).minCores(4),
-            VM_SMALL1 = 
-                new ReusableMachineTemplate("vm.small1").templateOwnedByMe().smallest();
-        
-        { registerTemplates(USUAL_VM, ANYONE_NOT_TINY_VM, VM_LARGE1, VM_SMALL1); }
-    }
-    
-    private ComputeServiceContext context;
-    
-    @BeforeMethod(alwaysRun=true)
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        
-        jcloudsLocation = (JcloudsLocation) managementContext.getLocationRegistry().resolve(LOCATION_SPEC);
-        
-        context = ContextBuilder.newBuilder(PROVIDER)
-                .modules(Arrays.asList(new SshjSshClientModule(), new SLF4JLoggingModule()))
-                .credentials(jcloudsLocation.getIdentity(), jcloudsLocation.getCredential())
-                .build(ComputeServiceContext.class);
-    }
-    
-    @AfterMethod(alwaysRun=true)
-    @Override
-    public void tearDown() throws Exception {
-        try {
-            super.tearDown();
-        } finally {
-            if (context != null) context.close();
-        }
-    }
-    
-    @Test(groups={"Live","WIP"})
-    public void buildClaimAndDestroy() {
-        ComputeService svc = context.getComputeService();
-        SamplePool p = new SamplePool(svc);
-        log.info("buildClaimAndDestroy: created pool");
-        p.refresh();
-        log.info("buildClaimAndDestroy: refreshed pool");
-        p.ensureExists(2, SamplePool.USUAL_VM);
-        log.info("buildClaimAndDestroy: ensure have 2");
-        MachineSet l = p.claim(1, SamplePool.USUAL_VM);
-        Assert.assertEquals(l.size(), 1);
-        log.info("buildClaimAndDestroy: claimed 1");
-        MachineSet unclaimedUsual = p.unclaimed(MachinePoolPredicates.matching(SamplePool.USUAL_VM));
-        log.info("buildClaimAndDestroy: unclaimed now "+unclaimedUsual);
-        Assert.assertTrue(!unclaimedUsual.isEmpty());
-        p.destroy(unclaimedUsual);
-        unclaimedUsual = p.unclaimed(MachinePoolPredicates.matching(SamplePool.USUAL_VM));
-        log.info("buildClaimAndDestroy: destroyed, unclaimed now "+unclaimedUsual);
-        log.info("end");
-    }
-    
-
-    
-}



[12/16] incubator-brooklyn git commit: Adds VanillaSoftwareProcessStreamsIntegrationTest

Posted by he...@apache.org.
Adds VanillaSoftwareProcessStreamsIntegrationTest

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

Branch: refs/heads/master
Commit: ce8e69d026bd15718bcebde94c0d95666e90b823
Parents: 3385e7b
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 12:33:33 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:34:21 2015 +0100

----------------------------------------------------------------------
 ...laSoftwareProcessStreamsIntegrationTest.java | 131 +++++++++++++++++++
 1 file changed, 131 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ce8e69d0/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessStreamsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessStreamsIntegrationTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessStreamsIntegrationTest.java
new file mode 100644
index 0000000..9467cad
--- /dev/null
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessStreamsIntegrationTest.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.entity.software.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.mgmt.HasTaskChildren;
+import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags.WrappedStream;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.apache.brooklyn.util.core.task.TaskPredicates;
+import org.apache.brooklyn.util.text.StringPredicates;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
+public class VanillaSoftwareProcessStreamsIntegrationTest extends BrooklynAppUnitTestSupport {
+
+    private static final Logger log = LoggerFactory.getLogger(VanillaSoftwareProcessStreamsIntegrationTest.class);
+
+    private Location localhost;
+
+    @BeforeMethod(alwaysRun=true)
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        localhost = app.getManagementContext().getLocationRegistry().resolve("localhost");
+    }
+
+    @Test(groups = "Integration")
+    public void testGetsStreams() {
+        Map<String, String> cmds = ImmutableMap.<String, String>builder()
+                .put("pre-install-command", "myPreInstall")
+                .put("ssh: installing.*", "myInstall")
+                .put("post-install-command", "myPostInstall")
+                .put("ssh: customizing.*", "myCustomizing")
+                .put("pre-launch-command", "myPreLaunch")
+                .put("ssh: launching.*", "myLaunch")
+                .put("post-launch-command", "myPostLaunch")
+                .build();
+        VanillaSoftwareProcess entity = app.createAndManageChild(EntitySpec.create(VanillaSoftwareProcess.class)
+                .configure(VanillaSoftwareProcess.PRE_INSTALL_COMMAND, "echo "+cmds.get("pre-install-command"))
+                .configure(VanillaSoftwareProcess.INSTALL_COMMAND, "echo "+cmds.get("ssh: installing.*"))
+                .configure(VanillaSoftwareProcess.POST_INSTALL_COMMAND, "echo "+cmds.get("post-install-command"))
+                .configure(VanillaSoftwareProcess.CUSTOMIZE_COMMAND, "echo "+cmds.get("ssh: customizing.*"))
+                .configure(VanillaSoftwareProcess.PRE_LAUNCH_COMMAND, "echo "+cmds.get("pre-launch-command"))
+                .configure(VanillaSoftwareProcess.LAUNCH_COMMAND, "echo "+cmds.get("ssh: launching.*"))
+                .configure(VanillaSoftwareProcess.POST_LAUNCH_COMMAND, "echo "+cmds.get("post-launch-command"))
+                .configure(VanillaSoftwareProcess.CHECK_RUNNING_COMMAND, "true"));
+        app.start(ImmutableList.of(localhost));
+
+        Set<Task<?>> tasks = BrooklynTaskTags.getTasksInEntityContext(mgmt.getExecutionManager(), entity);
+        
+        for (Map.Entry<String, String> entry : cmds.entrySet()) {
+            String taskNameRegex = entry.getKey();
+            String echoed = entry.getValue();
+            
+            Task<?> subTask = findTaskOrSubTask(tasks, TaskPredicates.displayNameMatches(StringPredicates.matchesRegex(taskNameRegex))).get();
+            
+            String stdin = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_STDIN);
+            String stdout = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_STDOUT);
+            String stderr = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_STDERR);
+            String env = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_ENV);
+            String msg = "stdin="+stdin+"; stdout="+stdout+"; stderr="+stderr+"; env="+env;
+            
+            assertTrue(stdin.contains("echo "+echoed), msg);
+            assertTrue(stdout.contains(echoed), msg);
+        }
+    }
+
+    protected String getStreamOrFail(Task<?> task, String streamType) {
+        String msg = "task="+task+"; stream="+streamType;
+        WrappedStream stream = checkNotNull(BrooklynTaskTags.stream(task, BrooklynTaskTags.STREAM_STDIN), "Stream null: "+msg);
+        return checkNotNull(stream.streamContents.get(), "Contents null: "+msg);
+    }
+
+    protected Optional<Task<?>> findTaskOrSubTask(Iterable<? extends Task<?>> tasks, Predicate<? super Task<?>> matcher) {
+        List<String> taskNames = Lists.newArrayList();
+        Optional<Task<?>> result = findTaskOrSubTaskImpl(tasks, matcher, taskNames);
+        if (!result.isPresent()) {
+            log.info("Task not found matching "+matcher+"; contender names were "+taskNames);
+        }
+        return result;
+    }
+    
+    protected Optional<Task<?>> findTaskOrSubTaskImpl(Iterable<? extends Task<?>> tasks, Predicate<? super Task<?>> matcher, List<String> taskNames) {
+        for (Task<?> task : tasks) {
+            if (matcher.apply(task)) return Optional.<Task<?>>of(task);
+        
+            if (!(task instanceof HasTaskChildren)) {
+                return Optional.absent();
+            } else {
+                Optional<Task<?>> subResult = findTaskOrSubTask(((HasTaskChildren) task).getChildren(), matcher);
+                if (subResult.isPresent()) return subResult;
+            }
+        }
+        
+        return Optional.<Task<?>>absent();
+    }
+}


[07/16] incubator-brooklyn git commit: Delete deprecated RegistryLocationResolver

Posted by he...@apache.org.
Delete deprecated RegistryLocationResolver


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

Branch: refs/heads/master
Commit: 5c8ff2a9d52f9abdce7d0f408d3f69ff950d3f39
Parents: 1ffacc6
Author: Aled Sage <al...@gmail.com>
Authored: Wed Aug 19 18:39:04 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:04:12 2015 +0100

----------------------------------------------------------------------
 .../core/location/BasicLocationRegistry.java    |  2 +-
 .../core/location/RegistryLocationResolver.java | 42 --------------------
 2 files changed, 1 insertion(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5c8ff2a9/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
index b6319b4..f8b7c73 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
@@ -400,7 +400,7 @@ public class BasicLocationRegistry implements LocationRegistry {
         return null;
     }
 
-    /** providers default impl for RegistryLocationResolver.accepts */
+    /** providers default impl for {@link LocationResolver#accepts(String, LocationRegistry)} */
     public static boolean isResolverPrefixForSpec(LocationResolver resolver, String spec, boolean argumentRequired) {
         if (spec==null) return false;
         if (spec.startsWith(resolver.getPrefix()+":")) return true;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5c8ff2a9/core/src/main/java/org/apache/brooklyn/core/location/RegistryLocationResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/RegistryLocationResolver.java b/core/src/main/java/org/apache/brooklyn/core/location/RegistryLocationResolver.java
deleted file mode 100644
index a2cf5fa..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/location/RegistryLocationResolver.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.location;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationRegistry;
-import org.apache.brooklyn.api.location.LocationResolver;
-
-/**
- * Extension to LocationResolver which can take a registry.
- * 
- * @deprecated since 0.6; the LocationResolver always takes the LocationRegistry now
- */
-@Deprecated
-public interface RegistryLocationResolver extends LocationResolver {
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    Location newLocationFromString(Map locationFlags, String spec, LocationRegistry registry);
-
-    @Override
-    boolean accepts(String spec, LocationRegistry registry);
-
-}


[15/16] incubator-brooklyn git commit: This closes #858

Posted by he...@apache.org.
This closes #858


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

Branch: refs/heads/master
Commit: c8fd8fbb8f079ebb4938232a1994b95eb1036aa2
Parents: 5146682 ce8e69d
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Aug 20 13:39:00 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Aug 20 13:39:00 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/core/effector/EffectorTasks.java   |   4 +-
 .../org/apache/brooklyn/core/feed/Poller.java   |   2 +-
 .../core/mgmt/EntityManagementUtils.java        |   6 +-
 .../mgmt/ha/HighAvailabilityManagerImpl.java    |   2 +-
 .../mgmt/internal/BrooklynShutdownHooks.java    |   2 +-
 .../rebind/PeriodicDeltaChangeListener.java     |   2 +-
 .../core/mgmt/rebind/RebindManagerImpl.java     |   2 +-
 .../core/objs/proxy/InternalEntityFactory.java  |   2 +-
 .../core/sensor/DependentConfiguration.java     |   8 +-
 .../brooklyn/entity/group/DynamicGroupImpl.java |   2 +-
 .../location/ssh/SshMachineLocation.java        |   2 +-
 .../brooklyn/util/core/file/ArchiveTasks.java   |   2 +-
 .../util/core/task/BasicExecutionContext.java   |   4 +-
 .../brooklyn/util/core/task/BasicTask.java      |   2 +-
 .../util/core/task/DynamicSequentialTask.java   |   2 +-
 .../brooklyn/util/core/task/DynamicTasks.java   |   4 +-
 .../brooklyn/util/core/task/TaskBuilder.java    |  18 ++-
 .../brooklyn/util/core/task/TaskPredicates.java |  55 ++++++++
 .../apache/brooklyn/util/core/task/Tasks.java   |  12 +-
 .../brooklyn/util/core/task/ValueResolver.java  |   2 +-
 .../util/core/task/ssh/SshFetchTaskWrapper.java |   2 +-
 .../util/core/task/ssh/SshPutTaskWrapper.java   |   2 +-
 .../brooklyn/util/core/task/ssh/SshTasks.java   |   2 +-
 .../internal/AbstractProcessTaskFactory.java    |   2 +-
 .../core/effector/EffectorTaskTest.java         |  12 +-
 .../core/entity/trait/FailingEntityImpl.java    |   2 +-
 .../core/entity/trait/StartableMethodsTest.java |   2 +-
 .../internal/EntityExecutionManagerTest.java    |   8 +-
 .../util/core/task/TaskPredicatesTest.java      |  45 +++++++
 .../policy/autoscaling/AutoScalerPolicy.java    |   2 +-
 .../apache/brooklyn/entity/salt/SaltTasks.java  |   4 +-
 .../brooklynnode/BrooklynEntityMirrorImpl.java  |   2 +-
 .../entity/brooklynnode/BrooklynNodeImpl.java   |   2 +-
 .../BrooklynClusterUpgradeEffectorBody.java     |   2 +-
 .../BrooklynNodeUpgradeEffectorBody.java        |  10 +-
 .../apache/brooklyn/entity/chef/ChefTasks.java  |   4 +-
 .../software/base/SameServerEntityImpl.java     |   6 +-
 .../software/base/SoftwareProcessImpl.java      |   6 +-
 .../MachineLifecycleEffectorTasks.java          |   2 +-
 .../software/base/lifecycle/ScriptHelper.java   |   2 +-
 .../system_service/InitdServiceInstaller.java   |   2 +-
 .../system_service/SystemServiceEnricher.java   |   6 +-
 ...laSoftwareProcessStreamsIntegrationTest.java | 131 +++++++++++++++++++
 .../entity/database/mysql/MySqlClusterImpl.java |   4 +-
 .../nosql/couchbase/CouchbaseClusterImpl.java   |   2 +-
 .../nosql/couchbase/CouchbaseNodeSshDriver.java |   2 +-
 .../entity/proxy/AbstractControllerImpl.java    |   2 +-
 .../entity/webapp/DynamicWebAppClusterImpl.java |  10 +-
 .../brooklyn/spi/dsl/methods/DslComponent.java  |   6 +-
 49 files changed, 329 insertions(+), 90 deletions(-)
----------------------------------------------------------------------



[05/16] incubator-brooklyn git commit: Delete deprecated DynamicClusterImpl.createNode(Map)

Posted by he...@apache.org.
Delete deprecated DynamicClusterImpl.createNode(Map)


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

Branch: refs/heads/master
Commit: 1ca4230e4879231dd3e5da6479492f4d131a6979
Parents: 5c8ff2a
Author: Aled Sage <al...@gmail.com>
Authored: Wed Aug 19 18:40:55 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:04:12 2015 +0100

----------------------------------------------------------------------
 .../org/apache/brooklyn/entity/group/DynamicClusterImpl.java   | 6 ------
 1 file changed, 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ca4230e/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
index a8c63ef..b330675 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java
@@ -803,12 +803,6 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus
         return entity;
     }
 
-    /** @deprecated since 0.6; use {@link #createNode(Location, Map)}, so can take that location into account when configuring node */
-    @Deprecated
-    protected Entity createNode(Map<?,?> flags) {
-        return createNode(getLocation(), flags);
-    }
-
     protected List<Entity> pickAndRemoveMembers(int delta) {
         if (delta==0) 
             return Lists.newArrayList();


[11/16] incubator-brooklyn git commit: Adds TaskPredicates

Posted by he...@apache.org.
Adds TaskPredicates


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

Branch: refs/heads/master
Commit: 3385e7b3edebc05a6eab5229d4208226790b520f
Parents: f4533ed
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 12:33:20 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:34:20 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/util/core/task/TaskPredicates.java | 55 ++++++++++++++++++++
 .../util/core/task/TaskPredicatesTest.java      | 45 ++++++++++++++++
 2 files changed, 100 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3385e7b3/core/src/main/java/org/apache/brooklyn/util/core/task/TaskPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/TaskPredicates.java b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskPredicates.java
new file mode 100644
index 0000000..3e42760
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskPredicates.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.util.core.task;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.apache.brooklyn.api.mgmt.Task;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+public class TaskPredicates {
+
+    public static Predicate<Task<?>> displayNameMatches(Predicate<? super String> matcher) {
+        return new DisplayNameMatches(matcher);
+    }
+    
+    public static Predicate<Task<?>> displayNameEqualTo(String name) {
+        return displayNameMatches(Predicates.equalTo(name));
+    }
+    
+    private static class DisplayNameMatches implements Predicate<Task<?>> {
+        private final Predicate<? super String> matcher;
+
+        public DisplayNameMatches(Predicate<? super String> matcher) {
+            this.matcher = checkNotNull(matcher, "matcher");
+        }
+
+        @Override
+        public boolean apply(Task<?> input) {
+            return input != null && matcher.apply(input.getDisplayName());
+        }
+        
+        @Override
+        public String toString() {
+            return "displayNameMatches("+matcher+")";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3385e7b3/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
new file mode 100644
index 0000000..d87dbb5
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
@@ -0,0 +1,45 @@
+package org.apache.brooklyn.util.core.task;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.apache.brooklyn.api.mgmt.ExecutionManager;
+import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicates;
+import com.google.common.util.concurrent.Callables;
+
+public class TaskPredicatesTest extends BrooklynAppUnitTestSupport {
+
+    private ExecutionManager execManager;
+    
+    @BeforeMethod(alwaysRun=true)
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        execManager = mgmt.getExecutionManager();
+    }
+
+    @Test
+    public void testDisplayNameEqualTo() throws Exception {
+        Task<Object> task = execManager.submit(TaskBuilder.builder()
+                .body(Callables.<Object>returning("val"))
+                .displayName("myname")
+                .build());
+        assertTrue(TaskPredicates.displayNameEqualTo("myname").apply(task));
+        assertFalse(TaskPredicates.displayNameEqualTo("wrong").apply(task));
+    }
+    
+    @Test
+    public void testDisplayNameMatches() throws Exception {
+        Task<Object> task = execManager.submit(TaskBuilder.builder()
+                .body(Callables.<Object>returning("val"))
+                .displayName("myname")
+                .build());
+        assertTrue(TaskPredicates.displayNameMatches(Predicates.equalTo("myname")).apply(task));
+        assertFalse(TaskPredicates.displayNameMatches(Predicates.equalTo("wrong")).apply(task));
+    }
+}


[10/16] incubator-brooklyn git commit: Add TaskBuilder.displayName; deprecate TaskBuilder.name

Posted by he...@apache.org.
Add TaskBuilder.displayName; deprecate TaskBuilder.name

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

Branch: refs/heads/master
Commit: f4533edb6bc17de165813192c063d7b5c27f02d3
Parents: 147f9ec
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 12:27:43 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:32:18 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/core/effector/EffectorTasks.java     |  4 ++--
 .../org/apache/brooklyn/core/feed/Poller.java     |  2 +-
 .../brooklyn/core/mgmt/EntityManagementUtils.java |  6 +++---
 .../core/mgmt/ha/HighAvailabilityManagerImpl.java |  2 +-
 .../core/mgmt/internal/BrooklynShutdownHooks.java |  2 +-
 .../mgmt/rebind/PeriodicDeltaChangeListener.java  |  2 +-
 .../core/mgmt/rebind/RebindManagerImpl.java       |  2 +-
 .../core/objs/proxy/InternalEntityFactory.java    |  2 +-
 .../core/sensor/DependentConfiguration.java       |  8 ++++----
 .../brooklyn/entity/group/DynamicGroupImpl.java   |  2 +-
 .../brooklyn/location/ssh/SshMachineLocation.java |  2 +-
 .../brooklyn/util/core/file/ArchiveTasks.java     |  2 +-
 .../util/core/task/BasicExecutionContext.java     |  4 ++--
 .../apache/brooklyn/util/core/task/BasicTask.java |  2 +-
 .../util/core/task/DynamicSequentialTask.java     |  2 +-
 .../brooklyn/util/core/task/DynamicTasks.java     |  4 ++--
 .../brooklyn/util/core/task/TaskBuilder.java      | 18 +++++++++++++-----
 .../org/apache/brooklyn/util/core/task/Tasks.java | 12 ++++++------
 .../brooklyn/util/core/task/ValueResolver.java    |  2 +-
 .../util/core/task/ssh/SshFetchTaskWrapper.java   |  2 +-
 .../util/core/task/ssh/SshPutTaskWrapper.java     |  2 +-
 .../brooklyn/util/core/task/ssh/SshTasks.java     |  2 +-
 .../internal/AbstractProcessTaskFactory.java      |  2 +-
 .../brooklyn/core/effector/EffectorTaskTest.java  | 12 ++++++------
 .../core/entity/trait/FailingEntityImpl.java      |  2 +-
 .../core/entity/trait/StartableMethodsTest.java   |  2 +-
 .../mgmt/internal/EntityExecutionManagerTest.java |  8 ++++----
 .../policy/autoscaling/AutoScalerPolicy.java      |  2 +-
 .../apache/brooklyn/entity/salt/SaltTasks.java    |  4 ++--
 .../brooklynnode/BrooklynEntityMirrorImpl.java    |  2 +-
 .../entity/brooklynnode/BrooklynNodeImpl.java     |  2 +-
 .../BrooklynClusterUpgradeEffectorBody.java       |  2 +-
 .../effector/BrooklynNodeUpgradeEffectorBody.java | 10 +++++-----
 .../apache/brooklyn/entity/chef/ChefTasks.java    |  4 ++--
 .../software/base/SameServerEntityImpl.java       |  6 +++---
 .../entity/software/base/SoftwareProcessImpl.java |  6 +++---
 .../lifecycle/MachineLifecycleEffectorTasks.java  |  2 +-
 .../software/base/lifecycle/ScriptHelper.java     |  2 +-
 .../system_service/InitdServiceInstaller.java     |  2 +-
 .../system_service/SystemServiceEnricher.java     |  6 +++---
 .../entity/database/mysql/MySqlClusterImpl.java   |  4 ++--
 .../nosql/couchbase/CouchbaseClusterImpl.java     |  2 +-
 .../nosql/couchbase/CouchbaseNodeSshDriver.java   |  2 +-
 .../entity/proxy/AbstractControllerImpl.java      |  2 +-
 .../entity/webapp/DynamicWebAppClusterImpl.java   | 10 +++++-----
 .../brooklyn/spi/dsl/methods/DslComponent.java    |  6 +++---
 46 files changed, 98 insertions(+), 90 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/effector/EffectorTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/EffectorTasks.java b/core/src/main/java/org/apache/brooklyn/core/effector/EffectorTasks.java
index 39eb79b..e990bac 100644
--- a/core/src/main/java/org/apache/brooklyn/core/effector/EffectorTasks.java
+++ b/core/src/main/java/org/apache/brooklyn/core/effector/EffectorTasks.java
@@ -155,10 +155,10 @@ public class EffectorTasks {
         private TaskBuilder<T> builder;
         public ParameterTask(ConfigKey<T> p) {
             this.p = p;
-            this.builder = Tasks.<T>builder().name("parameter "+p);
+            this.builder = Tasks.<T>builder().displayName("parameter "+p);
         }
         public ParameterTask<T> name(String taskName) {
-            builder.name(taskName);
+            builder.displayName(taskName);
             return this;
         }
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java b/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java
index fd50ebd..d57f826 100644
--- a/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java
+++ b/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java
@@ -134,7 +134,7 @@ public class Poller<V> {
         started = true;
         
         for (final Callable<?> oneOffJob : oneOffJobs) {
-            Task<?> task = Tasks.builder().dynamic(false).body((Callable<Object>) oneOffJob).name("Poll").description("One-time poll job "+oneOffJob).build();
+            Task<?> task = Tasks.builder().dynamic(false).body((Callable<Object>) oneOffJob).displayName("Poll").description("One-time poll job "+oneOffJob).build();
             oneOffTasks.add(((EntityInternal)entity).getExecutionContext().submit(task));
         }
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
index 49e1c1c..1391dc4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
@@ -196,7 +196,7 @@ public class EntityManagementUtils {
         int size = children.size();
         childrenCountString = size+" "+(size!=1 ? "children" : "child"); 
 
-        TaskBuilder<List<String>> taskM = Tasks.<List<String>>builder().name("add children")
+        TaskBuilder<List<String>> taskM = Tasks.<List<String>>builder().displayName("add children")
             .dynamic(true)
             .tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)
             .body(new Callable<List<String>>() {
@@ -205,7 +205,7 @@ public class EntityManagementUtils {
                 }})
                 .description("Add and start "+childrenCountString);
 
-        TaskBuilder<?> taskS = Tasks.builder().parallel(true).name("add (parallel)").description("Start each new entity");
+        TaskBuilder<?> taskS = Tasks.builder().parallel(true).displayName("add (parallel)").description("Start each new entity");
 
         // autostart if requested
         for (Entity child: children) {
@@ -213,7 +213,7 @@ public class EntityManagementUtils {
                 taskS.add(Effectors.invocation(child, Startable.START, ImmutableMap.of("locations", ImmutableList.of())));
             } else {
                 // include a task, just to give feedback in the GUI
-                taskS.add(Tasks.builder().name("create").description("Skipping start (not a Startable Entity)")
+                taskS.add(Tasks.builder().displayName("create").description("Skipping start (not a Startable Entity)")
                     .body(new Runnable() { public void run() {} })
                     .tag(BrooklynTaskTags.tagForTargetEntity(child))
                     .build());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java
index 95e5ef1..0d8de30 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java
@@ -557,7 +557,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
         };
         Callable<Task<?>> taskFactory = new Callable<Task<?>>() {
             @Override public Task<?> call() {
-                return Tasks.builder().dynamic(false).body(job).name("HA poller task").tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
+                return Tasks.builder().dynamic(false).body(job).displayName("HA poller task").tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
                     .description("polls HA status to see whether this node should promote").build();
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
index eaebcfb..677a4f6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
@@ -216,7 +216,7 @@ public class BrooklynShutdownHooks {
         for (Entity entityToStop: entitiesToStop) {
             final Entity entity = entityToStop;
             if (!Entities.isManaged(entity)) continue;
-            Task<Object> t = Tasks.builder().dynamic(false).name("destroying "+entity).body(new Runnable() {
+            Task<Object> t = Tasks.builder().dynamic(false).displayName("destroying "+entity).body(new Runnable() {
                 @Override public void run() { Entities.destroy(entity); }
             }).build();
             stops.add( ((EntityInternal)entity).getExecutionContext().submit(t) );

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
index 78e668a..21f7719 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/PeriodicDeltaChangeListener.java
@@ -207,7 +207,7 @@ public class PeriodicDeltaChangeListener implements ChangeListener {
 
             Callable<Task<?>> taskFactory = new Callable<Task<?>>() {
                 @Override public Task<Void> call() {
-                    return Tasks.<Void>builder().dynamic(false).name("periodic-persister").body(new Callable<Void>() {
+                    return Tasks.<Void>builder().dynamic(false).displayName("periodic-persister").body(new Callable<Void>() {
                         public Void call() {
                             persistNowSafely();
                             return null;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
index 52b984a..dccd91a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
@@ -302,7 +302,7 @@ public class RebindManagerImpl implements RebindManager {
         
         Callable<Task<?>> taskFactory = new Callable<Task<?>>() {
             @Override public Task<Void> call() {
-                return Tasks.<Void>builder().dynamic(false).name("rebind (periodic run").body(new Callable<Void>() {
+                return Tasks.<Void>builder().dynamic(false).displayName("rebind (periodic run").body(new Callable<Void>() {
                     public Void call() {
                         try {
                             rebind(null, null, mode);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
index c5d1c80..9547c9d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
@@ -279,7 +279,7 @@ public class InternalEntityFactory extends InternalFactory {
          * of the parent entity creating this child entity
          * (note however such subtasks are currently filtered based on parent entity so is excluded).
          */
-        ((EntityInternal)entity).getExecutionContext().submit(Tasks.builder().dynamic(false).name("Entity initialization")
+        ((EntityInternal)entity).getExecutionContext().submit(Tasks.builder().dynamic(false).displayName("Entity initialization")
                 .tag(BrooklynTaskTags.tagForContextEntity(entity))
                 .tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
                 .body(new Runnable() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
index b909856..d4f32d8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
@@ -676,7 +676,7 @@ public class DependentConfiguration {
             validate();
             
             return Tasks.<V>builder().dynamic(false)
-                .name("waiting on "+sensor.getName())
+                .displayName("waiting on "+sensor.getName())
                 .description("Waiting on sensor "+sensor.getName()+" from "+source)
                 .tag("attributeWhenReady")
                 .body(new WaitInTaskForAttributeReady<T,V>(this))
@@ -795,7 +795,7 @@ public class DependentConfiguration {
                 tasks.add(builder.build());
             }
             final Task<List<V>> parallelTask = Tasks.<List<V>>builder().parallel(true).addAll(tasks)
-                .name(name)
+                .displayName(name)
                 .description(descriptionBase+
                     (builder.timeout!=null ? ", timeout "+builder.timeout : ""))
                 .build();
@@ -804,13 +804,13 @@ public class DependentConfiguration {
                 // V2 should be the right type in normal operations
                 return (Task<V2>) parallelTask;
             } else {
-                return Tasks.<V2>builder().name(name).description(descriptionBase)
+                return Tasks.<V2>builder().displayName(name).description(descriptionBase)
                     .tag("attributeWhenReady")
                     .body(new Callable<V2>() {
                         @Override public V2 call() throws Exception {
                             List<V> prePostProgress = DynamicTasks.queue(parallelTask).get();
                             return DynamicTasks.queue(
-                                Tasks.<V2>builder().name("post-processing").description("Applying "+postProcessFromMultiple)
+                                Tasks.<V2>builder().displayName("post-processing").description("Applying "+postProcessFromMultiple)
                                     .body(Functionals.callable(postProcessFromMultiple, prePostProgress))
                                     .build()).get();
                         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
index 5e7e166..61f1437 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicGroupImpl.java
@@ -164,7 +164,7 @@ public class DynamicGroupImpl extends AbstractGroupImpl implements DynamicGroup
         }
         setChangeListener = new MyEntitySetChangeListener();
         ((ManagementContextInternal) getManagementContext()).addEntitySetListener(setChangeListener);
-        Task<Object> rescan = Tasks.builder().name("rescan entities").body(
+        Task<Object> rescan = Tasks.builder().displayName("rescan entities").body(
             new Runnable() {
                 @Override
                 public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java b/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
index ddcfcac..27f87f9 100644
--- a/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
@@ -425,7 +425,7 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
         Callable<Task<?>> cleanupTaskFactory = new Callable<Task<?>>() {
             @Override public Task<Void> call() {
                 return Tasks.<Void>builder().dynamic(false).tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
-                    .name("ssh-location cache cleaner").body(new Callable<Void>() {
+                    .displayName("ssh-location cache cleaner").body(new Callable<Void>() {
                     @Override public Void call() {
                         try {
                             if (sshPoolCacheOrNull != null) sshPoolCacheOrNull.cleanUp();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveTasks.java b/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveTasks.java
index d73526e..51f38e7 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveTasks.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveTasks.java
@@ -41,7 +41,7 @@ public class ArchiveTasks {
         return new TaskFactory<TaskAdaptable<?>>() {
             @Override
             public TaskAdaptable<?> newTask() {
-                return Tasks.<Void>builder().name("deploying "+Urls.getBasename(archiveUrl)).description("installing "+archiveUrl+" and unpacking to "+destDir).body(new Runnable() {
+                return Tasks.<Void>builder().displayName("deploying "+Urls.getBasename(archiveUrl)).description("installing "+archiveUrl+" and unpacking to "+destDir).body(new Runnable() {
                     @Override
                     public void run() {
                         boolean unpacked = ArchiveUtils.deploy(resolver, props, archiveUrl, machine, destDir, allowNonarchivesOrKeepArchiveAfterDeploy, optionalTmpDir, optionalDestFile);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index 74d4ac3..13dda46 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -133,7 +133,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
                     // so wrap it in a task running in this context to keep a reference to the child
                     // (this matters when we are navigating in the GUI; without it we lose the reference to the child 
                     // when browsing in the context of the parent)
-                    return submit(Tasks.<T>builder().name("Cross-context execution: "+t.getDescription()).dynamic(true).body(new Callable<T>() {
+                    return submit(Tasks.<T>builder().displayName("Cross-context execution: "+t.getDescription()).dynamic(true).body(new Callable<T>() {
                         public T call() { 
                             return DynamicTasks.get(t); 
                         }
@@ -145,7 +145,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
             } else {
                 // as above, but here we are definitely not a child (what we are submitting isn't even a task)
                 // (will only come here if properties defines tags including a target entity, which probably never happens) 
-                submit(Tasks.<T>builder().name("Cross-context execution").dynamic(true).body(new Callable<T>() {
+                submit(Tasks.<T>builder().displayName("Cross-context execution").dynamic(true).body(new Callable<T>() {
                     public T call() {
                         if (task instanceof Callable) {
                             return DynamicTasks.queue( Tasks.<T>builder().dynamic(false).body((Callable<T>)task).build() ).getUnchecked();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
index 365ce3a..0c26dd1 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
@@ -856,7 +856,7 @@ public class BasicTask<T> implements TaskInternal<T> {
     }
     
     private static <T> Task<T> newGoneTaskFor(Task<?> task) {
-        Task<T> t = Tasks.<T>builder().dynamic(false).name(task.getDisplayName())
+        Task<T> t = Tasks.<T>builder().dynamic(false).displayName(task.getDisplayName())
             .description("Details of the original task "+task+" have been forgotten.")
             .body(Callables.returning((T)null)).build();
         ((BasicTask<T>)t).ignoreIfNotRun();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java
index d649f3c..b7985c8 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicSequentialTask.java
@@ -257,7 +257,7 @@ public class DynamicSequentialTask<T> extends BasicTask<T> implements HasTaskChi
             // optimisation would either use newTaskEndCallback property on task to submit
             // or use some kind of single threaded executor for the queued tasks
             Task<List<Object>> secondaryJobMaster = Tasks.<List<Object>>builder().dynamic(false)
-                    .name("DST manager (internal)")
+                    .displayName("DST manager (internal)")
                     // TODO marking it transient helps it be GC'd sooner, 
                     // but ideally we wouldn't have this,
                     // or else it would be a child

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicTasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicTasks.java
index b2791b3..52ec88d 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicTasks.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/DynamicTasks.java
@@ -264,12 +264,12 @@ public class DynamicTasks {
 
     /** @see #queue(org.apache.brooklyn.api.mgmt.TaskAdaptable)  */
     public static <T> Task<T> queue(String name, Callable<T> job) {
-        return DynamicTasks.queue(Tasks.<T>builder().name(name).body(job).build());
+        return DynamicTasks.queue(Tasks.<T>builder().displayName(name).body(job).build());
     }
 
     /** @see #queue(org.apache.brooklyn.api.mgmt.TaskAdaptable)  */
     public static <T> Task<T> queue(String name, Runnable job) {
-        return DynamicTasks.queue(Tasks.<T>builder().name(name).body(job).build());
+        return DynamicTasks.queue(Tasks.<T>builder().displayName(name).body(job).build());
     }
 
     /** queues the task if needed, i.e. if it is not yet submitted (so it will run), 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/TaskBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/TaskBuilder.java b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskBuilder.java
index 93b6a54..1a60212 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/TaskBuilder.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskBuilder.java
@@ -38,7 +38,7 @@ import com.google.common.collect.Iterables;
 /** Convenience for creating tasks; note that DynamicSequentialTask is the default */
 public class TaskBuilder<T> {
 
-    String name = null;
+    String displayName = null;
     String description = null;
     Callable<T> body = null;
     Boolean swallowChildrenFailures = null;
@@ -51,9 +51,17 @@ public class TaskBuilder<T> {
     public static <T> TaskBuilder<T> builder() {
         return new TaskBuilder<T>();
     }
-    
+
+    /**
+     * @deprecated since 0.8.0; use {@link #displayName(String)}
+     */
+    @Deprecated
     public TaskBuilder<T> name(String name) {
-        this.name = name;
+        return displayName(name);
+    }
+    
+    public TaskBuilder<T> displayName(String displayName) {
+        this.displayName = displayName;
         return this;
     }
     
@@ -130,7 +138,7 @@ public class TaskBuilder<T> {
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public Task<T> build() {
         MutableMap<String, Object> taskFlags = MutableMap.copyOf(flags);
-        if (name!=null) taskFlags.put("displayName", name);
+        if (displayName!=null) taskFlags.put("displayName", displayName);
         if (description!=null) taskFlags.put("description", description);
         if (!tags.isEmpty()) taskFlags.put("tags", tags);
         
@@ -178,6 +186,6 @@ public class TaskBuilder<T> {
     
     @Override
     public String toString() {
-        return super.toString()+"["+name+"]";
+        return super.toString()+"["+displayName+"]";
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
index 8152adf..3dae7ab 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
@@ -195,7 +195,7 @@ public class Tasks {
         return parallelInternal(name, asTasks(Iterables.toArray(tasks, TaskAdaptable.class)));
     }
     private static Task<List<?>> parallelInternal(String name, Task<?>[] tasks) {
-        return Tasks.<List<?>>builder().name(name).parallel(true).add(tasks).build();
+        return Tasks.<List<?>>builder().displayName(name).parallel(true).add(tasks).build();
     }
 
     public static Task<List<?>> sequential(TaskAdaptable<?> ...tasks) {
@@ -217,13 +217,13 @@ public class Tasks {
         return sequential(name, asTasks(Iterables.toArray(tasks, TaskAdaptable.class)));
     }
     private static Task<List<?>> sequentialInternal(String name, Task<?>[] tasks) {
-        return Tasks.<List<?>>builder().name(name).parallel(false).add(tasks).build();
+        return Tasks.<List<?>>builder().displayName(name).parallel(false).add(tasks).build();
     }
     private static TaskFactory<?> sequentialInternal(final String name, final TaskFactory<?> ...taskFactories) {
         return new TaskFactory<TaskAdaptable<?>>() {
             @Override
             public TaskAdaptable<?> newTask() {
-                TaskBuilder<List<?>> tb = Tasks.<List<?>>builder().name(name).parallel(false);
+                TaskBuilder<List<?>> tb = Tasks.<List<?>>builder().displayName(name).parallel(false);
                 for (TaskFactory<?> tf: taskFactories)
                     tb.add(tf.newTask().asTask());
                 return tb.build();
@@ -334,7 +334,7 @@ public class Tasks {
         }
     }
     public static Task<Void> fail(final String name, final Throwable optionalError) {
-        return Tasks.<Void>builder().dynamic(false).name(name).body(new Runnable() { public void run() { 
+        return Tasks.<Void>builder().dynamic(false).displayName(name).body(new Runnable() { public void run() { 
             if (optionalError!=null) throw Exceptions.propagate(optionalError); else throw new RuntimeException("Failed: "+name);
         } }).build();
     }
@@ -465,7 +465,7 @@ public class Tasks {
      * returning true or false depending on whether repeater succeed */
     public static TaskBuilder<Boolean> testing(Repeater repeater) {
         return Tasks.<Boolean>builder().body(new WaitForRepeaterCallable(repeater, false))
-            .name("waiting for condition")
+            .displayName("waiting for condition")
             .description("Testing whether " + getTimeoutString(repeater) + ": "+repeater.getDescription());
     }
 
@@ -473,7 +473,7 @@ public class Tasks {
      * throwing if it does not */
     public static TaskBuilder<?> requiring(Repeater repeater) {
         return Tasks.<Boolean>builder().body(new WaitForRepeaterCallable(repeater, true))
-            .name("waiting for condition")
+            .displayName("waiting for condition")
             .description("Requiring " + getTimeoutString(repeater) + ": " + repeater.getDescription());
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
index 35cae91..4a1d030 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java
@@ -325,7 +325,7 @@ public class ValueResolver<T> implements DeferredSupplier<T> {
                             }
                         } };
                     String description = getDescription();
-                    TaskBuilder<Object> vb = Tasks.<Object>builder().body(callable).name("Resolving dependent value").description(description);
+                    TaskBuilder<Object> vb = Tasks.<Object>builder().body(callable).displayName("Resolving dependent value").description(description);
                     if (isTransientTask) vb.tag(BrooklynTaskTags.TRANSIENT_TASK_TAG);
                     Task<Object> vt = exec.submit(vb.build());
                     // TODO to handle immediate resolution, it would be nice to be able to submit 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshFetchTaskWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshFetchTaskWrapper.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshFetchTaskWrapper.java
index c667d03..5e8e4fc 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshFetchTaskWrapper.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshFetchTaskWrapper.java
@@ -57,7 +57,7 @@ public class SshFetchTaskWrapper implements TaskWrapper<String> {
     SshFetchTaskWrapper(SshFetchTaskFactory factory) {
         this.remoteFile = Preconditions.checkNotNull(factory.remoteFile, "remoteFile");
         this.machine = Preconditions.checkNotNull(factory.machine, "machine");
-        TaskBuilder<String> tb = TaskBuilder.<String>builder().dynamic(false).name("ssh fetch "+factory.remoteFile);
+        TaskBuilder<String> tb = TaskBuilder.<String>builder().dynamic(false).displayName("ssh fetch "+factory.remoteFile);
         task = tb.body(new SshFetchJob()).build();
         config = factory.getConfig();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshPutTaskWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshPutTaskWrapper.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshPutTaskWrapper.java
index 78aa3ab..f15e06f 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshPutTaskWrapper.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshPutTaskWrapper.java
@@ -49,7 +49,7 @@ public class SshPutTaskWrapper extends SshPutTaskStub implements TaskWrapper<Voi
     // package private as only AbstractSshTaskFactory should invoke
     SshPutTaskWrapper(SshPutTaskFactory constructor) {
         super(constructor);
-        TaskBuilder<Void> tb = TaskBuilder.<Void>builder().dynamic(false).name(getSummary());
+        TaskBuilder<Void> tb = TaskBuilder.<Void>builder().dynamic(false).displayName(getSummary());
         task = tb.body(new SshPutJob()).build();
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java
index 448cd61..e939ca8 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java
@@ -219,7 +219,7 @@ public class SshTasks {
         return new TaskFactory<TaskAdaptable<?>>() {
             @Override
             public TaskAdaptable<?> newTask() {
-                return Tasks.<Void>builder().name("installing "+Urls.getBasename(url)).description("installing "+url+" to "+destPath).body(new Runnable() {
+                return Tasks.<Void>builder().displayName("installing "+Urls.getBasename(url)).description("installing "+url+" to "+destPath).body(new Runnable() {
                     @Override
                     public void run() {
                         int result = location.installTo(utils, props, url, destPath);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java
index 6a98c4b..8d6a343 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java
@@ -168,7 +168,7 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa
 
     /** creates the TaskBuilder which can be further customized; typically invoked by the initial {@link #newTask()} */
     public TaskBuilder<Object> constructCustomizedTaskBuilder() {
-        TaskBuilder<Object> tb = TaskBuilder.builder().dynamic(false).name("ssh: "+getSummary());
+        TaskBuilder<Object> tb = TaskBuilder.builder().dynamic(false).displayName("ssh: "+getSummary());
         
         tb.tag(BrooklynTaskTags.tagForStream(BrooklynTaskTags.STREAM_STDIN, 
                 Streams.byteArrayOfString(Strings.join(commands, "\n"))));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
index 3e79aa9..427f22b 100644
--- a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
@@ -111,7 +111,7 @@ public class EffectorTaskTest extends BrooklynAppUnitTestSupport {
         return new EffectorTaskFactory<Integer>() {
             @Override
             public Task<Integer> newTask(final Entity entity, final Effector<Integer> effector, final ConfigBag parameters) {
-                return TaskBuilder.<Integer>builder().name("times").body(new Callable<Integer>() { public Integer call() { 
+                return TaskBuilder.<Integer>builder().displayName("times").body(new Callable<Integer>() { public Integer call() { 
                     return DynamicTasks.get( x.newTask(entity, effector, parameters) )*y; 
                 } }).build();
             }
@@ -200,26 +200,26 @@ public class EffectorTaskTest extends BrooklynAppUnitTestSupport {
     // ----------------- syntax for more complex -- an effector using subtasks
     
     public static Task<Integer> add(final int x, final int y) {
-        return TaskBuilder.<Integer>builder().name("add").body(new Callable<Integer>() { public Integer call() { return x+y; } }).build();
+        return TaskBuilder.<Integer>builder().displayName("add").body(new Callable<Integer>() { public Integer call() { return x+y; } }).build();
     }
 
     public static Task<Integer> add(final Task<Integer> x, final int y) {
-        return TaskBuilder.<Integer>builder().name("add").body(new Callable<Integer>() { public Integer call() { return DynamicTasks.get(x)+y; } }).build();
+        return TaskBuilder.<Integer>builder().displayName("add").body(new Callable<Integer>() { public Integer call() { return DynamicTasks.get(x)+y; } }).build();
     }
 
     public static Task<Integer> addBasic(final Task<Integer> x, final int y) {
-        return TaskBuilder.<Integer>builder().name("add (not dynamic)").dynamic(false).body(new Callable<Integer>() { public Integer call() {
+        return TaskBuilder.<Integer>builder().displayName("add (not dynamic)").dynamic(false).body(new Callable<Integer>() { public Integer call() {
             Preconditions.checkState(x.isSubmitted()); 
             return x.getUnchecked()+y; 
         } }).build();
     }
 
     public static Task<Integer> times(final int x, final int y) {
-        return TaskBuilder.<Integer>builder().name("times").body(new Callable<Integer>() { public Integer call() { return x*y; } }).build();
+        return TaskBuilder.<Integer>builder().displayName("times").body(new Callable<Integer>() { public Integer call() { return x*y; } }).build();
     }
 
     public static Task<Integer> times(final Task<Integer> x, final int y) {
-        return TaskBuilder.<Integer>builder().name("times").body(new Callable<Integer>() { public Integer call() { return DynamicTasks.get(x)*y; } }).build();
+        return TaskBuilder.<Integer>builder().displayName("times").body(new Callable<Integer>() { public Integer call() { return DynamicTasks.get(x)*y; } }).build();
     }
     
     public static final Effector<Integer> TWO_X_PLUS_ONE = Effectors.effector(Integer.class, "twoXPlusOne")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/test/java/org/apache/brooklyn/core/entity/trait/FailingEntityImpl.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/trait/FailingEntityImpl.java b/core/src/test/java/org/apache/brooklyn/core/entity/trait/FailingEntityImpl.java
index e6cf002..a675c78 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/trait/FailingEntityImpl.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/trait/FailingEntityImpl.java
@@ -68,7 +68,7 @@ public class FailingEntityImpl extends TestEntityImpl implements FailingEntity {
     
     private RuntimeException fail(final String msg) {
         if (getConfig(FAIL_IN_SUB_TASK)) {
-            Task<?> task = Tasks.builder().name(msg).body(new Runnable() { public void run() { throw newException(msg); } }).build();
+            Task<?> task = Tasks.builder().displayName(msg).body(new Runnable() { public void run() { throw newException(msg); } }).build();
             Entities.submit(this, task).getUnchecked();
             Assert.fail("Should have thrown exception on task.getUnchecked");
             throw new IllegalStateException("unreachable code");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/test/java/org/apache/brooklyn/core/entity/trait/StartableMethodsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/trait/StartableMethodsTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/trait/StartableMethodsTest.java
index 131dafe..8092fd1 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/trait/StartableMethodsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/trait/StartableMethodsTest.java
@@ -104,7 +104,7 @@ public class StartableMethodsTest extends BrooklynAppUnitTestSupport {
             listener.events.clear();
             
             try {
-                Task<?> task = Tasks.builder().name("stopSequentially")
+                Task<?> task = Tasks.builder().displayName("stopSequentially")
                         .body(new Runnable() {
                             @Override public void run() {
                                 StartableMethods.stopSequentially(ImmutableList.of(entity, entity2));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
index 2bc73cb..590b8fb 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
@@ -113,9 +113,9 @@ public class EntityExecutionManagerTest {
                 sema4.release();
             }
         });
-        Task<String> t1 = em.submit( Tasks.<String>builder().name("t1").dynamic(false).body(Callables.returning("foo")).build() );
+        Task<String> t1 = em.submit( Tasks.<String>builder().displayName("t1").dynamic(false).body(Callables.returning("foo")).build() );
         t1.getUnchecked();
-        Task<String> t2 = em.submit( Tasks.<String>builder().name("t2").dynamic(false).body(Callables.returning("foo")).build() );
+        Task<String> t2 = em.submit( Tasks.<String>builder().displayName("t2").dynamic(false).body(Callables.returning("foo")).build() );
         sema4.acquire();
         Assert.assertEquals(completedTasks.size(), 2, "completed tasks are: "+completedTasks);
         completedTasks.get(t1).isShorterThan(Duration.TEN_SECONDS);
@@ -135,7 +135,7 @@ public class EntityExecutionManagerTest {
     }
 
     protected static TaskBuilder<Object> newEmptyTask(String name) {
-        return Tasks.builder().name(name).dynamic(false).body(Callables.returning(null));
+        return Tasks.builder().displayName(name).dynamic(false).body(Callables.returning(null));
     }
     
     protected void assertTaskCountForEntitySoon(final Entity entity, final int expectedCount) {
@@ -247,7 +247,7 @@ public class EntityExecutionManagerTest {
             BrooklynGarbageCollector.MAX_TASKS_PER_TAG, 2);
 
         for (int count=0; count<5; count++) {
-            TaskBuilder<Object> tb = Tasks.builder().name("task-"+count).dynamic(true).body(new Runnable() { @Override public void run() {}})
+            TaskBuilder<Object> tb = Tasks.builder().displayName("task-"+count).dynamic(true).body(new Runnable() { @Override public void run() {}})
                 .tag(ManagementContextInternal.NON_TRANSIENT_TASK_TAG).tag("foo");
             ((EntityInternal)e).getExecutionContext().submit(tb.build()).getUnchecked();
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index 274aa9a..ee2f5a9 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -1008,7 +1008,7 @@ public class AutoScalerPolicy extends AbstractPolicy {
         if (LOG.isDebugEnabled()) LOG.debug("{} requesting resize to {}; current {}, min {}, max {}", 
                 new Object[] {this, desiredPoolSize, currentPoolSize, getMinPoolSize(), getMaxPoolSize()});
         
-        Entities.submit(entity, Tasks.<Void>builder().name("Auto-scaler")
+        Entities.submit(entity, Tasks.<Void>builder().displayName("Auto-scaler")
             .description("Auto-scaler recommending resize from "+currentPoolSize+" to "+desiredPoolSize)
             .tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)
             .body(new Callable<Void>() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltTasks.java
----------------------------------------------------------------------
diff --git a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltTasks.java b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltTasks.java
index d6bacfa..f969b44 100644
--- a/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltTasks.java
+++ b/sandbox/extra/src/main/java/org/apache/brooklyn/entity/salt/SaltTasks.java
@@ -59,7 +59,7 @@ public class SaltTasks {
     }
 
     public static TaskFactory<?> installSaltMinion(final Entity minion, final String runDir, final String installDir, final boolean force) {
-        return Tasks.<Void>builder().name("install minion").body(
+        return Tasks.<Void>builder().displayName("install minion").body(
                 new Runnable() {
                     public void run() {
                         // Setup bootstrap installation command for minion
@@ -97,7 +97,7 @@ public class SaltTasks {
     }
 
     public static TaskFactory<?> installFormulas(final String installDir, final Map<String,String> formulasAndUrls, final boolean force) {
-        return Tasks.<Void>builder().name("install formulas").body(
+        return Tasks.<Void>builder().displayName("install formulas").body(
                 new Runnable() {
                     public void run() {
                         Entity e = EffectorTasks.findEntity();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
index 538c170..11d3baf 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
@@ -98,7 +98,7 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
 
         DynamicTasks.queueIfPossible(
                 Tasks.<Void>builder()
-                    .name("Start entity mirror feed")
+                    .displayName("Start entity mirror feed")
                     .body(asyncTask)
                     .build())
             .orSubmitAsync(this);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
index df9651e..e21200d 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -198,7 +198,7 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
 
     private void queueWaitExitTask() {
         //give time to the process to die gracefully after closing the shutdown call
-        DynamicTasks.queue(Tasks.builder().name("wait for graceful stop").body(new Runnable() {
+        DynamicTasks.queue(Tasks.builder().displayName("wait for graceful stop").body(new Runnable() {
             @Override
             public void run() {
                 DynamicTasks.markInessential();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
index 319d5ba..19b5ce2 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynClusterUpgradeEffectorBody.java
@@ -157,7 +157,7 @@ public class BrooklynClusterUpgradeEffectorBody extends EffectorBody<Void> imple
     }
 
     private TaskAdaptable<Collection<Entity>> newCreateNodesTask(int size, String name) {
-        return Tasks.<Collection<Entity>>builder().name(name).body(new CreateNodesCallable(size)).build();
+        return Tasks.<Collection<Entity>>builder().displayName(name).body(new CreateNodesCallable(size)).build();
     }
 
     protected class CreateNodesCallable implements Callable<Collection<Entity>> {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
index c9f7dd7..12ca603 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java
@@ -117,12 +117,12 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> {
         }
         
         // Stop running instance
-        DynamicTasks.queue(Tasks.builder().name("shutdown node")
+        DynamicTasks.queue(Tasks.builder().displayName("shutdown node")
                 .add(Effectors.invocation(entity(), BrooklynNode.STOP_NODE_BUT_LEAVE_APPS, ImmutableMap.of(StopSoftwareParameters.STOP_MACHINE_MODE, StopMode.NEVER)))
                 .build());
 
         // backup old files
-        DynamicTasks.queue(Tasks.builder().name("backup old version").body(new Runnable() {
+        DynamicTasks.queue(Tasks.builder().displayName("backup old version").body(new Runnable() {
             @Override
             public void run() {
                 String runDir = entity().getAttribute(SoftwareProcess.RUN_DIR);
@@ -139,7 +139,7 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> {
         }).build());
         
         // Reconfigure entity
-        DynamicTasks.queue(Tasks.builder().name("reconfigure").body(new Runnable() {
+        DynamicTasks.queue(Tasks.builder().displayName("reconfigure").body(new Runnable() {
             @Override
             public void run() {
                 DynamicTasks.waitForLast();
@@ -191,11 +191,11 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> {
             Predicates.equalTo(ManagementNodeState.HOT_STANDBY), Duration.FIVE_MINUTES));
 
         // 3 stop new version
-        DynamicTasks.queue(Tasks.builder().name("shutdown transient node")
+        DynamicTasks.queue(Tasks.builder().displayName("shutdown transient node")
             .add(Effectors.invocation(dryRunChild, BrooklynNode.STOP_NODE_BUT_LEAVE_APPS, ImmutableMap.of(StopSoftwareParameters.STOP_MACHINE_MODE, StopMode.NEVER)))
             .build());
 
-        DynamicTasks.queue(Tasks.<Void>builder().name("remove transient node").body(
+        DynamicTasks.queue(Tasks.<Void>builder().displayName("remove transient node").body(
             new Runnable() {
                 @Override
                 public void run() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefTasks.java
index c1efa55..ac12f00 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/chef/ChefTasks.java
@@ -56,7 +56,7 @@ public class ChefTasks {
     }
 
     public static TaskFactory<?> installCookbooks(final String chefDirectory, final Map<String,String> cookbooksAndUrls, final boolean force) {
-        return Tasks.<Void>builder().name("install "+(cookbooksAndUrls==null ? "0" : cookbooksAndUrls.size())+" cookbook"+Strings.s(cookbooksAndUrls)).body(
+        return Tasks.<Void>builder().displayName("install "+(cookbooksAndUrls==null ? "0" : cookbooksAndUrls.size())+" cookbook"+Strings.s(cookbooksAndUrls)).body(
                 new Runnable() {
                     public void run() {
                         Entity e = EffectorTasks.findEntity();
@@ -72,7 +72,7 @@ public class ChefTasks {
         return new TaskFactory<TaskAdaptable<?>>() {
             @Override
             public TaskAdaptable<?> newTask() {
-                TaskBuilder<Void> tb = Tasks.<Void>builder().name("install cookbook "+cookbookName);
+                TaskBuilder<Void> tb = Tasks.<Void>builder().displayName("install cookbook "+cookbookName);
                 
                 String cookbookDir = Urls.mergePaths(chefDirectory, cookbookName);
                 String privateTmpDirContainingUnpackedCookbook = 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
index ee9d711..600ab77 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SameServerEntityImpl.java
@@ -57,7 +57,7 @@ public class SameServerEntityImpl extends AbstractEntity implements SameServerEn
         if (DynamicTasks.getTaskQueuingContext() != null) {
             doRestart(ConfigBag.EMPTY);
         } else {
-            Task<?> task = Tasks.builder().name("restart").body(new Runnable() { public void run() { doRestart(ConfigBag.EMPTY); } }).build();
+            Task<?> task = Tasks.builder().displayName("restart").body(new Runnable() { public void run() { doRestart(ConfigBag.EMPTY); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }
@@ -73,7 +73,7 @@ public class SameServerEntityImpl extends AbstractEntity implements SameServerEn
         if (DynamicTasks.getTaskQueuingContext() != null) {
             doStart(locations);
         } else {
-            Task<?> task = Tasks.builder().name("start").body(new Runnable() { public void run() { doStart(locations); } }).build();
+            Task<?> task = Tasks.builder().displayName("start").body(new Runnable() { public void run() { doStart(locations); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }
@@ -88,7 +88,7 @@ public class SameServerEntityImpl extends AbstractEntity implements SameServerEn
         if (DynamicTasks.getTaskQueuingContext() != null) {
             doStop();
         } else {
-            Task<?> task = Tasks.builder().name("stop").body(new Runnable() { public void run() { doStop(); } }).build();
+            Task<?> task = Tasks.builder().displayName("stop").body(new Runnable() { public void run() { doStop(); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 f4e02c4..a777dcd 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
@@ -603,7 +603,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         if (DynamicTasks.getTaskQueuingContext() != null) {
             getLifecycleEffectorTasks().start(locations);
         } else {
-            Task<?> task = Tasks.builder().name("start (sequential)").body(new Runnable() { public void run() { getLifecycleEffectorTasks().start(locations); } }).build();
+            Task<?> task = Tasks.builder().displayName("start (sequential)").body(new Runnable() { public void run() { getLifecycleEffectorTasks().start(locations); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }
@@ -625,7 +625,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         if (DynamicTasks.getTaskQueuingContext() != null) {
             getLifecycleEffectorTasks().stop(ConfigBag.EMPTY);
         } else {
-            Task<?> task = Tasks.builder().name("stop").body(new Runnable() { public void run() { getLifecycleEffectorTasks().stop(ConfigBag.EMPTY); } }).build();
+            Task<?> task = Tasks.builder().displayName("stop").body(new Runnable() { public void run() { getLifecycleEffectorTasks().stop(ConfigBag.EMPTY); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }
@@ -639,7 +639,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft
         if (DynamicTasks.getTaskQueuingContext() != null) {
             getLifecycleEffectorTasks().restart(ConfigBag.EMPTY);
         } else {
-            Task<?> task = Tasks.builder().name("restart").body(new Runnable() { public void run() { getLifecycleEffectorTasks().restart(ConfigBag.EMPTY); } }).build();
+            Task<?> task = Tasks.builder().displayName("restart").body(new Runnable() { public void run() { getLifecycleEffectorTasks().restart(ConfigBag.EMPTY); } }).build();
             Entities.submit(this, task).getUnchecked();
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 bd6f477..f57c6d3 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
@@ -355,7 +355,7 @@ public abstract class MachineLifecycleEffectorTasks {
      * and returns that machine. The task can be used as a supplier to subsequent methods.
      */
     protected Task<MachineLocation> provisionAsync(final MachineProvisioningLocation<?> location) {
-        return DynamicTasks.queue(Tasks.<MachineLocation>builder().name("provisioning (" + location.getDisplayName() + ")").body(
+        return DynamicTasks.queue(Tasks.<MachineLocation>builder().displayName("provisioning (" + location.getDisplayName() + ")").body(
                 new ProvisionMachineTask(location)).build());
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/ScriptHelper.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/ScriptHelper.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/ScriptHelper.java
index a397477..27d94cf 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/ScriptHelper.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/ScriptHelper.java
@@ -281,7 +281,7 @@ public class ScriptHelper {
     /** creates a task which will execute this script; note this can only be run once per instance of this class */
     public synchronized Task<Integer> newTask() {
         if (task!=null) throw new IllegalStateException("task can only be generated once");
-        TaskBuilder<Integer> tb = Tasks.<Integer>builder().name("ssh: "+summary).body(
+        TaskBuilder<Integer> tb = Tasks.<Integer>builder().displayName("ssh: "+summary).body(
                 new Callable<Integer>() {
                     public Integer call() throws Exception {
                         return executeInternal();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
index c0de92d..4922351 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
@@ -89,7 +89,7 @@ public class InitdServiceInstaller implements SystemServiceInstaller {
             .newTask();
 
         return Tasks.<Void>builder()
-            .name("install (init.d)")
+            .displayName("install (init.d)")
             .description("Install init.d service")
             .add(putServiceTask)
             .add(installServiceTask)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 4b8c5f5..6d6acf7 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
@@ -77,7 +77,7 @@ public class SystemServiceEnricher extends AbstractEnricher implements Enricher
         final String launchScriptPath = Urls.mergePaths(getRunDir(), getStartScriptName());
 
         Task<Void> installerTask = TaskBuilder.<Void>builder()
-                .name("install (service)")
+                .displayName("install (service)")
                 .description("Install as a system service")
                 .body(new Runnable() {
                     @Override
@@ -99,14 +99,14 @@ public class SystemServiceEnricher extends AbstractEnricher implements Enricher
                 .requiringExitCodeZero()
                 .newTask();
         Task<Void> udpateTask = TaskBuilder.<Void>builder()
-                .name("update-launch")
+                .displayName("update-launch")
                 .description("Update launch script used by the system service")
                 .add(updateLaunchScriptTask)
                 .add(makeExecutableTask)
                 .build();
 
         Task<Void> updateService = TaskBuilder.<Void>builder()
-                .name("update-system-service")
+                .displayName("update-system-service")
                 .description("Update system service")
                 .add(installerTask)
                 .add(udpateTask)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 9a444fd..ae75254 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
@@ -381,7 +381,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
                 ((EntityLocal)node).setAttribute(NODE_REPLICATION_INITIALIZED, Boolean.TRUE);
 
                 DynamicTasks.queueIfPossible(TaskBuilder.builder()
-                        .name("Configure master-slave replication on node")
+                        .displayName("Configure master-slave replication on node")
                         .body(new InitReplicationTask(cluster, node))
                         .build())
                     .orSubmitAsync(node);
@@ -400,7 +400,7 @@ public class MySqlClusterImpl extends DynamicClusterImpl implements MySqlCluster
             String slaveAddress = cluster.getAttribute(SLAVE_ID_ADDRESS_MAPPING).remove(node.getId());
             if (slaveAddress != null) {
                 DynamicTasks.queueIfPossible(TaskBuilder.builder()
-                        .name("Remove slave access")
+                        .displayName("Remove slave access")
                         .body(new RemoveSlaveConfigTask(cluster, slaveAddress))
                         .build())
                     .orSubmitAsync(cluster);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
index 3ae6fe9..eaa7b7a 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseClusterImpl.java
@@ -525,7 +525,7 @@ public class CouchbaseClusterImpl extends DynamicClusterImpl implements Couchbas
     }
 
     public void createBucket(final Entity primaryNode, final String bucketName, final String bucketType, final Integer bucketPort, final Integer bucketRamSize, final Integer bucketReplica) {
-        DynamicTasks.queueIfPossible(TaskBuilder.<Void>builder().name("Creating bucket " + bucketName).body(
+        DynamicTasks.queueIfPossible(TaskBuilder.<Void>builder().displayName("Creating bucket " + bucketName).body(
                 new Callable<Void>() {
                     @Override
                     public Void call() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
index cc21867..3774ddb 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseNodeSshDriver.java
@@ -361,7 +361,7 @@ public class CouchbaseNodeSshDriver extends AbstractSoftwareProcessSshDriver imp
         entity.setAttribute(CouchbaseNode.REBALANCE_STATUS, "waiting for completion");
         // Wait until the Couchbase node finishes the re-balancing
         Task<Boolean> reBalance = TaskBuilder.<Boolean>builder()
-                .name("Waiting until node is rebalancing")
+                .displayName("Waiting until node is rebalancing")
                 .body(new Callable<Boolean>() {
                     @Override
                     public Boolean call() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 ec3e714..a4c04b6 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
@@ -361,7 +361,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             if (updateNeeded) return;
             updateNeeded = true;
             LOG.debug("queueing an update-needed task for "+this+"; update will occur shortly");
-            Entities.submit(this, Tasks.builder().name("update-needed").body(new Runnable() {
+            Entities.submit(this, Tasks.builder().displayName("update-needed").body(new Runnable() {
                 @Override
                 public void run() {
                     if (updateNeeded)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/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 4bc1fd3..81f72f9 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
@@ -128,7 +128,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
      * If the target goes away, this task marks itself inessential
      * before failing so as not to cause a parent task to fail. */
     static <T> Task<T> whenServiceUp(final Entity target, final TaskAdaptable<T> task, String name) {
-        return Tasks.<T>builder().name(name).dynamic(true).body(new Callable<T>() {
+        return Tasks.<T>builder().displayName(name).dynamic(true).body(new Callable<T>() {
             @Override
             public T call() {
                 try {
@@ -176,7 +176,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         log.debug("Deploying "+targetName+"->"+url+" across cluster "+this+"; WARs now "+getConfig(WARS_BY_CONTEXT));
 
         Iterable<CanDeployAndUndeploy> targets = Iterables.filter(getChildren(), CanDeployAndUndeploy.class);
-        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).name("Deploy "+targetName+" to cluster (size "+Iterables.size(targets)+")");
+        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).displayName("Deploy "+targetName+" to cluster (size "+Iterables.size(targets)+")");
         for (Entity target: targets) {
             tb.add(whenServiceUp(target, Effectors.invocation(target, DEPLOY, MutableMap.of("url", url, "targetName", targetName)),
                 "Deploy "+targetName+" to "+target+" when ready"));
@@ -203,7 +203,7 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         log.debug("Undeploying "+targetName+" across cluster "+this+"; WARs now "+getConfig(WARS_BY_CONTEXT));
 
         Iterable<CanDeployAndUndeploy> targets = Iterables.filter(getChildren(), CanDeployAndUndeploy.class);
-        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).name("Undeploy "+targetName+" across cluster (size "+Iterables.size(targets)+")");
+        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).displayName("Undeploy "+targetName+" across cluster (size "+Iterables.size(targets)+")");
         for (Entity target: targets) {
             tb.add(whenServiceUp(target, Effectors.invocation(target, UNDEPLOY, MutableMap.of("targetName", targetName)),
                 "Undeploy "+targetName+" at "+target+" when ready"));
@@ -248,9 +248,9 @@ public class DynamicWebAppClusterImpl extends DynamicClusterImpl implements Dyna
         log.debug("Redeplying all WARs across cluster "+this+": "+getConfig(WARS_BY_CONTEXT));
         
         Iterable<CanDeployAndUndeploy> targetEntities = Iterables.filter(getChildren(), CanDeployAndUndeploy.class);
-        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).name(redeployPrefix+" across cluster (size "+Iterables.size(targetEntities)+")");
+        TaskBuilder<Void> tb = Tasks.<Void>builder().parallel(true).displayName(redeployPrefix+" across cluster (size "+Iterables.size(targetEntities)+")");
         for (Entity targetEntity: targetEntities) {
-            TaskBuilder<Void> redeployAllToTarget = Tasks.<Void>builder().name(redeployPrefix+" at "+targetEntity+" (after ready check)");
+            TaskBuilder<Void> redeployAllToTarget = Tasks.<Void>builder().displayName(redeployPrefix+" at "+targetEntity+" (after ready check)");
             for (String warContextPath: wars.keySet()) {
                 redeployAllToTarget.add(Effectors.invocation(targetEntity, DEPLOY, MutableMap.of("url", wars.get(warContextPath), "targetName", warContextPath)));
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f4533edb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
index eebc628..149a88a 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
@@ -73,7 +73,7 @@ public class DslComponent extends BrooklynDslDeferredSupplier<Entity> {
     
     @Override
     public Task<Entity> newTask() {
-        return TaskBuilder.<Entity>builder().name(toString()).tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
+        return TaskBuilder.<Entity>builder().displayName(toString()).tag(BrooklynTaskTags.TRANSIENT_TASK_TAG)
             .body(new EntityInScopeFinder(scopeComponent, scope, componentId)).build();
     }
     
@@ -218,7 +218,7 @@ public class DslComponent extends BrooklynDslDeferredSupplier<Entity> {
 
         @Override
         public Task<Object> newTask() {
-            return Tasks.builder().name("retrieving config for "+keyName).tag(BrooklynTaskTags.TRANSIENT_TASK_TAG).dynamic(false).body(new Callable<Object>() {
+            return Tasks.builder().displayName("retrieving config for "+keyName).tag(BrooklynTaskTags.TRANSIENT_TASK_TAG).dynamic(false).body(new Callable<Object>() {
                 @Override
                 public Object call() throws Exception {
                     Entity targetEntity = component.get();
@@ -249,7 +249,7 @@ public class DslComponent extends BrooklynDslDeferredSupplier<Entity> {
 
         @Override
         public Task<Sensor<?>> newTask() {
-            return Tasks.<Sensor<?>>builder().name("looking up sensor for "+sensorName).dynamic(false).body(new Callable<Sensor<?>>() {
+            return Tasks.<Sensor<?>>builder().displayName("looking up sensor for "+sensorName).dynamic(false).body(new Callable<Sensor<?>>() {
                 @Override
                 public Sensor<?> call() throws Exception {
                     Entity targetEntity = component.get();


[14/16] incubator-brooklyn git commit: This closes #857

Posted by he...@apache.org.
This closes #857


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

Branch: refs/heads/master
Commit: 51466823e393a96d6a15805977a5a9f7faf9de0f
Parents: 50a19d3 7d072fd
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Aug 20 13:38:50 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Aug 20 13:38:50 2015 +0100

----------------------------------------------------------------------
 .../core/entity/lifecycle/QuorumCheck.java      | 108 -----
 .../core/location/BasicLocationRegistry.java    |   2 +-
 .../core/location/RegistryLocationResolver.java |  42 --
 .../core/mgmt/internal/LocalUsageManager.java   |  55 +--
 .../internal/NonDeploymentUsageManager.java     |  17 +-
 .../brooklyn/core/mgmt/usage/UsageManager.java  |  77 +---
 .../entity/group/DynamicClusterImpl.java        |   8 +-
 .../core/test/entity/TestClusterImpl.java       |   4 +-
 .../location/jclouds/BrooklynMachinePool.java   | 218 ----------
 .../location/jclouds/pool/MachinePool.java      | 395 -------------------
 .../jclouds/BrooklynMachinePoolLiveTest.java    | 102 -----
 .../pool/JcloudsMachinePoolLiveTest.java        | 120 ------
 .../brooklyn/policy/ha/ServiceReplacerTest.java |   2 +-
 .../usage/ApplicationUsageTrackingTest.java     |  44 ---
 .../mgmt/usage/LocationUsageTrackingTest.java   |  42 +-
 .../usage/RecordingLegacyUsageListener.java     |  70 ----
 .../core/mgmt/usage/RecordingUsageListener.java |   3 +-
 .../test/core/mgmt/usage/UsageListenerTest.java |  39 +-
 18 files changed, 39 insertions(+), 1309 deletions(-)
----------------------------------------------------------------------



[03/16] incubator-brooklyn git commit: Move HttpRequestSensor to o.a.b.core.sensor.http

Posted by he...@apache.org.
Move HttpRequestSensor to o.a.b.core.sensor.http

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

Branch: refs/heads/master
Commit: 1dde632fe624e1efec91573715c9470e12fd18e9
Parents: 080d2de
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 11:27:20 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 11:27:20 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/core/sensor/HttpRequestSensor.java | 96 -------------------
 .../core/sensor/http/HttpRequestSensor.java     | 97 ++++++++++++++++++++
 .../core/sensor/ssh/SshCommandSensor.java       |  2 +-
 .../core/sensor/HttpRequestSensorTest.java      | 85 -----------------
 .../core/sensor/http/HttpRequestSensorTest.java | 85 +++++++++++++++++
 .../entity/java/JmxAttributeSensor.java         |  2 +-
 6 files changed, 184 insertions(+), 183 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/core/src/main/java/org/apache/brooklyn/core/sensor/HttpRequestSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/HttpRequestSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/HttpRequestSensor.java
deleted file mode 100644
index 542fc01..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/HttpRequestSensor.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.sensor;
-
-import java.net.URI;
-
-import net.minidev.json.JSONObject;
-
-import org.apache.brooklyn.api.entity.EntityLocal;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.effector.AddSensor;
-import org.apache.brooklyn.feed.http.HttpFeed;
-import org.apache.brooklyn.feed.http.HttpPollConfig;
-import org.apache.brooklyn.feed.http.HttpValueFunctions;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Functions;
-import com.google.common.base.Supplier;
-
-/**
- * Configurable {@link org.apache.brooklyn.api.entity.EntityInitializer} which adds an HTTP sensor feed to retrieve the
- * {@link JSONObject} from a JSON response in order to populate the sensor with the data at the {@code jsonPath}.
- *
- * @see SshCommandSensor
- * @see JmxAttributeSensor
- */
-@Beta
-public final class HttpRequestSensor<T> extends AddSensor<T> {
-
-    private static final Logger LOG = LoggerFactory.getLogger(HttpRequestSensor.class);
-
-    public static final ConfigKey<String> SENSOR_URI = ConfigKeys.newStringConfigKey("uri", "HTTP URI to poll for JSON");
-    public static final ConfigKey<String> JSON_PATH = ConfigKeys.newStringConfigKey("jsonPath", "JSON path to select in HTTP response; default $", "$");
-    public static final ConfigKey<String> USERNAME = ConfigKeys.newStringConfigKey("username", "Username for HTTP request, if required");
-    public static final ConfigKey<String> PASSWORD = ConfigKeys.newStringConfigKey("password", "Password for HTTP request, if required");
-
-    protected final Supplier<URI> uri;
-    protected final String jsonPath;
-    protected final String username;
-    protected final String password;
-
-    public HttpRequestSensor(final ConfigBag params) {
-        super(params);
-
-        uri = new Supplier<URI>() {
-            @Override
-            public URI get() {
-                return URI.create(params.get(SENSOR_URI));
-            }
-        };
-        jsonPath = params.get(JSON_PATH);
-        username = params.get(USERNAME);
-        password = params.get(PASSWORD);
-    }
-
-    @Override
-    public void apply(final EntityLocal entity) {
-        super.apply(entity);
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Adding HTTP JSON sensor {} to {}", name, entity);
-        }
-
-        HttpPollConfig<T> pollConfig = new HttpPollConfig<T>(sensor)
-                .checkSuccess(HttpValueFunctions.responseCodeEquals(200))
-                .onFailureOrException(Functions.constant((T) null))
-                .onSuccess(HttpValueFunctions.<T>jsonContentsFromPath(jsonPath))
-                .period(period);
-
-        HttpFeed.builder().entity(entity)
-                .baseUri(uri)
-                .credentialsIfNotNull(username, password)
-                .poll(pollConfig)
-                .build();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/core/src/main/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensor.java
new file mode 100644
index 0000000..8541fd1
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensor.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.sensor.http;
+
+import java.net.URI;
+
+import net.minidev.json.JSONObject;
+
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.effector.AddSensor;
+import org.apache.brooklyn.core.sensor.ssh.SshCommandSensor;
+import org.apache.brooklyn.feed.http.HttpFeed;
+import org.apache.brooklyn.feed.http.HttpPollConfig;
+import org.apache.brooklyn.feed.http.HttpValueFunctions;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Functions;
+import com.google.common.base.Supplier;
+
+/**
+ * Configurable {@link org.apache.brooklyn.api.entity.EntityInitializer} which adds an HTTP sensor feed to retrieve the
+ * {@link JSONObject} from a JSON response in order to populate the sensor with the data at the {@code jsonPath}.
+ *
+ * @see SshCommandSensor
+ * @see JmxAttributeSensor
+ */
+@Beta
+public final class HttpRequestSensor<T> extends AddSensor<T> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(HttpRequestSensor.class);
+
+    public static final ConfigKey<String> SENSOR_URI = ConfigKeys.newStringConfigKey("uri", "HTTP URI to poll for JSON");
+    public static final ConfigKey<String> JSON_PATH = ConfigKeys.newStringConfigKey("jsonPath", "JSON path to select in HTTP response; default $", "$");
+    public static final ConfigKey<String> USERNAME = ConfigKeys.newStringConfigKey("username", "Username for HTTP request, if required");
+    public static final ConfigKey<String> PASSWORD = ConfigKeys.newStringConfigKey("password", "Password for HTTP request, if required");
+
+    protected final Supplier<URI> uri;
+    protected final String jsonPath;
+    protected final String username;
+    protected final String password;
+
+    public HttpRequestSensor(final ConfigBag params) {
+        super(params);
+
+        uri = new Supplier<URI>() {
+            @Override
+            public URI get() {
+                return URI.create(params.get(SENSOR_URI));
+            }
+        };
+        jsonPath = params.get(JSON_PATH);
+        username = params.get(USERNAME);
+        password = params.get(PASSWORD);
+    }
+
+    @Override
+    public void apply(final EntityLocal entity) {
+        super.apply(entity);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Adding HTTP JSON sensor {} to {}", name, entity);
+        }
+
+        HttpPollConfig<T> pollConfig = new HttpPollConfig<T>(sensor)
+                .checkSuccess(HttpValueFunctions.responseCodeEquals(200))
+                .onFailureOrException(Functions.constant((T) null))
+                .onSuccess(HttpValueFunctions.<T>jsonContentsFromPath(jsonPath))
+                .period(period);
+
+        HttpFeed.builder().entity(entity)
+                .baseUri(uri)
+                .credentialsIfNotNull(username, password)
+                .poll(pollConfig)
+                .build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
index c418f93..0218a99 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
@@ -26,7 +26,7 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.AddSensor;
 import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
-import org.apache.brooklyn.core.sensor.HttpRequestSensor;
+import org.apache.brooklyn.core.sensor.http.HttpRequestSensor;
 import org.apache.brooklyn.feed.ssh.SshFeed;
 import org.apache.brooklyn.feed.ssh.SshPollConfig;
 import org.apache.brooklyn.feed.ssh.SshValueFunctions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/core/src/test/java/org/apache/brooklyn/core/sensor/HttpRequestSensorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/HttpRequestSensorTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/HttpRequestSensorTest.java
deleted file mode 100644
index 4715594..0000000
--- a/core/src/test/java/org/apache/brooklyn/core/sensor/HttpRequestSensorTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.sensor;
-
-import org.apache.brooklyn.api.entity.EntityLocal;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.sensor.AttributeSensor;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.sensor.HttpRequestSensor;
-import org.apache.brooklyn.core.sensor.Sensors;
-import org.apache.brooklyn.core.test.TestHttpRequestHandler;
-import org.apache.brooklyn.core.test.TestHttpServer;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.core.test.entity.TestEntity;
-import org.apache.brooklyn.test.EntityTestUtils;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.time.Duration;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-
-public class HttpRequestSensorTest {
-    final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString");
-    final static String TARGET_TYPE = "java.lang.String";
-
-    private TestApplication app;
-    private EntityLocal entity;
-
-    private TestHttpServer server;
-    private String serverUrl;
-
-    @BeforeClass(alwaysRun=true)
-    public void setUp() throws Exception {
-        server = new TestHttpServer()
-            .handler("/myKey/myValue", new TestHttpRequestHandler().header("Content-Type", "application/json").response("{\"myKey\":\"myValue\"}"))
-            .start();
-        serverUrl = server.getUrl();
-
-        app = TestApplication.Factory.newManagedInstanceForTests();
-        entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
-                .location(app.newLocalhostProvisioningLocation().obtain()));
-        app.start(ImmutableList.<Location>of());
-    }
-
-    @AfterMethod(alwaysRun=true)
-    public void tearDown() throws Exception {
-        if (app != null) Entities.destroyAll(app.getManagementContext());
-        server.stop();
-    }
-
-    @Test
-    public void testHttpSensor() throws Exception {
-        HttpRequestSensor<Integer> sensor = new HttpRequestSensor<Integer>(ConfigBag.newInstance()
-                .configure(HttpRequestSensor.SENSOR_PERIOD, Duration.millis(100))
-                .configure(HttpRequestSensor.SENSOR_NAME, SENSOR_STRING.getName())
-                .configure(HttpRequestSensor.SENSOR_TYPE, TARGET_TYPE)
-                .configure(HttpRequestSensor.JSON_PATH, "$.myKey")
-                .configure(HttpRequestSensor.SENSOR_URI, serverUrl + "/myKey/myValue"));
-        sensor.apply(entity);
-        entity.setAttribute(Attributes.SERVICE_UP, true);
-
-        EntityTestUtils.assertAttributeEqualsEventually(entity, SENSOR_STRING, "myValue");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
new file mode 100644
index 0000000..2fda742
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/sensor/http/HttpRequestSensorTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.sensor.http;
+
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.core.sensor.http.HttpRequestSensor;
+import org.apache.brooklyn.core.test.TestHttpRequestHandler;
+import org.apache.brooklyn.core.test.TestHttpServer;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.time.Duration;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class HttpRequestSensorTest {
+    final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString");
+    final static String TARGET_TYPE = "java.lang.String";
+
+    private TestApplication app;
+    private EntityLocal entity;
+
+    private TestHttpServer server;
+    private String serverUrl;
+
+    @BeforeClass(alwaysRun=true)
+    public void setUp() throws Exception {
+        server = new TestHttpServer()
+            .handler("/myKey/myValue", new TestHttpRequestHandler().header("Content-Type", "application/json").response("{\"myKey\":\"myValue\"}"))
+            .start();
+        serverUrl = server.getUrl();
+
+        app = TestApplication.Factory.newManagedInstanceForTests();
+        entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
+                .location(app.newLocalhostProvisioningLocation().obtain()));
+        app.start(ImmutableList.<Location>of());
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        if (app != null) Entities.destroyAll(app.getManagementContext());
+        server.stop();
+    }
+
+    @Test
+    public void testHttpSensor() throws Exception {
+        HttpRequestSensor<Integer> sensor = new HttpRequestSensor<Integer>(ConfigBag.newInstance()
+                .configure(HttpRequestSensor.SENSOR_PERIOD, Duration.millis(100))
+                .configure(HttpRequestSensor.SENSOR_NAME, SENSOR_STRING.getName())
+                .configure(HttpRequestSensor.SENSOR_TYPE, TARGET_TYPE)
+                .configure(HttpRequestSensor.JSON_PATH, "$.myKey")
+                .configure(HttpRequestSensor.SENSOR_URI, serverUrl + "/myKey/myValue"));
+        sensor.apply(entity);
+        entity.setAttribute(Attributes.SERVICE_UP, true);
+
+        EntityTestUtils.assertAttributeEqualsEventually(entity, SENSOR_STRING, "myValue");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1dde632f/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
index 595547e..a629779 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
@@ -29,7 +29,7 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.AddSensor;
 import org.apache.brooklyn.core.sensor.DependentConfiguration;
-import org.apache.brooklyn.core.sensor.HttpRequestSensor;
+import org.apache.brooklyn.core.sensor.http.HttpRequestSensor;
 import org.apache.brooklyn.core.sensor.ssh.SshCommandSensor;
 import org.apache.brooklyn.feed.jmx.JmxAttributePollConfig;
 import org.apache.brooklyn.feed.jmx.JmxFeed;


[02/16] incubator-brooklyn git commit: Move o.a.b.sensor.ssh contents to core

Posted by he...@apache.org.
Move o.a.b.sensor.ssh contents to core

- Moved SshCommandEffector (which strangely was in .sensor.ssh) to 
  o.a.b.core.effector.ssh
- Moved SshCommandSensor (which strangely was in .sensor.ssh) to 
  o.a.b.core.sensor.ssh
- Changed these classes to reference config in BrooklynConfigKeys, 
  rather than in SoftwareProcess.*
- Added BrooklynConfigKeys.SHELL_ENVIRONMENT, which SoftwareProcess
  now uses.
- Made SshCommandSensor.makeCommandExecutingInDirectory public and
  marked as @Beta (was previously static package-private, for use
  by SshCommandEffector as well).
- Split SshCommandIntegrationTest into two:
  - SshCommandEffectorIntegrationTest (and removed unnecessary tempFile
    creation)
  - SshCommandSensorIntegrationTest (and moved tempFile creation/deletion
    into setUp/tearDown)

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

Branch: refs/heads/master
Commit: 080d2de0806f5524886b4d6d8bfea7c71a45dbc7
Parents: 8e439bd
Author: Aled Sage <al...@gmail.com>
Authored: Thu Aug 20 11:24:20 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 11:24:20 2015 +0100

----------------------------------------------------------------------
 .../core/effector/ssh/SshCommandEffector.java   | 102 +++++++++++++
 .../core/entity/BrooklynConfigKeys.java         |   9 ++
 .../core/sensor/ssh/SshCommandSensor.java       | 141 ++++++++++++++++++
 .../ssh/SshCommandEffectorIntegrationTest.java  |  94 ++++++++++++
 .../ssh/SshCommandSensorIntegrationTest.java    |  89 ++++++++++++
 .../entity/java/JmxAttributeSensor.java         |   2 +-
 .../entity/software/base/SoftwareProcess.java   |   7 +-
 .../brooklyn/sensor/ssh/SshCommandEffector.java | 103 --------------
 .../brooklyn/sensor/ssh/SshCommandSensor.java   | 142 -------------------
 .../test/ssh/SshCommandIntegrationTest.java     | 126 ----------------
 10 files changed, 439 insertions(+), 376 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffector.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffector.java
new file mode 100644
index 0000000..b22f717
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffector.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.effector.ssh;
+
+import java.util.Map;
+
+import org.apache.brooklyn.api.effector.Effector;
+import org.apache.brooklyn.api.effector.ParameterType;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.effector.AddEffector;
+import org.apache.brooklyn.core.effector.EffectorBody;
+import org.apache.brooklyn.core.effector.Effectors;
+import org.apache.brooklyn.core.effector.Effectors.EffectorBuilder;
+import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.core.sensor.ssh.SshCommandSensor;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.text.Strings;
+
+import com.google.common.base.Preconditions;
+
+public final class SshCommandEffector extends AddEffector {
+    
+    public static final ConfigKey<String> EFFECTOR_COMMAND = ConfigKeys.newStringConfigKey("command");
+    public static final ConfigKey<String> EFFECTOR_EXECUTION_DIR = SshCommandSensor.SENSOR_EXECUTION_DIR;
+    
+    public SshCommandEffector(ConfigBag params) {
+        super(newEffectorBuilder(params).build());
+    }
+    
+    public SshCommandEffector(Map<String,String> params) {
+        this(ConfigBag.newInstance(params));
+    }
+
+    public static EffectorBuilder<String> newEffectorBuilder(ConfigBag params) {
+        EffectorBuilder<String> eff = AddEffector.newEffectorBuilder(String.class, params);
+        eff.impl(new Body(eff.buildAbstract(), params));
+        return eff;
+    }
+
+
+    protected static class Body extends EffectorBody<String> {
+        private final Effector<?> effector;
+        private final String command;
+        private final String executionDir;
+
+        public Body(Effector<?> eff, ConfigBag params) {
+            this.effector = eff;
+            this.command = Preconditions.checkNotNull(params.get(EFFECTOR_COMMAND), "command must be supplied when defining this effector");
+            this.executionDir = params.get(EFFECTOR_EXECUTION_DIR);
+            // TODO could take a custom "env" aka effectorShellEnv
+        }
+
+        @Override
+        public String call(ConfigBag params) {
+            String command = this.command;
+            
+            command = SshCommandSensor.makeCommandExecutingInDirectory(command, executionDir, entity());
+            
+            MutableMap<String, String> env = MutableMap.of();
+            // first set all declared parameters, including default values
+            for (ParameterType<?> param: effector.getParameters()) {
+                env.addIfNotNull(param.getName(), Strings.toString( params.get(Effectors.asConfigKey(param)) ));
+            }
+            
+            // then set things from the entities defined shell environment, if applicable
+            env.putAll(Strings.toStringMap(entity().getConfig(BrooklynConfigKeys.SHELL_ENVIRONMENT), ""));
+            
+            // if we wanted to resolve the surrounding environment in real time -- see above
+//            Map<String,Object> paramsResolved = (Map<String, Object>) Tasks.resolveDeepValue(effectorShellEnv, Map.class, entity().getExecutionContext());
+            
+            // finally set the parameters we've been passed; this will repeat declared parameters but to no harm,
+            // it may pick up additional values (could be a flag defining whether this is permitted or not)
+            env.putAll(Strings.toStringMap(params.getAllConfig()));
+            
+            SshEffectorTasks.SshEffectorTaskFactory<String> t = SshEffectorTasks.ssh(command)
+                .requiringZeroAndReturningStdout()
+                .summary("effector "+effector.getName())
+                .environmentVariables(env);
+            return queue(t).get();
+        }
+        
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java b/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java
index cedccb8..c1ad143 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java
@@ -26,15 +26,18 @@ import static org.apache.brooklyn.core.config.ConfigKeys.newStringConfigKey;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.config.MapConfigKey;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.TemplatedStringAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.server.BrooklynServerConfig;
+import org.apache.brooklyn.util.core.flags.SetFromFlag;
 import org.apache.brooklyn.util.core.internal.ssh.ShellTool;
 import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.time.Duration;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 
 /** Commonly used config keys, for use in entities. Similar to {@link Attributes}.
  * See also {@link BrooklynServerConfig} for config keys for controlling the server. */
@@ -103,6 +106,12 @@ public class BrooklynConfigKeys {
     public static final ConfigKey<String> POST_LAUNCH_COMMAND = ConfigKeys.newStringConfigKey("post.launch.command",
             "Command to be run after the launch method being called on the driver");
 
+    public static final MapConfigKey<Object> SHELL_ENVIRONMENT = new MapConfigKey<Object>(
+            Object.class,
+            "shell.env", 
+            "Map of environment variables to pass to the runtime shell", 
+            ImmutableMap.<String,Object>of());
+
     public static final AttributeSensorAndConfigKey<String, String> INSTALL_DIR = new TemplatedStringAttributeSensorAndConfigKey("install.dir", "Directory for this software to be installed in",
             "${" +
             "config['"+ONBOX_BASE_DIR.getName()+"']!" +

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
new file mode 100644
index 0000000..c418f93
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensor.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.sensor.ssh;
+
+import java.util.Map;
+
+import org.apache.brooklyn.api.entity.EntityInitializer;
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.effector.AddSensor;
+import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.core.sensor.HttpRequestSensor;
+import org.apache.brooklyn.feed.ssh.SshFeed;
+import org.apache.brooklyn.feed.ssh.SshPollConfig;
+import org.apache.brooklyn.feed.ssh.SshValueFunctions;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.core.flags.TypeCoercions;
+import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Supplier;
+
+/** 
+ * Configurable {@link EntityInitializer} which adds an SSH sensor feed running the <code>command</code> supplied
+ * in order to populate the sensor with the indicated <code>name</code>. Note that the <code>targetType</code> is ignored,
+ * and always set to {@link String}.
+ *
+ * @see HttpRequestSensor
+ */
+@Beta
+public final class SshCommandSensor<T> extends AddSensor<T> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SshCommandSensor.class);
+
+    public static final ConfigKey<String> SENSOR_COMMAND = ConfigKeys.newStringConfigKey("command", "SSH command to execute for sensor");
+    public static final ConfigKey<String> SENSOR_EXECUTION_DIR = ConfigKeys.newStringConfigKey("executionDir", "Directory where the command should run; "
+        + "if not supplied, executes in the entity's run dir (or home dir if no run dir is defined); "
+        + "use '~' to always execute in the home dir, or 'custom-feed/' to execute in a custom-feed dir relative to the run dir");
+
+    protected final String command;
+    protected final String executionDir;
+
+    public SshCommandSensor(final ConfigBag params) {
+        super(params);
+
+        // TODO create a supplier for the command string to support attribute embedding
+        command = Preconditions.checkNotNull(params.get(SENSOR_COMMAND), "command");
+        
+        executionDir = params.get(SENSOR_EXECUTION_DIR);
+    }
+
+    @Override
+    public void apply(final EntityLocal entity) {
+        super.apply(entity);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Adding SSH sensor {} to {}", name, entity);
+        }
+
+        Supplier<Map<String,String>> envSupplier = new Supplier<Map<String,String>>() {
+            @Override
+            public Map<String, String> get() {
+                return MutableMap.copyOf(Strings.toStringMap(entity.getConfig(BrooklynConfigKeys.SHELL_ENVIRONMENT), ""));
+            }
+        };
+
+        Supplier<String> commandSupplier = new Supplier<String>() {
+            @Override
+            public String get() {
+                return makeCommandExecutingInDirectory(command, executionDir, entity);
+            }
+        };
+
+        SshPollConfig<T> pollConfig = new SshPollConfig<T>(sensor)
+                .period(period)
+                .env(envSupplier)
+                .command(commandSupplier)
+                .checkSuccess(SshValueFunctions.exitStatusEquals(0))
+                .onFailureOrException(Functions.constant((T) null))
+                .onSuccess(Functions.compose(new Function<String, T>() {
+                        @Override
+                        public T apply(String input) {
+                            return TypeCoercions.coerce(input, getType(type));
+                        }}, SshValueFunctions.stdout()));
+
+        SshFeed.builder()
+                .entity(entity)
+                .onlyIfServiceUp()
+                .poll(pollConfig)
+                .build();
+    }
+
+    @Beta
+    public static String makeCommandExecutingInDirectory(String command, String executionDir, EntityLocal entity) {
+        String finalCommand = command;
+        String execDir = executionDir;
+        if (Strings.isBlank(execDir)) {
+            // default to run dir
+            execDir = entity.getAttribute(BrooklynConfigKeys.RUN_DIR);
+            // if no run dir, default to home
+            if (Strings.isBlank(execDir)) {
+                execDir = "~";
+            }
+        } else if (!Os.isAbsolutish(execDir)) {
+            // relative paths taken wrt run dir
+            String runDir = entity.getAttribute(BrooklynConfigKeys.RUN_DIR);
+            if (!Strings.isBlank(runDir)) {
+                execDir = Os.mergePaths(runDir, execDir);
+            }
+        }
+        if (!"~".equals(execDir)) {
+            finalCommand = "mkdir -p '"+execDir+"' && cd '"+execDir+"' && "+finalCommand;
+        }
+        return finalCommand;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffectorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffectorIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffectorIntegrationTest.java
new file mode 100644
index 0000000..7b5dd9a
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshCommandEffectorIntegrationTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.effector.ssh;
+
+import org.apache.brooklyn.api.effector.Effector;
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.effector.Effectors;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class SshCommandEffectorIntegrationTest {
+
+    final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString", "");
+    final static AttributeSensor<Integer> SENSOR_INT = Sensors.newIntegerSensor("aLong", "");
+    final static Effector<String> EFFECTOR_SAY_HI = Effectors.effector(String.class, "sayHi").buildAbstract();
+
+    private TestApplication app;
+    private SshMachineLocation machine;
+    private EntityLocal entity;
+    
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        app = TestApplication.Factory.newManagedInstanceForTests();
+        machine = app.newLocalhostProvisioningLocation().obtain();
+        entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).location(machine));
+        app.start(ImmutableList.<Location>of());
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        if (app != null) Entities.destroyAll(app.getManagementContext());
+    }
+    
+    @Test(groups="Integration")
+    public void testSshEffector() throws Exception {
+        new SshCommandEffector(ConfigBag.newInstance()
+                .configure(SshCommandEffector.EFFECTOR_NAME, "sayHi")
+                .configure(SshCommandEffector.EFFECTOR_COMMAND, "echo hi"))
+            .apply(entity);
+        
+        String val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of()).get();
+        Assert.assertEquals(val.trim(), "hi", "val="+val);
+    }
+
+    @Test(groups="Integration")
+    public void testSshEffectorWithParameters() throws Exception {
+        new SshCommandEffector(ConfigBag.newInstance()
+                .configure(SshCommandEffector.EFFECTOR_NAME, "sayHi")
+                .configure(SshCommandEffector.EFFECTOR_COMMAND, "echo $foo")
+                .configure(SshCommandEffector.EFFECTOR_PARAMETER_DEFS, 
+                    MutableMap.<String,Object>of("foo", MutableMap.of("defaultValue", "hi"))))
+            .apply(entity);
+        
+        String val;
+        // explicit value
+        val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of("foo", "bar")).get();
+        Assert.assertEquals(val.trim(), "bar", "val="+val);
+        
+        // default value
+        val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of()).get();
+        Assert.assertEquals(val.trim(), "hi", "val="+val);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
new file mode 100644
index 0000000..bdb4a81
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/sensor/ssh/SshCommandSensorIntegrationTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.sensor.ssh;
+
+import static org.testng.Assert.assertTrue;
+
+import java.io.File;
+
+import org.apache.brooklyn.api.effector.Effector;
+import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.effector.Effectors;
+import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.time.Duration;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class SshCommandSensorIntegrationTest {
+
+    final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString", "");
+    final static AttributeSensor<Integer> SENSOR_INT = Sensors.newIntegerSensor("aLong", "");
+    final static Effector<String> EFFECTOR_SAY_HI = Effectors.effector(String.class, "sayHi").buildAbstract();
+
+    private TestApplication app;
+    private SshMachineLocation machine;
+    private EntityLocal entity;
+    private File tempFile;
+    
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        app = TestApplication.Factory.newManagedInstanceForTests();
+        machine = app.newLocalhostProvisioningLocation().obtain();
+        entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).location(machine));
+        app.start(ImmutableList.<Location>of());
+        tempFile = File.createTempFile("testSshCommand", ".txt");
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        if (app != null) Entities.destroyAll(app.getManagementContext());
+        if (tempFile != null) tempFile.delete();
+    }
+    
+    @Test(groups="Integration")
+    public void testSshSensor() throws Exception {
+        new SshCommandSensor<String>(ConfigBag.newInstance()
+                .configure(SshCommandSensor.SENSOR_PERIOD, Duration.millis(100))
+                .configure(SshCommandSensor.SENSOR_NAME, SENSOR_STRING.getName())
+                .configure(SshCommandSensor.SENSOR_COMMAND, "echo foo > "+tempFile.getAbsolutePath()+"\n"
+                    + "wc "+tempFile.getAbsolutePath()))
+            .apply(entity);
+        entity.setAttribute(Attributes.SERVICE_UP, true);
+
+        String val = EntityTestUtils.assertAttributeEventuallyNonNull(entity, SENSOR_STRING);
+        assertTrue(val.contains("1"), "val="+val);
+        String[] counts = val.trim().split("\\s+");
+        Assert.assertEquals(counts.length, 4, "val="+val);
+        Assert.assertEquals(counts[0], "1", "val="+val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
index ae80754..595547e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JmxAttributeSensor.java
@@ -30,10 +30,10 @@ import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.AddSensor;
 import org.apache.brooklyn.core.sensor.DependentConfiguration;
 import org.apache.brooklyn.core.sensor.HttpRequestSensor;
+import org.apache.brooklyn.core.sensor.ssh.SshCommandSensor;
 import org.apache.brooklyn.feed.jmx.JmxAttributePollConfig;
 import org.apache.brooklyn.feed.jmx.JmxFeed;
 import org.apache.brooklyn.feed.jmx.JmxHelper;
-import org.apache.brooklyn.sensor.ssh.SshCommandSensor;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.core.task.Tasks;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
index cee2d40..b14d6d8 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
@@ -102,6 +102,9 @@ public interface SoftwareProcess extends Entity, Startable {
     @SetFromFlag("postLaunchCommand")
     ConfigKey<String> POST_LAUNCH_COMMAND = BrooklynConfigKeys.POST_LAUNCH_COMMAND;
 
+    @SetFromFlag("env")
+    MapConfigKey<Object> SHELL_ENVIRONMENT = BrooklynConfigKeys.SHELL_ENVIRONMENT;
+
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION = BrooklynConfigKeys.SUGGESTED_VERSION;
 
@@ -218,10 +221,6 @@ public interface SoftwareProcess extends Entity, Startable {
     ConfigKey<Map<String, String>> RUNTIME_TEMPLATES = ConfigKeys.newConfigKey(new TypeToken<Map<String, String>>() { },
             "templates.runtime", "Mapping of templates, to be filled in and copied before customisation, to destination name relative to runDir");
 
-    @SetFromFlag("env")
-    MapConfigKey<Object> SHELL_ENVIRONMENT = new MapConfigKey<Object>(Object.class,
-            "shell.env", "Map of environment variables to pass to the runtime shell", MutableMap.<String,Object>of());
-
     @SetFromFlag("provisioningProperties")
     MapConfigKey<Object> PROVISIONING_PROPERTIES = new MapConfigKey<Object>(Object.class,
             "provisioning.properties", "Custom properties to be passed in when provisioning a new machine", MutableMap.<String,Object>of());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandEffector.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandEffector.java b/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandEffector.java
deleted file mode 100644
index 9e3d885..0000000
--- a/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandEffector.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.sensor.ssh;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.effector.ParameterType;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.effector.AddEffector;
-import org.apache.brooklyn.core.effector.EffectorBody;
-import org.apache.brooklyn.core.effector.Effectors;
-import org.apache.brooklyn.core.effector.Effectors.EffectorBuilder;
-import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
-import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks.SshEffectorTaskFactory;
-import org.apache.brooklyn.entity.software.base.SoftwareProcess;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.base.Preconditions;
-
-public final class SshCommandEffector extends AddEffector {
-    
-    public static final ConfigKey<String> EFFECTOR_COMMAND = ConfigKeys.newStringConfigKey("command");
-    public static final ConfigKey<String> EFFECTOR_EXECUTION_DIR = SshCommandSensor.SENSOR_EXECUTION_DIR;
-    
-    public SshCommandEffector(ConfigBag params) {
-        super(newEffectorBuilder(params).build());
-    }
-    
-    public SshCommandEffector(Map<String,String> params) {
-        this(ConfigBag.newInstance(params));
-    }
-
-    public static EffectorBuilder<String> newEffectorBuilder(ConfigBag params) {
-        EffectorBuilder<String> eff = AddEffector.newEffectorBuilder(String.class, params);
-        eff.impl(new Body(eff.buildAbstract(), params));
-        return eff;
-    }
-
-
-    protected static class Body extends EffectorBody<String> {
-        private final Effector<?> effector;
-        private final String command;
-        private final String executionDir;
-
-        public Body(Effector<?> eff, ConfigBag params) {
-            this.effector = eff;
-            this.command = Preconditions.checkNotNull(params.get(EFFECTOR_COMMAND), "command must be supplied when defining this effector");
-            this.executionDir = params.get(EFFECTOR_EXECUTION_DIR);
-            // TODO could take a custom "env" aka effectorShellEnv
-        }
-
-        @Override
-        public String call(ConfigBag params) {
-            String command = this.command;
-            
-            command = SshCommandSensor.makeCommandExecutingInDirectory(command, executionDir, entity());
-            
-            MutableMap<String, String> env = MutableMap.of();
-            // first set all declared parameters, including default values
-            for (ParameterType<?> param: effector.getParameters()) {
-                env.addIfNotNull(param.getName(), Strings.toString( params.get(Effectors.asConfigKey(param)) ));
-            }
-            
-            // then set things from the entities defined shell environment, if applicable
-            env.putAll(Strings.toStringMap(entity().getConfig(SoftwareProcess.SHELL_ENVIRONMENT), ""));
-            
-            // if we wanted to resolve the surrounding environment in real time -- see above
-//            Map<String,Object> paramsResolved = (Map<String, Object>) Tasks.resolveDeepValue(effectorShellEnv, Map.class, entity().getExecutionContext());
-            
-            // finally set the parameters we've been passed; this will repeat declared parameters but to no harm,
-            // it may pick up additional values (could be a flag defining whether this is permitted or not)
-            env.putAll(Strings.toStringMap(params.getAllConfig()));
-            
-            SshEffectorTaskFactory<String> t = SshEffectorTasks.ssh(command)
-                .requiringZeroAndReturningStdout()
-                .summary("effector "+effector.getName())
-                .environmentVariables(env);
-            return queue(t).get();
-        }
-        
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandSensor.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandSensor.java b/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandSensor.java
deleted file mode 100644
index 31c116f..0000000
--- a/software/base/src/main/java/org/apache/brooklyn/sensor/ssh/SshCommandSensor.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.sensor.ssh;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.EntityInitializer;
-import org.apache.brooklyn.api.entity.EntityLocal;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.effector.AddSensor;
-import org.apache.brooklyn.core.sensor.HttpRequestSensor;
-import org.apache.brooklyn.entity.java.JmxAttributeSensor;
-import org.apache.brooklyn.entity.software.base.SoftwareProcess;
-import org.apache.brooklyn.feed.ssh.SshFeed;
-import org.apache.brooklyn.feed.ssh.SshPollConfig;
-import org.apache.brooklyn.feed.ssh.SshValueFunctions;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.text.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
-
-/** 
- * Configurable {@link EntityInitializer} which adds an SSH sensor feed running the <code>command</code> supplied
- * in order to populate the sensor with the indicated <code>name</code>. Note that the <code>targetType</code> is ignored,
- * and always set to {@link String}.
- *
- * @see HttpRequestSensor
- * @see JmxAttributeSensor
- */
-@Beta
-public final class SshCommandSensor<T> extends AddSensor<T> {
-
-    private static final Logger LOG = LoggerFactory.getLogger(SshCommandSensor.class);
-
-    public static final ConfigKey<String> SENSOR_COMMAND = ConfigKeys.newStringConfigKey("command", "SSH command to execute for sensor");
-    public static final ConfigKey<String> SENSOR_EXECUTION_DIR = ConfigKeys.newStringConfigKey("executionDir", "Directory where the command should run; "
-        + "if not supplied, executes in the entity's run dir (or home dir if no run dir is defined); "
-        + "use '~' to always execute in the home dir, or 'custom-feed/' to execute in a custom-feed dir relative to the run dir");
-
-    protected final String command;
-    protected final String executionDir;
-
-    public SshCommandSensor(final ConfigBag params) {
-        super(params);
-
-        // TODO create a supplier for the command string to support attribute embedding
-        command = Preconditions.checkNotNull(params.get(SENSOR_COMMAND), "command");
-        
-        executionDir = params.get(SENSOR_EXECUTION_DIR);
-    }
-
-    @Override
-    public void apply(final EntityLocal entity) {
-        super.apply(entity);
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Adding SSH sensor {} to {}", name, entity);
-        }
-
-        Supplier<Map<String,String>> envSupplier = new Supplier<Map<String,String>>() {
-            @Override
-            public Map<String, String> get() {
-                return MutableMap.copyOf(Strings.toStringMap(entity.getConfig(SoftwareProcess.SHELL_ENVIRONMENT), ""));
-            }
-        };
-
-        Supplier<String> commandSupplier = new Supplier<String>() {
-            @Override
-            public String get() {
-                return makeCommandExecutingInDirectory(command, executionDir, entity);
-            }
-        };
-
-        SshPollConfig<T> pollConfig = new SshPollConfig<T>(sensor)
-                .period(period)
-                .env(envSupplier)
-                .command(commandSupplier)
-                .checkSuccess(SshValueFunctions.exitStatusEquals(0))
-                .onFailureOrException(Functions.constant((T) null))
-                .onSuccess(Functions.compose(new Function<String, T>() {
-                        @Override
-                        public T apply(String input) {
-                            return TypeCoercions.coerce(input, getType(type));
-                        }}, SshValueFunctions.stdout()));
-
-        SshFeed.builder()
-                .entity(entity)
-                .onlyIfServiceUp()
-                .poll(pollConfig)
-                .build();
-    }
-
-    static String makeCommandExecutingInDirectory(String command, String executionDir, EntityLocal entity) {
-        String finalCommand = command;
-        String execDir = executionDir;
-        if (Strings.isBlank(execDir)) {
-            // default to run dir
-            execDir = entity.getAttribute(SoftwareProcess.RUN_DIR);
-            // if no run dir, default to home
-            if (Strings.isBlank(execDir)) {
-                execDir = "~";
-            }
-        } else if (!Os.isAbsolutish(execDir)) {
-            // relative paths taken wrt run dir
-            String runDir = entity.getAttribute(SoftwareProcess.RUN_DIR);
-            if (!Strings.isBlank(runDir)) {
-                execDir = Os.mergePaths(runDir, execDir);
-            }
-        }
-        if (!"~".equals(execDir)) {
-            finalCommand = "mkdir -p '"+execDir+"' && cd '"+execDir+"' && "+finalCommand;
-        }
-        return finalCommand;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/080d2de0/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/ssh/SshCommandIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/ssh/SshCommandIntegrationTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/ssh/SshCommandIntegrationTest.java
deleted file mode 100644
index c57711f..0000000
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/ssh/SshCommandIntegrationTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.entity.software.base.test.ssh;
-
-import static org.testng.Assert.assertTrue;
-
-import java.io.File;
-
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.entity.EntityLocal;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.sensor.AttributeSensor;
-import org.apache.brooklyn.core.effector.Effectors;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.sensor.Sensors;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.core.test.entity.TestEntity;
-import org.apache.brooklyn.sensor.ssh.SshCommandEffector;
-import org.apache.brooklyn.sensor.ssh.SshCommandSensor;
-import org.apache.brooklyn.test.EntityTestUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.time.Duration;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-
-import com.google.common.collect.ImmutableList;
-
-public class SshCommandIntegrationTest {
-
-    final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString", "");
-    final static AttributeSensor<Integer> SENSOR_INT = Sensors.newIntegerSensor("aLong", "");
-    final static Effector<String> EFFECTOR_SAY_HI = Effectors.effector(String.class, "sayHi").buildAbstract();
-
-    private TestApplication app;
-    private SshMachineLocation machine;
-    private EntityLocal entity;
-    
-    @BeforeMethod(alwaysRun=true)
-    public void setUp() throws Exception {
-        app = TestApplication.Factory.newManagedInstanceForTests();
-        machine = app.newLocalhostProvisioningLocation().obtain();
-        entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).location(machine));
-        app.start(ImmutableList.<Location>of());
-    }
-
-    @AfterMethod(alwaysRun=true)
-    public void tearDown() throws Exception {
-        if (app != null) Entities.destroyAll(app.getManagementContext());
-    }
-    
-    @Test(groups="Integration")
-    public void testSshSensor() throws Exception {
-        File tempFile = File.createTempFile("testSshCommand", "txt");
-        tempFile.deleteOnExit();
-        new SshCommandSensor<String>(ConfigBag.newInstance()
-                .configure(SshCommandSensor.SENSOR_PERIOD, Duration.millis(100))
-                .configure(SshCommandSensor.SENSOR_NAME, SENSOR_STRING.getName())
-                .configure(SshCommandSensor.SENSOR_COMMAND, "echo foo > "+tempFile.getAbsolutePath()+"\n"
-                    + "wc "+tempFile.getAbsolutePath()))
-            .apply(entity);
-        entity.setAttribute(Attributes.SERVICE_UP, true);
-
-        String val = EntityTestUtils.assertAttributeEventuallyNonNull(entity, SENSOR_STRING);
-        assertTrue(val.contains("1"), "val="+val);
-        String[] counts = val.trim().split("\\s+");
-        Assert.assertEquals(counts.length, 4, "val="+val);
-        Assert.assertEquals(counts[0], "1", "val="+val);
-    }
-
-    @Test(groups="Integration")
-    public void testSshEffector() throws Exception {
-        File tempFile = File.createTempFile("testSshCommand", "txt");
-        tempFile.deleteOnExit();
-        new SshCommandEffector(ConfigBag.newInstance()
-                .configure(SshCommandEffector.EFFECTOR_NAME, "sayHi")
-                .configure(SshCommandEffector.EFFECTOR_COMMAND, "echo hi"))
-            .apply(entity);
-        
-        String val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of()).get();
-        Assert.assertEquals(val.trim(), "hi", "val="+val);
-    }
-
-    @Test(groups="Integration")
-    public void testSshEffectorWithParameters() throws Exception {
-        File tempFile = File.createTempFile("testSshCommand", "txt");
-        tempFile.deleteOnExit();
-        new SshCommandEffector(ConfigBag.newInstance()
-                .configure(SshCommandEffector.EFFECTOR_NAME, "sayHi")
-                .configure(SshCommandEffector.EFFECTOR_COMMAND, "echo $foo")
-                .configure(SshCommandEffector.EFFECTOR_PARAMETER_DEFS, 
-                    MutableMap.<String,Object>of("foo", MutableMap.of("defaultValue", "hi"))))
-            .apply(entity);
-        
-        String val;
-        // explicit value
-        val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of("foo", "bar")).get();
-        Assert.assertEquals(val.trim(), "bar", "val="+val);
-        
-        // default value
-        val = entity.invoke(EFFECTOR_SAY_HI, MutableMap.<String,String>of()).get();
-        Assert.assertEquals(val.trim(), "hi", "val="+val);
-    }
-
-}



[16/16] incubator-brooklyn git commit: add RAT header for TaskPredicatesTest, as per #858

Posted by he...@apache.org.
add RAT header for TaskPredicatesTest, as per #858


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

Branch: refs/heads/master
Commit: 0c24058088967d1928708d38c9c8c1658c923b99
Parents: c8fd8fb
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Aug 20 13:26:59 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Aug 20 13:39:01 2015 +0100

----------------------------------------------------------------------
 .../util/core/task/TaskPredicatesTest.java        | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0c240580/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
index d87dbb5..f2709f2 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.brooklyn.util.core.task;
 
 import static org.testng.Assert.assertFalse;


[06/16] incubator-brooklyn git commit: Delete deprecated UsageManager.UsageListener

Posted by he...@apache.org.
Delete deprecated UsageManager.UsageListener

- Instead, use org.apache.brooklyn.core.mgmt.usage.UsageListener


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

Branch: refs/heads/master
Commit: 1ffacc629fa1725121ee3d7d57f2d349d2aede4f
Parents: 147f9ec
Author: Aled Sage <al...@gmail.com>
Authored: Wed Aug 19 18:35:05 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Aug 20 12:04:12 2015 +0100

----------------------------------------------------------------------
 .../core/mgmt/internal/LocalUsageManager.java   | 55 +++++---------
 .../internal/NonDeploymentUsageManager.java     | 17 +----
 .../brooklyn/core/mgmt/usage/UsageManager.java  | 77 ++------------------
 .../usage/ApplicationUsageTrackingTest.java     | 44 -----------
 .../mgmt/usage/LocationUsageTrackingTest.java   | 42 +----------
 .../usage/RecordingLegacyUsageListener.java     | 70 ------------------
 .../core/mgmt/usage/RecordingUsageListener.java |  3 +-
 .../test/core/mgmt/usage/UsageListenerTest.java | 39 +---------
 8 files changed, 34 insertions(+), 313 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
index ba47c02..6793bfc 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
@@ -46,6 +46,7 @@ import org.apache.brooklyn.core.mgmt.ManagementContextInjectable;
 import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
 import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,7 +78,7 @@ public class LocalUsageManager implements UsageManager {
     
     private static final Logger log = LoggerFactory.getLogger(LocalUsageManager.class);
 
-    private static class ApplicationMetadataImpl implements org.apache.brooklyn.core.mgmt.usage.UsageListener.ApplicationMetadata {
+    private static class ApplicationMetadataImpl implements UsageListener.ApplicationMetadata {
         private final Application app;
         private String applicationId;
         private String applicationName;
@@ -113,7 +114,7 @@ public class LocalUsageManager implements UsageManager {
         }
     }
     
-    private static class LocationMetadataImpl implements org.apache.brooklyn.core.mgmt.usage.UsageListener.LocationMetadata {
+    private static class LocationMetadataImpl implements UsageListener.LocationMetadata {
         private final Location loc;
         private String locationId;
         private Map<String, String> metadata;
@@ -137,17 +138,13 @@ public class LocalUsageManager implements UsageManager {
     // Register a coercion from String->UsageListener, so that USAGE_LISTENERS defined in brooklyn.properties
     // will be instantiated, given their class names.
     static {
-        TypeCoercions.registerAdapter(String.class, org.apache.brooklyn.core.mgmt.usage.UsageListener.class, new Function<String, org.apache.brooklyn.core.mgmt.usage.UsageListener>() {
-            @Override public org.apache.brooklyn.core.mgmt.usage.UsageListener apply(String input) {
+        TypeCoercions.registerAdapter(String.class, UsageListener.class, new Function<String, UsageListener>() {
+            @Override public UsageListener apply(String input) {
                 // TODO Want to use classLoader = mgmt.getCatalog().getRootClassLoader();
                 ClassLoader classLoader = LocalUsageManager.class.getClassLoader();
                 Optional<Object> result = Reflections.invokeConstructorWithArgs(classLoader, input);
                 if (result.isPresent()) {
-                    if (result.get() instanceof org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener) {
-                        return new org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener.UsageListenerAdapter((org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener) result.get());
-                    } else {
-                        return (org.apache.brooklyn.core.mgmt.usage.UsageListener) result.get();
-                    }
+                    return (UsageListener) result.get();
                 } else {
                     throw new IllegalStateException("Failed to create UsageListener from class name '"+input+"' using no-arg constructor");
                 }
@@ -165,7 +162,7 @@ public class LocalUsageManager implements UsageManager {
     
     private final Object mutex = new Object();
 
-    private final List<org.apache.brooklyn.core.mgmt.usage.UsageListener> listeners = Lists.newCopyOnWriteArrayList();
+    private final List<UsageListener> listeners = Lists.newCopyOnWriteArrayList();
     
     private final AtomicInteger listenerQueueSize = new AtomicInteger();
     
@@ -184,14 +181,12 @@ public class LocalUsageManager implements UsageManager {
                 if (listener instanceof ManagementContextInjectable) {
                     ((ManagementContextInjectable)listener).injectManagementContext(managementContext);
                 }
-                if (listener instanceof org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener) {
-                    addUsageListener((org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener)listener);
-                } else if (listener instanceof org.apache.brooklyn.core.mgmt.usage.UsageListener) {
-                    addUsageListener((org.apache.brooklyn.core.mgmt.usage.UsageListener)listener);
+                if (listener instanceof UsageListener) {
+                    addUsageListener((UsageListener)listener);
                 } else if (listener == null) {
                     throw new NullPointerException("null listener in config "+UsageManager.USAGE_LISTENERS);
                 } else {
-                    throw new ClassCastException("listener "+listener+" of type "+listener.getClass()+" is not of type "+org.apache.brooklyn.core.mgmt.usage.UsageListener.class.getName());
+                    throw new ClassCastException("listener "+listener+" of type "+listener.getClass()+" is not of type "+UsageListener.class.getName());
                 }
             }
         }
@@ -204,7 +199,7 @@ public class LocalUsageManager implements UsageManager {
             log.info("Usage manager waiting for "+listenerQueueSize+" listener events for up to "+timeout);
         }
         List<ListenableFuture<?>> futures = Lists.newArrayList();
-        for (final org.apache.brooklyn.core.mgmt.usage.UsageListener listener : listeners) {
+        for (final UsageListener listener : listeners) {
             ListenableFuture<?> future = listenerExecutor.submit(new Runnable() {
                 public void run() {
                     if (listener instanceof Closeable) {
@@ -227,8 +222,8 @@ public class LocalUsageManager implements UsageManager {
         }
     }
 
-    private void execOnListeners(final Function<org.apache.brooklyn.core.mgmt.usage.UsageListener, Void> job) {
-        for (final org.apache.brooklyn.core.mgmt.usage.UsageListener listener : listeners) {
+    private void execOnListeners(final Function<UsageListener, Void> job) {
+        for (final UsageListener listener : listeners) {
             listenerQueueSize.incrementAndGet();
             listenerExecutor.execute(new Runnable() {
                 public void run() {
@@ -257,8 +252,8 @@ public class LocalUsageManager implements UsageManager {
             usage.addEvent(event);        
             eventMap.put(app.getId(), usage);
 
-            execOnListeners(new Function<org.apache.brooklyn.core.mgmt.usage.UsageListener, Void>() {
-                    public Void apply(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+            execOnListeners(new Function<UsageListener, Void>() {
+                    public Void apply(UsageListener listener) {
                         listener.onApplicationEvent(new ApplicationMetadataImpl(Entities.proxy(app)), event);
                         return null;
                     }
@@ -319,8 +314,8 @@ public class LocalUsageManager implements UsageManager {
                 usage.addEvent(event);
                 usageMap.put(loc.getId(), usage);
                 
-                execOnListeners(new Function<org.apache.brooklyn.core.mgmt.usage.UsageListener, Void>() {
-                        public Void apply(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+                execOnListeners(new Function<UsageListener, Void>() {
+                        public Void apply(UsageListener listener) {
                             listener.onLocationEvent(new LocationMetadataImpl(loc), event);
                             return null;
                         }
@@ -397,24 +392,12 @@ public class LocalUsageManager implements UsageManager {
     }
 
     @Override
-    @Deprecated
-    public void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener) {
-        addUsageListener(new org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-
-    @Override
-    @Deprecated
-    public void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener) {
-        removeUsageListener(new org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-    
-    @Override
-    public void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+    public void addUsageListener(UsageListener listener) {
         listeners.add(listener);
     }
 
     @Override
-    public void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+    public void removeUsageListener(UsageListener listener) {
         listeners.remove(listener);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentUsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentUsageManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentUsageManager.java
index df28363..abf602c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentUsageManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentUsageManager.java
@@ -25,6 +25,7 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageManager;
 
 import com.google.common.base.Predicate;
@@ -101,19 +102,7 @@ public class NonDeploymentUsageManager implements UsageManager {
     }
 
     @Override
-    @Deprecated
-    public void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener) {
-        addUsageListener(new org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-
-    @Override
-    @Deprecated
-    public void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener) {
-        removeUsageListener(new org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-    
-    @Override
-    public void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+    public void addUsageListener(UsageListener listener) {
         if (isInitialManagementContextReal()) {
             initialManagementContext.getUsageManager().addUsageListener(listener);
         } else {
@@ -122,7 +111,7 @@ public class NonDeploymentUsageManager implements UsageManager {
     }
 
     @Override
-    public void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener) {
+    public void removeUsageListener(UsageListener listener) {
         if (isInitialManagementContextReal()) {
             initialManagementContext.getUsageManager().removeUsageListener(listener);
         } else {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
index 919c867..1bc7d78 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
@@ -18,10 +18,7 @@
  */
 package org.apache.brooklyn.core.mgmt.usage;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.brooklyn.api.entity.Application;
@@ -29,14 +26,9 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage;
-import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
-import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
-import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
 import org.apache.brooklyn.util.time.Duration;
 
 import com.google.common.annotations.Beta;
-import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.reflect.TypeToken;
@@ -45,10 +37,10 @@ import com.google.common.reflect.TypeToken;
 public interface UsageManager {
 
     @SuppressWarnings("serial")
-    public static final ConfigKey<List<org.apache.brooklyn.core.mgmt.usage.UsageListener>> USAGE_LISTENERS = ConfigKeys.newConfigKey(
-            new TypeToken<List<org.apache.brooklyn.core.mgmt.usage.UsageListener>>() {},
+    public static final ConfigKey<List<UsageListener>> USAGE_LISTENERS = ConfigKeys.newConfigKey(
+            new TypeToken<List<UsageListener>>() {},
             "brooklyn.usageManager.listeners", "Optional usage listeners (i.e. for metering)",
-            ImmutableList.<org.apache.brooklyn.core.mgmt.usage.UsageListener>of());
+            ImmutableList.<UsageListener>of());
     
     public static final ConfigKey<Duration> USAGE_LISTENER_TERMINATION_TIMEOUT = ConfigKeys.newConfigKey(
             Duration.class,
@@ -57,51 +49,6 @@ public interface UsageManager {
             Duration.TEN_SECONDS);
 
     /**
-     * @since 0.7.0
-     * @deprecated since 0.7.0; use {@link org.apache.brooklyn.core.mgmt.internal.UsageListener}; see {@link UsageListenerAdapter} 
-     */
-    public interface UsageListener {
-        public static final UsageListener NOOP = new UsageListener() {
-            @Override public void onApplicationEvent(String applicationId, String applicationName, String entityType, 
-                    String catalogItemId, Map<String, String> metadata, ApplicationEvent event) {}
-            @Override public void onLocationEvent(String locationId, Map<String, String> metadata, LocationEvent event) {}
-        };
-        
-        public static class UsageListenerAdapter implements org.apache.brooklyn.core.mgmt.usage.UsageListener {
-            private final UsageListener listener;
-
-            public UsageListenerAdapter(UsageListener listener) {
-                this.listener = checkNotNull(listener, "listener");
-            }
-            
-            @Override
-            public void onApplicationEvent(ApplicationMetadata app, ApplicationEvent event) {
-                listener.onApplicationEvent(app.getApplicationId(), app.getApplicationName(), app.getEntityType(), app.getCatalogItemId(), app.getMetadata(), event);
-            }
-
-            @Override
-            public void onLocationEvent(LocationMetadata loc, LocationEvent event) {
-                listener.onLocationEvent(loc.getLocationId(), loc.getMetadata(), event);
-            }
-            
-            @Override
-            public boolean equals(Object obj) {
-                return (obj instanceof UsageListenerAdapter) && listener.equals(((UsageListenerAdapter)obj).listener);
-            }
-            
-            @Override
-            public int hashCode() {
-                return Objects.hashCode(listener);
-            }
-        }
-        
-        void onApplicationEvent(String applicationId, String applicationName, String entityType, String catalogItemId,
-                Map<String, String> metadata, ApplicationEvent event);
-        
-        void onLocationEvent(String locationId, Map<String, String> metadata, LocationEvent event);
-    }
-
-    /**
      * Adds this application event to the usage record for the given app (creating the usage 
      * record if one does not already exist).
      */
@@ -136,30 +83,16 @@ public interface UsageManager {
     Set<ApplicationUsage> getApplicationUsage(Predicate<? super ApplicationUsage> filter);
 
     /**
-     * @since 0.7.0
-     * @deprecated since 0.7.0; use {@link #removeUsageListener(org.apache.brooklyn.core.mgmt.internal.UsageListener)};
-     *             see {@link org.apache.brooklyn.core.mgmt.internal.UsageManager.UsageListener.UsageListenerAdapter} 
-     */
-    void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener);
-
-    /**
-     * @since 0.7.0
-     * @deprecated since 0.7.0; use {@link #removeUsageListener(org.apache.brooklyn.core.mgmt.internal.UsageListener)}
-     */
-    @Deprecated
-    void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener listener);
-    
-    /**
      * Adds the given listener, to be notified on recording of application/location events.
      * The listener notifications may be asynchronous.
      * 
      * As of 0.7.0, the listener is not persisted so will be lost on restart/rebind. This
      * behaviour may change in a subsequent release. 
      */
-    void addUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener);
+    void addUsageListener(UsageListener listener);
 
     /**
      * Removes the given listener.
      */
-    void removeUsageListener(org.apache.brooklyn.core.mgmt.usage.UsageListener listener);
+    void removeUsageListener(UsageListener listener);
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
index e727891..6f11431 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
@@ -25,7 +25,6 @@ import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.brooklyn.api.entity.Application;
@@ -86,49 +85,6 @@ public class ApplicationUsageTrackingTest {
     }
 
     @Test
-    @SuppressWarnings("deprecation")
-    public void testAddAndRemoveLegacyUsageListener() throws Exception {
-        final RecordingLegacyUsageListener listener = new RecordingLegacyUsageListener();
-        mgmt.getUsageManager().addUsageListener(listener);
-        
-        app = TestApplication.Factory.newManagedInstanceForTests(mgmt);
-        app.setCatalogItemId("testCatalogItem");
-        app.start(ImmutableList.<Location>of());
-
-        Asserts.succeedsEventually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = listener.getApplicationEvents();
-                assertEquals(events.size(), 2, "events="+events); // expect STARTING and RUNNING
-                
-                String appId = (String) events.get(0).get(1);
-                String appName = (String) events.get(0).get(2);
-                String entityType = (String) events.get(0).get(3);
-                String catalogItemId = (String) events.get(0).get(4);
-                Map<?,?> metadata = (Map<?, ?>) events.get(0).get(5);
-                ApplicationEvent appEvent = (ApplicationEvent) events.get(0).get(6);
-                
-                assertEquals(appId, app.getId(), "events="+events);
-                assertNotNull(appName, "events="+events);
-                assertEquals(catalogItemId, app.getCatalogItemId(), "events="+events);
-                assertNotNull(entityType, "events="+events);
-                assertNotNull(metadata, "events="+events);
-                assertEquals(appEvent.getState(), Lifecycle.STARTING, "events="+events);
-            }});
-
-
-        // Remove the listener; will get no more notifications
-        listener.clearEvents();
-        mgmt.getUsageManager().removeUsageListener(listener);
-        
-        app.start(ImmutableList.<Location>of());
-        Asserts.succeedsContinually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = listener.getLocationEvents();
-                assertEquals(events.size(), 0, "events="+events);
-            }});
-    }
-
-    @Test
     public void testAddAndRemoveUsageListener() throws Exception {
         final RecordingUsageListener listener = new RecordingUsageListener();
         mgmt.getUsageManager().addUsageListener(listener);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
index bb8b597..13b1c54 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
@@ -31,18 +31,18 @@ import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.location.NoMachinesAvailableException;
-import org.apache.brooklyn.core.mgmt.usage.UsageListener.LocationMetadata;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener.LocationMetadata;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.entity.software.base.SoftwareProcessEntityTest;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
 import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.time.Time;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
@@ -67,42 +67,6 @@ public class LocationUsageTrackingTest extends BrooklynAppUnitTestSupport {
     }
 
     @Test
-    @SuppressWarnings("deprecation")
-    public void testAddAndRemoveLegacyUsageListener() throws Exception {
-        final RecordingLegacyUsageListener listener = new RecordingLegacyUsageListener();
-        mgmt.getUsageManager().addUsageListener(listener);
-        
-        app.createAndManageChild(EntitySpec.create(SoftwareProcessEntityTest.MyService.class));
-        app.start(ImmutableList.of(loc));
-        final SshMachineLocation machine = Iterables.getOnlyElement(loc.getAllMachines());
-        
-        Asserts.succeedsEventually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = listener.getLocationEvents();
-                String locId = (String) events.get(0).get(1);
-                LocationEvent locEvent = (LocationEvent) events.get(0).get(3);
-                Map<?,?> metadata = (Map<?, ?>) events.get(0).get(2);
-                
-                assertEquals(events.size(), 1, "events="+events);
-                assertEquals(locId, machine.getId(), "events="+events);
-                assertNotNull(metadata, "events="+events);
-                assertEquals(locEvent.getApplicationId(), app.getId(), "events="+events);
-                assertEquals(locEvent.getState(), Lifecycle.CREATED, "events="+events);
-            }});
-
-        // Remove the listener; will get no more notifications
-        listener.clearEvents();
-        mgmt.getUsageManager().removeUsageListener(listener);
-        
-        app.stop();
-        Asserts.succeedsContinually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = listener.getLocationEvents();
-                assertEquals(events.size(), 0, "events="+events);
-            }});
-    }
-
-    @Test
     public void testAddAndRemoveUsageListener() throws Exception {
         final RecordingUsageListener listener = new RecordingUsageListener();
         mgmt.getUsageManager().addUsageListener(listener);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingLegacyUsageListener.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingLegacyUsageListener.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingLegacyUsageListener.java
deleted file mode 100644
index 3a3d95b..0000000
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingLegacyUsageListener.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.entity.software.base.test.core.mgmt.usage;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
-import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
-import org.apache.brooklyn.util.collections.MutableList;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-@Deprecated
-public class RecordingLegacyUsageListener implements org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener {
-
-    private final List<List<?>> events = Lists.newCopyOnWriteArrayList();
-    
-    @Override
-    public void onApplicationEvent(String applicationId, String applicationName, String entityType, 
-            String catalogItemId, Map<String, String> metadata, ApplicationEvent event) {
-        events.add(MutableList.of("application", applicationId, applicationName, entityType, catalogItemId, metadata, event));
-    }
-
-    @Override
-    public void onLocationEvent(String locationId, Map<String, String> metadata, LocationEvent event) {
-        events.add(MutableList.of("location", locationId, metadata, event));
-    }
-    
-    public void clearEvents() {
-        events.clear();
-    }
-    
-    public List<List<?>> getEvents() {
-        return ImmutableList.copyOf(events);
-    }
-    
-    public List<List<?>> getLocationEvents() {
-        List<List<?>> result = Lists.newArrayList();
-        for (List<?> event : events) {
-            if (event.get(0).equals("location")) result.add(event);
-        }
-        return ImmutableList.copyOf(result);
-    }
-    
-    public List<List<?>> getApplicationEvents() {
-        List<List<?>> result = Lists.newArrayList();
-        for (List<?> event : events) {
-            if (event.get(0).equals("application")) result.add(event);
-        }
-        return ImmutableList.copyOf(result);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
index 539d204..3a54178 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
@@ -22,12 +22,13 @@ import java.util.List;
 
 import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
 import org.apache.brooklyn.util.collections.MutableList;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
-public class RecordingUsageListener implements org.apache.brooklyn.core.mgmt.usage.UsageListener {
+public class RecordingUsageListener implements UsageListener {
 
     private final List<List<?>> events = Lists.newCopyOnWriteArrayList();
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ffacc62/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
index 7a55018..b517920 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageManager;
 import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
 import org.apache.brooklyn.core.test.entity.TestApplication;
@@ -55,7 +56,6 @@ public class UsageListenerTest {
 
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
-        RecordingStaticLegacyUsageListener.clearInstances();
         RecordingStaticUsageListener.clearInstances();
     }
 
@@ -67,28 +67,11 @@ public class UsageListenerTest {
             LOG.error("Caught exception in tearDown method", t);
         } finally {
             mgmt = null;
-            RecordingStaticLegacyUsageListener.clearInstances();
             RecordingStaticUsageListener.clearInstances();
         }
     }
 
     @Test
-    public void testAddLegacyUsageListenerViaProperties() throws Exception {
-        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
-        brooklynProperties.put(UsageManager.USAGE_LISTENERS, RecordingStaticLegacyUsageListener.class.getName());
-        mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
-        
-        app = TestApplication.Factory.newManagedInstanceForTests(mgmt);
-        app.start(ImmutableList.<Location>of());
-
-        Asserts.succeedsEventually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = RecordingStaticLegacyUsageListener.getInstance().getApplicationEvents();
-                assertTrue(events.size() > 0, "events="+events); // expect some events
-            }});
-    }
-    
-    @Test
     public void testAddUsageListenerViaProperties() throws Exception {
         BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
         brooklynProperties.put(UsageManager.USAGE_LISTENERS, RecordingStaticUsageListener.class.getName());
@@ -104,25 +87,7 @@ public class UsageListenerTest {
             }});
     }
     
-    public static class RecordingStaticLegacyUsageListener extends RecordingLegacyUsageListener implements org.apache.brooklyn.core.mgmt.usage.UsageManager.UsageListener {
-        private static final List<RecordingStaticLegacyUsageListener> STATIC_INSTANCES = Lists.newCopyOnWriteArrayList();
-        
-        public static RecordingStaticLegacyUsageListener getInstance() {
-            return Iterables.getOnlyElement(STATIC_INSTANCES);
-        }
-
-        public static void clearInstances() {
-            STATIC_INSTANCES.clear();
-        }
-        
-        public RecordingStaticLegacyUsageListener() {
-            // Bad to leak a ref to this before constructor finished, but we'll live with it because
-            // it's just test code!
-            STATIC_INSTANCES.add(this);
-        }
-    }
-    
-    public static class RecordingStaticUsageListener extends RecordingUsageListener implements org.apache.brooklyn.core.mgmt.usage.UsageListener {
+    public static class RecordingStaticUsageListener extends RecordingUsageListener implements UsageListener {
         private static final List<RecordingStaticUsageListener> STATIC_INSTANCES = Lists.newCopyOnWriteArrayList();
         
         public static RecordingStaticUsageListener getInstance() {