Add missing @Override annotation to method signatures overriding interface methods
diff --git a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
index ed00f61..3c313b3 100644
--- a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
+++ b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedJBoss7ServerImpl.java
@@ -134,6 +134,7 @@
                 .poll(new FunctionPollConfig<Boolean,Boolean>(MANAGEMENT_URL_UP)
                         .callable(new Callable<Boolean>() {
                             private int counter = 0;
+                            @Override
                             public Boolean call() {
                                 sensors().set(REQUEST_COUNT, (counter++ % 100));
                                 sensors().set(ERROR_COUNT, (counter++ % 100));
diff --git a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
index 4560050..8f11c9d 100644
--- a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
+++ b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedMySqlNodeImpl.java
@@ -65,6 +65,7 @@
                     .poll(new FunctionPollConfig<Boolean, Boolean>(SERVICE_UP)
                             .callable(new Callable<Boolean>() {
                                 private int counter = 0;
+                                @Override
                                 public Boolean call() {
                                     sensors().set(QUERIES_PER_SECOND_FROM_MYSQL, (double)(counter++ % 100));
                                     return true;
diff --git a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
index c75c8ab..3777528 100644
--- a/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
+++ b/qa/src/main/java/org/apache/brooklyn/qa/load/SimulatedNginxControllerImpl.java
@@ -99,6 +99,7 @@
                 .period(getConfig(HTTP_POLL_PERIOD))
                 .poll(new FunctionPollConfig<Boolean,Boolean>(SERVICE_UP)
                         .callable(new Callable<Boolean>() {
+                            @Override
                             public Boolean call() {
                                 return true;
                             }}))
diff --git a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
index 65ae9b0..a762721 100644
--- a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
+++ b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
@@ -42,10 +42,12 @@
         lifecycleTasks.attachLifecycleEffectors(this);
     }
 
+    @Override
     public void populateServiceNotUpDiagnostics() {
         // TODO no-op currently; should check ssh'able etc
     }
 
+    @Override
     public String ansibleCommand(String module, String args) {
         final ProcessTaskWrapper<Integer> command = DynamicTasks.queue(
             AnsiblePlaybookTasks.moduleCommand(module, config().get(ANSIBLE_VARS), lifecycleTasks.getRunDir(), args));
diff --git a/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltLifecycleEffectorTasks.java b/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltLifecycleEffectorTasks.java
index 4dc5cb6..2051ed6 100644
--- a/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltLifecycleEffectorTasks.java
+++ b/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltLifecycleEffectorTasks.java
@@ -93,6 +93,7 @@
 
         if (0 != installedAlready.getExitCode()) {
             DynamicTasks.queue("install", new Runnable() {
+                @Override
                 public void run() {
                     DynamicTasks.queue(
                         SaltSshTasks.installSalt(false),
diff --git a/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltUtils.java b/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltUtils.java
index 29761f4..b11c06e 100644
--- a/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltUtils.java
+++ b/software/cm/salt/src/main/java/org/apache/brooklyn/entity/cm/salt/impl/SaltUtils.java
@@ -32,6 +32,7 @@
 
         return new ManagementContext.PropertiesReloadListener() {
             private static final long serialVersionUID = 1L;
+            @Override
             public void reloaded() {
                 // TODO: implement properties reload logic
             }
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
index 4c960a6..1df2f98 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbNodeImpl.java
@@ -87,6 +87,7 @@
                     .poll(new SshPollConfig<Double>(QUERIES_PER_SECOND_FROM_MARIADB)
                             .command(cmd)
                             .onSuccess(new Function<SshPollValue, Double>() {
+                                @Override
                                 public Double apply(SshPollValue input) {
                                     String q = Strings.getFirstWordAfter(input.getStdout(), "Queries per second avg:");
                                     return (q == null) ? null : Double.parseDouble(q);
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
index 9061634..ecc8698 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mariadb/MariaDbSshDriver.java
@@ -240,6 +240,7 @@
         return format("%s/bin/mysqladmin --defaults-file=%s status", getExpandedInstallDir(), Urls.mergePaths(getRunDir(), getConfigFile()));
     }
 
+    @Override
     public ProcessTaskWrapper<Integer> executeScriptAsync(String commands) {
         String filename = "mariadb-commands-"+Identifiers.makeRandomId(8);
         DynamicTasks.queue(SshEffectorTasks.put(Urls.mergePaths(getRunDir(), filename)).contents(commands).summary("copying datastore script to execute "+filename));
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
index 0421a98..ed7ba94 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlNodeImpl.java
@@ -29,6 +29,7 @@
     @SuppressWarnings("unused")
     private static final Logger LOG = LoggerFactory.getLogger(PostgreSqlNodeImpl.class);
 
+    @Override
     public Class<?> getDriverInterface() {
         return PostgreSqlDriver.class;
     }
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index 53658d7..0eec9cd 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -242,6 +242,7 @@
 
     private static Function<String, String> givenDirIfFileExistsInItLinkToDir(final String filename, final String linkToMake) {
         return new Function<String, String>() {
+            @Override
             public String apply(@Nullable String dir) {
                 return ifExecutableElse1(Urls.mergePaths(dir, filename),
                     chainGroup("echo 'found "+filename+" in "+dir+" so linking to it in "+linkToMake+"'", "ln -s "+dir+" "+linkToMake));
@@ -558,6 +559,7 @@
         return callPgctl("status", false);
     }
 
+    @Override
     public ProcessTaskWrapper<Integer> executeScriptAsync(String commands) {
         String filename = "postgresql-commands-"+Identifiers.makeRandomId(8);
         installFile(Streams.newInputStreamWithContents(commands), filename);
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
index cb76280..ef1617a 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQQueueImpl.java
@@ -35,10 +35,12 @@
         sensors().set(QUEUE_NAME, getName());
     }
 
+    @Override
     public String getQueueName() {
         return getName();
     }
     
+    @Override
     public void create() {
         log.debug("{} adding queue {} to broker {}", new Object[] {this, getName(), jmxHelper.getAttribute(brokerMBeanName, "BrokerName")});
         
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
index 8d0cf04..c8ba5c6 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/activemq/ActiveMQTopicImpl.java
@@ -46,6 +46,7 @@
         //TODO add sensors for topics
     }
 
+    @Override
     public String getTopicName() {
         return getName();
     }
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/jms/JMSDestinationImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/jms/JMSDestinationImpl.java
index 284b6b3..49dc614 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/jms/JMSDestinationImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/jms/JMSDestinationImpl.java
@@ -41,6 +41,7 @@
 
     protected abstract void disconnectSensors();
 
+    @Override
     public abstract void delete();
 
     @Override
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
index 61cea83..e40bc9e 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/qpid/QpidBrokerImpl.java
@@ -54,8 +54,11 @@
         super();
     }
 
+    @Override
     public String getVirtualHost() { return getAttribute(VIRTUAL_HOST_NAME); }
+    @Override
     public String getAmqpVersion() { return getAttribute(AMQP_VERSION); }
+    @Override
     public Integer getAmqpPort() { return getAttribute(AMQP_PORT); }
 
     @Override
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
index bdf7299..afd5b84 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBrokerImpl.java
@@ -36,8 +36,11 @@
 public class RabbitBrokerImpl extends SoftwareProcessImpl implements RabbitBroker {
     private static final Logger log = LoggerFactory.getLogger(RabbitBrokerImpl.class);
 
+    @Override
     public String getVirtualHost() { return getAttribute(VIRTUAL_HOST_NAME); }
+    @Override
     public String getAmqpVersion() { return getAttribute(AMQP_VERSION); }
+    @Override
     public Integer getAmqpPort() { return getAttribute(AMQP_PORT); }
 
     public RabbitBrokerImpl() {
@@ -69,11 +72,13 @@
         // queueNames.each { String name -> addQueue(name) }
     }
 
+    @Override
     public void setBrokerUrl() {
         String urlFormat = "amqp://guest:guest@%s:%d/%s";
         sensors().set(BROKER_URL, format(urlFormat, getAttribute(HOSTNAME), getAttribute(AMQP_PORT), getAttribute(VIRTUAL_HOST_NAME)));
     }
 
+    @Override
     public RabbitQueue createQueue(Map properties) {
         RabbitQueue result = addChild(EntitySpec.create(RabbitQueue.class).configure(properties));
         result.create();
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
index 03b3d68..076a55c 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitQueue.java
@@ -79,6 +79,7 @@
     /**
      * Return the AMQP name for the queue.
      */
+    @Override
     public String getQueueName() {
         return getName();
     }
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormSshDriver.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormSshDriver.java
index f06c0bc..03f335e 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormSshDriver.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/storm/StormSshDriver.java
@@ -103,6 +103,7 @@
         return result;
     }
 
+    @Override
     public String getJvmOptsLine() {
         return Optional.fromNullable(getShellEnvironment().get("JAVA_OPTS")).or("");
     }
diff --git a/software/monitoring/src/test/java/org/apache/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java b/software/monitoring/src/test/java/org/apache/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
index b30aa91..e88a78d 100644
--- a/software/monitoring/src/test/java/org/apache/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
+++ b/software/monitoring/src/test/java/org/apache/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
@@ -90,6 +90,7 @@
         MySqlNode mySqlNode = sameServerEntity.addChild(EntitySpec.create(MySqlNode.class));
 
         Function<String, Map<String, Object>> controlFileSubstitutionsFunction = new Function<String, Map<String, Object>>() {
+            @Override
             public Map<String, Object> apply(String input) {
                 return ImmutableMap.<String, Object>of("targetPidFile", input);
             }
@@ -121,6 +122,7 @@
         // This runs on localhost; free to obtain another machine with impunity.
         final String osFlavor;
         MachineDetails machineDetails = app.getExecutionContext().submit(new Callable<MachineDetails>() {
+            @Override
             public MachineDetails call() throws Exception {
                 return loc.obtain().getMachineDetails();
             }}).get();
@@ -147,6 +149,7 @@
             .configure(MySqlNode.DATA_DIR, mySqlDataDir));
 
         Function<String, Map<String, Object>> controlFileSubstitutionsFunction = new Function<String, Map<String, Object>>() {
+            @Override
             public Map<String, Object> apply(String input) {
                 return ImmutableMap.<String, Object>of(
                     "targetPidFile", input,
diff --git a/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerSshDriver.java b/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerSshDriver.java
index 150cfb9..e33089b 100644
--- a/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerSshDriver.java
+++ b/software/network/src/main/java/org/apache/brooklyn/entity/network/bind/BindDnsServerSshDriver.java
@@ -166,6 +166,7 @@
         return Os.mergePaths(getOsSupport().getConfigDirectory(), "rfc1912.zone");
     }
 
+    @Override
     public BindOsSupport getOsSupport() {
         BindOsSupport result = osSupport;
         if (result == null) {
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
index 43bf4b2..9c6a01d 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java
@@ -184,6 +184,7 @@
     }
     
     // Used for freemarker
+    @Override
     public String getMajorMinorVersion() {
         String version = getConfig(CassandraNode.SUGGESTED_VERSION);
         if (Strings.isBlank(version)) return "";
@@ -270,6 +271,7 @@
     }
     /** not always the private IP, if public IP has been insisted on for broadcast, e.g. setting up a rack topology */
     // have not confirmed this does the right thing in all clouds ... only used for rack topology however
+    @Override
     public String getPrivateIp() {
         String sensorName = getConfig(BROADCAST_ADDRESS_SENSOR);
         if (Strings.isNonBlank(sensorName)) {
@@ -279,6 +281,7 @@
             return Strings.isNonBlank(subnetAddress) ? subnetAddress : getAttribute(CassandraNode.ADDRESS);
         }
     }
+    @Override
     public String getPublicIp() {
         // may need to be something else in google
         return getAttribute(CassandraNode.ADDRESS);
@@ -583,6 +586,7 @@
         public ThriftLatencyChecker(CassandraNode entity) {
             this.entity = entity;
         }
+        @Override
         public Long call() {
             Integer privatePort = entity.getThriftPort();
             if (privatePort == null) return -1L;
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/TokenGenerators.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/TokenGenerators.java
index f29a813..c7337e0 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/TokenGenerators.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/TokenGenerators.java
@@ -44,8 +44,11 @@
         
         public static final BigInteger TWO = BigInteger.valueOf(2);
         
+        @Override
         public abstract BigInteger max();
+        @Override
         public abstract BigInteger min();
+        @Override
         public abstract BigInteger range();
 
         private final Set<BigInteger> currentTokens = Sets.newTreeSet();
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
index 78a85f9..a420473 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeImpl.java
@@ -47,7 +47,9 @@
     public CouchDBNodeImpl() {
     }
 
+    @Override
     public Integer getHttpPort() { return getAttribute(CouchDBNode.HTTP_PORT); }
+    @Override
     public Integer getHttpsPort() { return getAttribute(CouchDBNode.HTTPS_PORT); }
     public String getClusterName() { return getAttribute(CouchDBNode.CLUSTER_NAME); }
 
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientSshDriver.java
index bd5e552..d73fdd2 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBClientSshDriver.java
@@ -102,6 +102,7 @@
         return getRunDir() + "/userScripts/" ;
     }
     
+    @Override
     public void runScript(String preStart, String scriptName) {
         AbstractMongoDBServer server = getServer();
         String host = server.getAttribute(AbstractMongoDBServer.HOSTNAME);
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterImpl.java
index 149457d..dbfe621 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouterImpl.java
@@ -68,6 +68,7 @@
                 .poll(new FunctionPollConfig<Integer, Integer>(SHARD_COUNT)
                         .period(5, TimeUnit.SECONDS)
                         .callable(new Callable<Integer>() {
+                            @Override
                             public Integer call() throws Exception {
                                 MongoDBClientSupport clientSupport = MongoDBClientSupport.forServer(MongoDBRouterImpl.this);
                                 return (int) clientSupport.getShardCount();
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
index e0c0f35..bdd1e3a 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardClusterImpl.java
@@ -75,6 +75,7 @@
     @Override
     public void start(Collection<? extends Location> locations) {
         subscriptions().subscribeToMembers(this, Startable.SERVICE_UP, new SensorEventListener<Boolean>() {
+            @Override
             public void onEvent(SensorEvent<Boolean> event) {
                 addShards();
             }
@@ -84,6 +85,7 @@
         
         MongoDBRouterCluster routers = getParent().getAttribute(MongoDBShardedDeployment.ROUTER_CLUSTER);
         subscriptions().subscribe(routers, MongoDBRouterCluster.ANY_RUNNING_ROUTER, new SensorEventListener<MongoDBRouter>() {
+            @Override
             public void onEvent(SensorEvent<MongoDBRouter> event) {
                 if (event.getValue() != null)
                     addShards();
diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
index af2e53b..dcc9164 100644
--- a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
+++ b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
@@ -371,6 +371,7 @@
         return entity.getAttribute(RiakNode.RIAK_ON_PATH);
     }
 
+    @Override
     public String getRiakEtcDir() {
         return isPackageInstall() ? "/etc/riak" : Urls.mergePaths(getExpandedInstallDir(), "etc");
     }
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
index 6c5b67a..fc1a600 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
@@ -127,6 +127,7 @@
         // may take some time to be consistent (with new thrift_latency checks on the node,
         // contactability should not be an issue, but consistency still might be)
         Asserts.succeedsEventually(MutableMap.of("timeout", 120*1000), new Runnable() {
+            @Override
             public void run() {
                 boolean open = CassandraDatacenterLiveTest.isSocketOpen(node);
                 Boolean consistant = open ? CassandraDatacenterLiveTest.areVersionsConsistent(node) : null;
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
index d229e8a..14ee88c 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
@@ -187,6 +187,7 @@
         // may take some time to be consistent (with new thrift_latency checks on the node,
         // contactability should not be an issue, but consistency still might be)
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TWO_MINUTES), new Runnable() {
+            @Override
             public void run() {
                 for (Entity n : nodes) {
                     CassandraNode node = (CassandraNode) n;
@@ -202,6 +203,7 @@
     protected static void assertSingleTokenConsistent(final List<CassandraNode> nodes) {
         final int numNodes = nodes.size();
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TWO_MINUTES), new Runnable() {
+            @Override
             public void run() {
                 Set<BigInteger> alltokens = Sets.newLinkedHashSet();
                 for (Entity node : nodes) {
@@ -222,6 +224,7 @@
         final int tokensPerNode = Iterables.get(nodes, 0).getNumTokensPerNode();
         
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TWO_MINUTES), new Runnable() {
+            @Override
             public void run() {
                 Set<BigInteger> alltokens = Sets.newLinkedHashSet();
                 for (Entity node : nodes) {
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
index 86860b4..199acc3 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
@@ -111,6 +111,7 @@
             assertEquals(HttpValueFunctions.jsonContents("foo", String.class).apply(getResponse), "bar");
         }
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 int count = clusterDocumentCount();
                 assertTrue(count >= 1, "count="+count);
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentEc2LiveTest.java
index afe80f9..86a01cb 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentEc2LiveTest.java
@@ -69,6 +69,7 @@
         Entities.dumpInfo(app);
 
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT), new Runnable() {
+            @Override
             public void run() {
                 Assert.assertEquals(deployment.getRouterCluster().getCurrentSize(), ROUTER_CLUSTER_SIZE);
                 Assert.assertEquals(deployment.getShardCluster().getCurrentSize(), SHARD_CLUSTER_SIZE);
diff --git a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
index 92e5b2f..1cf4a24 100644
--- a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
+++ b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerImpl.java
@@ -176,6 +176,7 @@
         if (jmxHelper != null) jmxHelper.terminate();
     }
 
+    @Override
     @Effector(description="Updates the OSGi Service's properties, adding (and overriding) the given key-value pairs")
     public void updateServiceProperties(
             @EffectorParam(name="serviceName", description="Name of the OSGi service") String serviceName, 
@@ -202,6 +203,7 @@
         jmxHelper.operation(OSGI_COMPENDIUM, "update", serviceName, table);
     }
     
+    @Override
     @Effector(description="Updates the OSGi Service's properties, adding (and overriding) the given key-value pairs")
     public void installFeature(
             @EffectorParam(name="featureName", description="Name of the feature - see org.apache.karaf:type=features#installFeature()") final String featureName) throws Exception {
@@ -212,6 +214,7 @@
                 .limitIterationsTo(40)
                 .every(500, TimeUnit.MILLISECONDS)
                 .until(new Callable<Boolean>() {
+                        @Override
                         public Boolean call() {
                             jmxHelper.operation(String.format(KARAF_FEATURES, getConfig(KARAF_NAME.getConfigKey())), "installFeature", featureName);
                             return true;
@@ -220,6 +223,7 @@
                 .run();
     }
 
+    @Override
     public Map<Long,Map<String,?>> listBundles() {
         TabularData table = (TabularData) jmxHelper.operation(OSGI_BUNDLE_STATE, "listBundles");
         Map<List<?>, Map<String, Object>> map = JmxValueFunctions.tabularDataToMapOfMaps(table);
@@ -234,6 +238,7 @@
     /**
      * throws URISyntaxException If bundle name is not a valid URI
      */
+    @Override
     @Effector(description="Deploys the given bundle, returning the bundle id - see osgi.core:type=framework#installBundle()")
     public long installBundle(
             @EffectorParam(name="bundle", description="URI of bundle to be deployed") String bundle) throws URISyntaxException {
@@ -261,6 +266,7 @@
         }
     }
 
+    @Override
     @Effector(description="Undeploys the bundle with the given id")
     public void uninstallBundle(
             @EffectorParam(name="bundleId", description="Id of the bundle") Long bundleId) {
diff --git a/software/osgi/src/test/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerTest.java b/software/osgi/src/test/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerTest.java
index e896809..af32825 100644
--- a/software/osgi/src/test/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerTest.java
+++ b/software/osgi/src/test/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainerTest.java
@@ -75,6 +75,7 @@
         EntityAsserts.assertAttributeEqualsEventually(karaf, Attributes.SERVICE_UP, false);
         
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 try {
                     Assert.assertFalse(Entities.submit(app, SshEffectorTasks.isPidRunning(pid).machine(localhost.obtain())).get());
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
index 00136b2..34cdfb2 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/dns/geoscaling/GeoscalingDnsServiceImpl.java
@@ -131,6 +131,7 @@
     }
     
     /** minimum/default TTL here is 300s = 5m */
+    @Override
     public long getTimeToLiveSeconds() { return 5*60; }
     
     @Override
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
index 94b9732..7756909 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
@@ -213,6 +213,7 @@
         return (NginxDriver) super.getDriver();
     }
 
+    @Override
     public void doExtraConfigurationDuringStart() {
         computePortsAndUrls();
         reconfigureService();
@@ -323,6 +324,7 @@
         return "Nginx";
     }
 
+    @Override
     public boolean appendSslConfig(String id,
             StringBuilder out,
             String prefix,
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
index c8f2afe..d8db037 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/UrlMappingImpl.java
@@ -166,10 +166,12 @@
         }
     }
 
+    @Override
     public Collection<String> getTargetAddresses() {
         return getAttribute(TARGET_ADDRESSES);
     }
 
+    @Override
     public ProxySslConfig getSsl() {
         return getConfig(SSL_CONFIG);
     }
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
index 99e0991..646da0c 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/JavaWebAppSoftwareProcessImpl.java
@@ -119,6 +119,7 @@
      * @param url  where to get the war, as a URL, either classpath://xxx or file:///home/xxx or http(s)...
      * @param targetName  where to tell the server to serve the WAR, see above
      */
+    @Override
     @Effector(description="Deploys the given artifact, from a source URL, to a given deployment filename/context")
     public void deploy(
             @EffectorParam(name="url", description="URL of WAR file") String url, 
@@ -177,27 +178,33 @@
         sensors().set(REQUESTS_PER_SECOND_IN_WINDOW, 0D);
     }
 
+    @Override
     public boolean isHttpEnabled() {
         return WebAppServiceMethods.isProtocolEnabled(this, "HTTP");
     }
 
+    @Override
     public boolean isHttpsEnabled() {
         return WebAppServiceMethods.isProtocolEnabled(this, "HTTPS");
     }
 
+    @Override
     public Integer getHttpPort() {
         return getAttribute(HTTP_PORT);
     }
 
+    @Override
     public Integer getHttpsPort() {
         return getAttribute(HTTPS_PORT);
     }
 
+    @Override
     public String getHttpsSslKeyAlias() {
         HttpsSslConfig config = getAttribute(HTTPS_SSL_CONFIG);
         return (config == null) ? null : config.getKeyAlias();
     }
 
+    @Override
     public String getHttpsSslKeystorePassword() {
         HttpsSslConfig config = getAttribute(HTTPS_SSL_CONFIG);
         return (config == null) ? "" : config.getKeystorePassword();
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
index 65a6b4e..d450f71 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/UrlMappingTest.java
@@ -188,6 +188,7 @@
     
     private void assertExpectedTargetsEventually(final Iterable<? extends Entity> members) {
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.ONE_MINUTE), new Runnable() {
+            @Override
             public void run() {
                 Iterable<String> expectedTargets = Iterables.transform(members, new Function<Entity,String>() {
                         @Override public String apply(@Nullable Entity input) {
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
index 5ba0afd..5321c11 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
@@ -212,6 +212,7 @@
 
     private void assertNginxsResponsiveEvenutally(final Iterable<NginxController> nginxs, final String hostname, final List<String> pathsFor200) {
         Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Runnable() {
+            @Override
             public void run() {
                 for (NginxController nginx : nginxs) {
                     assertTrue(nginx.getAttribute(NginxController.SERVICE_UP));
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
index 7efea02..d94c1b2 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
@@ -115,6 +115,7 @@
         if (!url.startsWith("https://")) Assert.fail("URL should be https: "+url);
         
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 // Services are running
                 assertTrue(cluster.getAttribute(SoftwareProcess.SERVICE_UP));
@@ -172,6 +173,7 @@
         if (!url.startsWith("https://")) Assert.fail("URL should be https: "+url);
 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 // Services are running
                 assertTrue(cluster.getAttribute(SoftwareProcess.SERVICE_UP));
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
index c533b8d..4598b02 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
@@ -128,6 +128,7 @@
         
         // App-servers and nginx has started
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (Entity member : serverPool.getMembers()) {
                     assertTrue(member.getAttribute(SoftwareProcess.SERVICE_UP));
@@ -171,6 +172,7 @@
 
         // App-servers and nginx has started
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (Entity member : serverPool.getMembers()) {
                     assertTrue(member.getAttribute(SoftwareProcess.SERVICE_UP));
@@ -283,6 +285,7 @@
         app.start(ImmutableList.of(localLoc));
 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (Entity member : serverPool.getMembers()) {
                     assertHttpStatusCodeEquals(member.getAttribute(WebAppService.ROOT_URL), 200);
@@ -345,6 +348,7 @@
         final String nginxUrl = nginx.getAttribute(WebAppService.ROOT_URL);
 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (Entity member : serverPool.getMembers()) {
                     String jbossUrl = member.getAttribute(WebAppService.ROOT_URL);
@@ -356,6 +360,7 @@
         final String jbossUrl = Iterables.get(serverPool.getMembers(), 0).getAttribute(WebAppService.ROOT_URL);
         
         Thread t = new Thread(new Runnable() {
+            @Override
             public void run() {
                 long lastReportTime = System.currentTimeMillis();
                 int num = 0;
@@ -378,6 +383,7 @@
         t.start();
         
         Thread t2 = new Thread(new Runnable() {
+            @Override
             public void run() {
                 long lastReportTime = System.currentTimeMillis();
                 int num = 0;
@@ -416,6 +422,7 @@
         
         // App-servers and nginx has started
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertTrue(nginx.getAttribute(SoftwareProcess.SERVICE_UP));
             }});
@@ -427,6 +434,7 @@
 
         Time.sleep(Duration.ONE_SECOND);
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertTrue(nginx.getAttribute(SoftwareProcess.SERVICE_UP));
             }});
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
index d710c26..761e261 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
@@ -228,6 +228,7 @@
 
         // Expect continually to have same nginx members; should not lose them temporarily!
         Asserts.succeedsContinually(new Runnable() {
+            @Override
             public void run() {
                 Map<Entity, String> newNginxMemebers = newNginx.getAttribute(NginxController.SERVER_POOL_TARGETS);
                 assertEquals(newNginxMemebers.keySet(), ImmutableSet.of(newServer));
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
index 9f40dd0..9b325f4 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
@@ -157,6 +157,7 @@
         // Confirm routes requests to the correct cluster
         // Do more than one request for each in-case just lucky with round-robin...
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 //cluster 0
                 for (int i = 0; i < 2; i++) {
@@ -230,6 +231,7 @@
         // Confirm routes requests to the correct cluster
         // Do more than one request for each in-case just lucky with round-robin...
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (int i = 0; i < 2; i++) {
                     HttpTestUtils.assertContentContainsText("http://localhost:"+port+"/atC0", "Hello");
@@ -301,6 +303,7 @@
         
         // check nginx forwards localhost1 to c1, and localhost to core group 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 HttpTestUtils.assertContentContainsText("http://localhost1:"+port+"/hello-world", "Hello");
                 HttpTestUtils.assertHttpStatusCodeEquals("http://localhost1:"+port+"", 404);
@@ -333,6 +336,7 @@
         
         // Confirm routes requests to the correct cluster
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 // health check
                 HttpTestUtils.assertContentContainsText("http://localhost1:"+port+"", "Hello");
@@ -382,6 +386,7 @@
         
         // Wait for app-server to be responsive, and url-mapping to update its TARGET_ADDRESSES (through async subscription)
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 // Entities.dumpInfo(app);
                 assertEquals(u1.getAttribute(UrlMapping.TARGET_ADDRESSES).size(), 1);
@@ -401,6 +406,7 @@
         // Also wait for TARGET_ADDRESSES to update
         assertAppServerRespondsEventually(c1jboss2);
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertEquals(u1.getAttribute(UrlMapping.TARGET_ADDRESSES).size(), 2);
             }});
@@ -410,6 +416,7 @@
         //      This assertion isn't good enough to tell if it's been deployed.
         final String c1jboss2addr = c1jboss2.getAttribute(Attributes.HOSTNAME)+":"+c1jboss2.getAttribute(Attributes.HTTP_PORT);
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 String conf = nginx.getConfigFile();
                 assertTrue(conf.contains(c1jboss2addr), "could not find "+c1jboss2addr+" in:\n"+conf);
@@ -452,6 +459,7 @@
         // Confirm routes requests to the correct cluster
         // Do more than one request for each in-case just lucky with round-robin...
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 for (int i = 0; i < 2; i++) {
                     HttpTestUtils.assertContentContainsText("http://localhost:"+port+"/atC0/", "Hello");
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
index f950ca4..b70f290 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
@@ -98,6 +98,7 @@
         app.start(ImmutableList.of(loc));
         
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 // Nginx URL is available
                 MachineLocation machine = Machines.findUniqueMachineLocation(nginx.getLocations()).get();
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
index a6c9b2f..ee38b3c 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
@@ -258,6 +258,7 @@
         }
         
         Asserts.succeedsEventually(MutableMap.of("timeout", 20*1000), new Runnable() {
+            @Override
             public void run() {
                 Integer requestCount = entity.getAttribute(WebAppService.REQUEST_COUNT);
                 Integer errorCount = entity.getAttribute(WebAppService.ERROR_COUNT);
@@ -289,6 +290,7 @@
             // reqs/sec initially zero
             log.info("Waiting for initial avg-requests to be zero...");
             Asserts.succeedsEventually(MutableMap.of("timeout", 20*1000), new Runnable() {
+                @Override
                 public void run() {
                     Double activityValue = entity.getAttribute(WebAppService.REQUESTS_PER_SECOND_IN_WINDOW);
                     assertNotNull(activityValue, "activity not set yet "+activityValue+")");
@@ -297,6 +299,7 @@
             
             // apply workload on 1 per sec; reqs/sec should update
             Asserts.succeedsEventually(MutableMap.of("timeout", 30*1000), new Callable<Void>() {
+                @Override
                 public Void call() throws Exception {
                     String url = entity.getAttribute(WebAppService.ROOT_URL) + "does_not_exist";
                     final int desiredMsgsPerSec = 10;
@@ -315,6 +318,7 @@
                     }
     
                     Asserts.succeedsEventually(MutableMap.of("timeout", 4000), new Runnable() {
+                        @Override
                         public void run() {
                             Double avgReqs = entity.getAttribute(WebAppService.REQUESTS_PER_SECOND_IN_WINDOW);
                             Integer requestCount = entity.getAttribute(WebAppService.REQUEST_COUNT);
@@ -332,6 +336,7 @@
             Thread.sleep(WebAppServiceMethods.DEFAULT_WINDOW_DURATION.toMilliseconds());
             
             Asserts.succeedsEventually(MutableMap.of("timeout", 10*1000), new Runnable() {
+                @Override
                 public void run() {
                     Double avgReqs = entity.getAttribute(WebAppService.REQUESTS_PER_SECOND_IN_WINDOW);
                     assertNotNull(avgReqs);
@@ -478,6 +483,7 @@
         
         //tomcat may need a while to unpack everything
         Asserts.succeedsEventually(MutableMap.of("timeout", 60*1000), new Runnable() {
+            @Override
             public void run() {
                 // TODO get this URL from a WAR file entity
                 HttpTestUtils.assertHttpStatusCodeEquals(Urls.mergePaths(entity.getAttribute(WebAppService.ROOT_URL), urlSubPathToPageToQuery), 200);
@@ -499,6 +505,7 @@
         Entities.start(entity.getApplication(), ImmutableList.of(loc));
 
         Asserts.succeedsEventually(MutableMap.of("timeout", 60*1000), new Runnable() {
+            @Override
             public void run() {
                 // TODO get this URL from a WAR file entity
                 HttpTestUtils.assertHttpStatusCodeEquals(Urls.mergePaths(entity.getAttribute(WebAppService.ROOT_URL), urlSubPathToWebApp, urlSubPathToPageToQuery), 200);
@@ -519,6 +526,7 @@
         // Test deploying
         entity.deploy(resource.toString(), "myartifactname.war");
         Asserts.succeedsEventually(MutableMap.of("timeout", 60*1000), new Runnable() {
+            @Override
             public void run() {
                 // TODO get this URL from a WAR file entity
                 HttpTestUtils.assertHttpStatusCodeEquals(Urls.mergePaths(entity.getAttribute(WebAppService.ROOT_URL), "myartifactname/", urlSubPathToPageToQuery), 200);
@@ -528,6 +536,7 @@
         // And undeploying
         entity.undeploy("/myartifactname");
         Asserts.succeedsEventually(MutableMap.of("timeout", 60*1000), new Runnable() {
+            @Override
             public void run() {
                 // TODO get this URL from a WAR file entity
                 HttpTestUtils.assertHttpStatusCodeEquals(Urls.mergePaths(entity.getAttribute(WebAppService.ROOT_URL), "myartifactname", urlSubPathToPageToQuery), 404);
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
index 0e134b3..87eb5e5 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
@@ -86,6 +86,7 @@
         HttpTestUtils.assertUrlUnreachable(httpsUrl);
 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertNotNull(server.getAttribute(JBoss7Server.REQUEST_COUNT));
                 assertNotNull(server.getAttribute(JBoss7Server.ERROR_COUNT));
@@ -159,6 +160,7 @@
         //HttpTestUtils.assertContentContainsText(httpsUrl, "Hello");
         
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertNotNull(server.getAttribute(JBoss7Server.REQUEST_COUNT));
                 assertNotNull(server.getAttribute(JBoss7Server.ERROR_COUNT));
@@ -178,6 +180,7 @@
         app.start(ImmutableList.of(localhostProvisioningLocation));
 
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertNotNull(serverA.getAttribute(JBoss7Server.BYTES_SENT));
                 assertNotNull(serverB.getAttribute(JBoss7Server.BYTES_SENT));
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
index 96d86d7..31816d1 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
@@ -117,6 +117,7 @@
 
         Entities.start(entity.getApplication(), ImmutableList.of(loc));
         Asserts.succeedsEventually(MutableMap.of("timeout", 120*1000), new Runnable() {
+            @Override
             public void run() {
                 assertTrue(entity.getAttribute(Startable.SERVICE_UP));
             }});
@@ -164,6 +165,7 @@
         Entities.start(entity.getApplication(), ImmutableList.of(loc));
 
         Asserts.succeedsEventually(MutableMap.of("timeout", Duration.minutes(1)), new Runnable() {
+            @Override
             public void run() {
                 // TODO get this URL from a web-app entity of some kind?
                 String url = Urls.mergePaths(entity.getAttribute(WebAppService.ROOT_URL), urlSubPathToWebApp, urlSubPathToPageToQuery);
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
index fee654c..bcfe11e 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
@@ -132,6 +132,7 @@
         if (shutdownPort != null) {
             boolean socketClosed = Repeater.create("Checking WebApp has shut down")
                     .repeat(new Callable<Void>() {
+                            @Override
                             public Void call() throws Exception {
                                 if (shutdownSocket.get() != null) shutdownSocket.get().close();
                                 try {
@@ -144,6 +145,7 @@
                             }})
                     .every(100, TimeUnit.MILLISECONDS)
                     .until(new Callable<Boolean>() {
+                            @Override
                             public Boolean call() {
                                 return (gotException.get() != null);
                             }})
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerDisableRetrieveUsageMetricsIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerDisableRetrieveUsageMetricsIntegrationTest.java
index 457378a..393b263 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerDisableRetrieveUsageMetricsIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerDisableRetrieveUsageMetricsIntegrationTest.java
@@ -48,6 +48,7 @@
 
         // tc2 uses defaults, so will include usage metrics
         Asserts.succeedsEventually(new Runnable() {
+            @Override
             public void run() {
                 assertNotNull(tc2.getAttribute(TomcatServer.CONNECTOR_STATUS));
                 assertNotNull(tc2.getAttribute(TomcatServer.ERROR_COUNT));
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerWebAppFixtureIntegrationTest.java
index 1f86106..ac8e1e8 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServerWebAppFixtureIntegrationTest.java
@@ -119,6 +119,7 @@
         if (shutdownPort != null) {
             boolean socketClosed = Repeater.create("Checking WebApp has shut down")
                     .repeat(new Callable<Void>() {
+                            @Override
                             public Void call() throws Exception {
                                 if (shutdownSocket.get() != null) shutdownSocket.get().close();
                                 try {
@@ -131,6 +132,7 @@
                             }})
                     .every(100, TimeUnit.MILLISECONDS)
                     .until(new Callable<Boolean>() {
+                            @Override
                             public Boolean call() {
                                 return (gotException.get() != null);
                             }})