SoftwareProcess exposes LifecycleEffectorTasks implementation as config
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0576be63 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0576be63 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0576be63 Branch: refs/heads/master Commit: 0576be63535d83e31d49d84fde1997b70215ff20 Parents: b2d3f33 Author: Sam Corbett <[email protected]> Authored: Thu Jul 9 14:23:51 2015 +0100 Committer: Sam Corbett <[email protected]> Committed: Fri Jul 10 10:33:48 2015 +0100 ---------------------------------------------------------------------- .../brooklyn/entity/basic/SoftwareProcess.java | 17 ++++++-- .../entity/basic/SoftwareProcessImpl.java | 17 ++++---- .../test/entity/TestJavaWebAppEntity.java | 41 ++++++++++++++++++++ .../test/entity/TestJavaWebAppEntityImpl.java | 35 +---------------- 4 files changed, 65 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0576be63/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java index 75b3573..1de84de 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java +++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java @@ -214,7 +214,16 @@ public interface SoftwareProcess extends Entity, Startable { "several others. Set to null or to 0 to disable any delay.", Duration.TEN_SECONDS); - /** controls the behavior when starting (stop, restart) {@link Startable} children as part of the start (stop, restart) effector on this entity + /** + * Sets the object that manages the sequence of calls of the entity's driver. + */ + @Beta + @SetFromFlag("lifecycleEffectorTasks") + ConfigKey<SoftwareProcessDriverLifecycleEffectorTasks> LIFECYCLE_EFFECTOR_TASKS = ConfigKeys.newConfigKey(SoftwareProcessDriverLifecycleEffectorTasks.class, + "softwareProcess.lifecycleTasks", "An object that handles lifecycle of an entity's associated machine.", + new SoftwareProcessDriverLifecycleEffectorTasks()); + + /** Controls the behavior when starting (stop, restart) {@link Startable} children as part of the start (stop, restart) effector on this entity * <p> * (NB: restarts are currently not propagated to children in the default {@link SoftwareProcess} * due to the various semantics which may be desired; this may change, but if entities have specific requirements for restart, @@ -258,7 +267,9 @@ public interface SoftwareProcess extends Entity, Startable { } @SetFromFlag("childStartMode") - ConfigKey<ChildStartableMode> CHILDREN_STARTABLE_MODE = ConfigKeys.newConfigKey(ChildStartableMode.class, "children.startable.mode"); + ConfigKey<ChildStartableMode> CHILDREN_STARTABLE_MODE = ConfigKeys.newConfigKey(ChildStartableMode.class, + "children.startable.mode", "Controls behaviour when starting Startable children as part of this entity's lifecycle.", + ChildStartableMode.NONE); @SuppressWarnings("rawtypes") AttributeSensor<MachineProvisioningLocation> PROVISIONING_LOCATION = Sensors.newSensor( @@ -301,7 +312,7 @@ public interface SoftwareProcess extends Entity, Startable { @Beta /** @since 0.7.0 semantics of parameters to restart being explored */ public static final ConfigKey<StopMode> STOP_PROCESS_MODE = ConfigKeys.newConfigKey(StopMode.class, "stopProcessMode", - "When to stop the process with regard to the entity state" + + "When to stop the process with regard to the entity state. " + "ALWAYS will try to stop the process even if the entity is marked as stopped, " + "IF_NOT_STOPPED stops the process only if the entity is not marked as stopped, " + "NEVER doesn't stop the process.", StopMode.IF_NOT_STOPPED); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0576be63/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java index 3d5511f..9daed4c 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java +++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java @@ -85,9 +85,6 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft /** @see #connectServiceUpIsRunning() */ private volatile FunctionFeed serviceProcessIsRunning; - private static final SoftwareProcessDriverLifecycleEffectorTasks LIFECYCLE_TASKS = - new SoftwareProcessDriverLifecycleEffectorTasks(); - protected boolean connectedSensors = false; public SoftwareProcessImpl() { @@ -129,7 +126,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft @Override public void init() { super.init(); - LIFECYCLE_TASKS.attachLifecycleEffectors(this); + getLifecycleEffectorTasks().attachLifecycleEffectors(this); } @Override @@ -442,7 +439,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft /** returns the ports that this entity wants to use; * default implementation returns {@link SoftwareProcess#REQUIRED_OPEN_LOGIN_PORTS} plus first value - * for each {@link PortAttributeSensorAndConfigKey} config key {@link PortRange} + * for each {@link brooklyn.event.basic.PortAttributeSensorAndConfigKey} config key {@link PortRange} * plus any ports defined with a config keys ending in {@code .port}. */ protected Collection<Integer> getRequiredOpenPorts() { @@ -614,7 +611,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft */ @Deprecated protected final void doStart(Collection<? extends Location> locations) { - LIFECYCLE_TASKS.start(locations); + getLifecycleEffectorTasks().start(locations); } /** @@ -624,7 +621,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft */ @Deprecated protected final void doStop() { - LIFECYCLE_TASKS.stop(); + getLifecycleEffectorTasks().stop(); } /** @@ -634,7 +631,7 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft */ @Deprecated protected final void doRestart(ConfigBag parameters) { - LIFECYCLE_TASKS.restart(parameters); + getLifecycleEffectorTasks().restart(parameters); } @Deprecated /** @deprecated since 0.7.0 see {@link #doRestart(ConfigBag)} */ @@ -642,4 +639,8 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements Soft doRestart(ConfigBag.EMPTY); } + protected SoftwareProcessDriverLifecycleEffectorTasks getLifecycleEffectorTasks() { + return getConfig(LIFECYCLE_EFFECTOR_TASKS); + } + } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0576be63/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java index 8710d0b..003d81c 100644 --- a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java +++ b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntity.java @@ -18,9 +18,20 @@ */ package brooklyn.test.entity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import brooklyn.config.ConfigKey; +import brooklyn.entity.basic.Attributes; +import brooklyn.entity.basic.ConfigKeys; +import brooklyn.entity.basic.Lifecycle; +import brooklyn.entity.basic.ServiceStateLogic; +import brooklyn.entity.basic.SoftwareProcess; +import brooklyn.entity.basic.SoftwareProcessDriverLifecycleEffectorTasks; import brooklyn.entity.java.VanillaJavaApp; import brooklyn.entity.proxying.ImplementedBy; import brooklyn.entity.webapp.WebAppService; +import brooklyn.location.Location; /** * Mock web application server entity for testing. @@ -28,8 +39,38 @@ import brooklyn.entity.webapp.WebAppService; @ImplementedBy(TestJavaWebAppEntityImpl.class) public interface TestJavaWebAppEntity extends VanillaJavaApp, WebAppService { + /** + * Injects the test entity's customised lifecycle tasks. + */ + ConfigKey<SoftwareProcessDriverLifecycleEffectorTasks> LIFECYCLE_EFFECTOR_TASKS = ConfigKeys.newConfigKeyWithDefault( + SoftwareProcess.LIFECYCLE_EFFECTOR_TASKS, + new TestJavaWebAppEntityLifecycleTasks()); + void spoofRequest(); int getA(); int getB(); int getC(); + + static class TestJavaWebAppEntityLifecycleTasks extends SoftwareProcessDriverLifecycleEffectorTasks { + private static final Logger LOG = LoggerFactory.getLogger(TestJavaWebAppEntityLifecycleTasks.class); + + @Override + public void start(java.util.Collection<? extends Location> locations) { + ServiceStateLogic.setExpectedState(entity(), Lifecycle.STARTING); + LOG.trace("Starting {}", this); + entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, true); + entity().setAttribute(Attributes.SERVICE_UP, true); + ServiceStateLogic.setExpectedState(entity(), Lifecycle.RUNNING); + } + + @Override + public void stop() { + ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPING); + LOG.trace("Stopping {}", this); + entity().setAttribute(Attributes.SERVICE_UP, false); + entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, false); + ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPED); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0576be63/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntityImpl.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntityImpl.java b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntityImpl.java index 579763d..be7fb8a 100644 --- a/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntityImpl.java +++ b/software/webapp/src/test/java/brooklyn/test/entity/TestJavaWebAppEntityImpl.java @@ -20,23 +20,13 @@ package brooklyn.test.entity; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import brooklyn.entity.Entity; -import brooklyn.entity.basic.Attributes; -import brooklyn.entity.basic.Lifecycle; -import brooklyn.entity.basic.ServiceStateLogic; -import brooklyn.entity.basic.SoftwareProcessDriverLifecycleEffectorTasks; import brooklyn.entity.java.VanillaJavaAppImpl; import brooklyn.entity.webapp.WebAppServiceConstants; -import brooklyn.location.Location; import brooklyn.util.flags.SetFromFlag; public class TestJavaWebAppEntityImpl extends VanillaJavaAppImpl implements TestJavaWebAppEntity { - private static final Logger LOG = LoggerFactory.getLogger(TestJavaWebAppEntity.class); - @SetFromFlag public int a; @SetFromFlag public int b; @SetFromFlag public int c; @@ -46,30 +36,6 @@ public class TestJavaWebAppEntityImpl extends VanillaJavaAppImpl implements Test // constructor required for use in DynamicCluster.factory public TestJavaWebAppEntityImpl(@SuppressWarnings("rawtypes") Map flags, Entity parent) { super(flags, parent); } - private static final SoftwareProcessDriverLifecycleEffectorTasks LIFECYCLE_TASKS = - new SoftwareProcessDriverLifecycleEffectorTasks() { - public void start(java.util.Collection<? extends Location> locations) { - ServiceStateLogic.setExpectedState(entity(), Lifecycle.STARTING); - LOG.trace("Starting {}", this); - entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, true); - entity().setAttribute(Attributes.SERVICE_UP, true); - ServiceStateLogic.setExpectedState(entity(), Lifecycle.RUNNING); - } - public void stop() { - ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPING); - LOG.trace("Stopping {}", this); - entity().setAttribute(Attributes.SERVICE_UP, false); - entity().setAttribute(SERVICE_PROCESS_IS_RUNNING, false); - ServiceStateLogic.setExpectedState(entity(), Lifecycle.STOPPED); - } - }; - - @Override - public void init() { - super.init(); - LIFECYCLE_TASKS.attachLifecycleEffectors(this); - } - @Override public synchronized void spoofRequest() { Integer rc = getAttribute(WebAppServiceConstants.REQUEST_COUNT); @@ -91,4 +57,5 @@ public class TestJavaWebAppEntityImpl extends VanillaJavaAppImpl implements Test public int getC() { return c; } + }
