Cassandra: effector impl not anonymous inner class Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a5c4b166 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a5c4b166 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a5c4b166
Branch: refs/heads/master Commit: a5c4b166ca6638ad8035e52d2d41e12ba9a205cd Parents: bc5c9e4 Author: Aled Sage <[email protected]> Authored: Tue Sep 15 09:20:33 2015 +0100 Committer: Aled Sage <[email protected]> Committed: Tue Sep 15 09:20:33 2015 +0100 ---------------------------------------------------------------------- .../nosql/cassandra/CassandraNodeImpl.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a5c4b166/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java b/software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeImpl.java index 578fa6b..dddc1cd 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 @@ -97,12 +97,15 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN public void init() { super.init(); - getMutableEntityType().addEffector(EXECUTE_SCRIPT, new EffectorBody<String>() { + // TODO PERSISTENCE WORKAROUND kept anonymous class in case referenced in persisted state + new EffectorBody<String>() { @Override public String call(ConfigBag parameters) { return executeScript((String)parameters.getStringKey("commands")); } - }); + }; + + getMutableEntityType().addEffector(EXECUTE_SCRIPT, new ExecuteScriptEffectorBody(this)); Entities.checkRequiredUrl(this, getCassandraConfigTemplateUrl()); Entities.getRequiredUrlConfig(this, CASSANDRA_RACKDC_CONFIG_TEMPLATE_URL); @@ -110,6 +113,18 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN connectEnrichers(); } + private static class ExecuteScriptEffectorBody extends EffectorBody<String> { + private final CassandraNode entity; + + public ExecuteScriptEffectorBody(CassandraNode entity) { + this.entity = entity; + } + @Override + public String call(ConfigBag parameters) { + return entity.executeScript((String)parameters.getStringKey("commands")); + } + } + /** * Some clouds (e.g. Rackspace) give us VMs that have two nics: one for private and one for public. * If the private IP is used then it doesn't work, even for a cluster purely internal to Rackspace! @@ -246,6 +261,7 @@ public class CassandraNodeImpl extends SoftwareProcessImpl implements CassandraN String subnetAddress = getAttribute(CassandraNode.SUBNET_ADDRESS); return Strings.isNonBlank(subnetAddress) ? subnetAddress : getAttribute(CassandraNode.ADDRESS); } + @Override public String getBroadcastAddress() { String sensorName = getConfig(BROADCAST_ADDRESS_SENSOR); if (Strings.isNonBlank(sensorName))
