Adds ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC

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

Branch: refs/heads/0.6.0
Commit: 95cec8abca067b0f1db632889c17b9d4521cc012
Parents: b6eb7c0
Author: Aled Sage <[email protected]>
Authored: Wed Nov 6 15:23:26 2013 +0000
Committer: Aled Sage <[email protected]>
Committed: Wed Nov 6 15:30:05 2013 +0000

----------------------------------------------------------------------
 .../webapp/ControlledDynamicWebAppCluster.java  |  8 ++++--
 .../ControlledDynamicWebAppClusterImpl.java     | 24 ++++++++++++----
 .../ControlledDynamicWebAppClusterTest.java     | 30 +++++++++++++++++++-
 3 files changed, 54 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
 
b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
index dd1990f..263dcbc 100644
--- 
a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
+++ 
b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
@@ -80,11 +80,11 @@ public interface ControlledDynamicWebAppCluster extends 
Entity, Startable, Resiz
 
     @SetFromFlag("controller")
     public static BasicAttributeSensorAndConfigKey<LoadBalancer> CONTROLLER = 
new BasicAttributeSensorAndConfigKey<LoadBalancer>(
-        LoadBalancer.class, "controlleddynamicweballcluster.controller", 
"Controller for the cluster; if null a default will created");
+        LoadBalancer.class, "controlleddynamicweballcluster.controller", 
"Controller for the cluster; if null a default will created (using 
controllerSpec)");
 
     @SetFromFlag("controllerSpec")
     public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends 
LoadBalancer>> CONTROLLER_SPEC = new BasicAttributeSensorAndConfigKey(
-            EntitySpec.class, "controlleddynamicweballcluster.controllerSpec", 
"Spec for creating the cluster (if one not supplied explicitly); if null an 
NGINX instance will be created");
+            EntitySpec.class, "controlleddynamicweballcluster.controllerSpec", 
"Spec for creating the controller (if one not supplied explicitly); if null an 
NGINX instance will be created");
 
     /** factory (or closure) to create the web server, given flags */
     @SetFromFlag("factory")
@@ -96,6 +96,10 @@ public interface ControlledDynamicWebAppCluster extends 
Entity, Startable, Resiz
     public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends 
WebAppService>> MEMBER_SPEC = new BasicAttributeSensorAndConfigKey(
             EntitySpec.class, DynamicCluster.MEMBER_SPEC.getName(), "Spec for 
web server entiites to be created");
 
+    @SetFromFlag("webClusterSpec")
+    public static BasicAttributeSensorAndConfigKey<EntitySpec<? extends 
DynamicWebAppCluster>> WEB_CLUSTER_SPEC = new BasicAttributeSensorAndConfigKey(
+            EntitySpec.class, "controlleddynamicweballcluster.webClusterSpec", 
"Spec for creating the cluster; if null a DynamicWebAppCluster will be 
created");
+
     public static AttributeSensor<DynamicWebAppCluster> CLUSTER = new 
BasicAttributeSensor<DynamicWebAppCluster>(
             DynamicWebAppCluster.class, 
"controlleddynamicweballcluster.cluster", "Underlying web-app cluster");
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
 
b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
index dcb5f32..c177a34 100644
--- 
a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
+++ 
b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterImpl.java
@@ -57,6 +57,7 @@ public class ControlledDynamicWebAppClusterImpl extends 
AbstractEntity implement
         ConfigToAttributes.apply(this, MEMBER_SPEC);
         ConfigToAttributes.apply(this, CONTROLLER);
         ConfigToAttributes.apply(this, CONTROLLER_SPEC);
+        ConfigToAttributes.apply(this, WEB_CLUSTER_SPEC);
         
         ConfigurableEntityFactory<? extends WebAppService> webServerFactory = 
getAttribute(FACTORY);
         EntitySpec<? extends WebAppService> webServerSpec = 
getAttribute(MEMBER_SPEC);
@@ -68,14 +69,27 @@ public class ControlledDynamicWebAppClusterImpl extends 
AbstractEntity implement
         
         log.debug("creating cluster child for {}", this);
         // Note relies on initial_size being inherited by 
DynamicWebAppCluster, because key id is identical
-        Map<String,Object> flags;
+        EntitySpec<? extends DynamicWebAppCluster> webClusterSpec = 
getAttribute(WEB_CLUSTER_SPEC);
+        Map<String,Object> webClusterFlags;
         if (webServerSpec != null) {
-            flags = MutableMap.<String,Object>of("memberSpec", webServerSpec);
+            webClusterFlags = MutableMap.<String,Object>of("memberSpec", 
webServerSpec);
         } else {
-            flags = MutableMap.<String,Object>of("factory", webServerFactory);
+            webClusterFlags = MutableMap.<String,Object>of("factory", 
webServerFactory);
         }
-        DynamicWebAppCluster cluster = 
addChild(EntitySpec.create(DynamicWebAppCluster.class)
-                .configure(flags));
+        if (webClusterSpec == null) {
+            log.debug("creating default web cluster spec for {}", this);
+            webClusterSpec = EntitySpec.create(DynamicWebAppCluster.class);
+        }
+        boolean hasMemberSpec = 
webClusterSpec.getConfig().containsKey(DynamicWebAppCluster.MEMBER_SPEC) || 
webClusterSpec.getFlags().containsKey("memberSpec");
+        boolean hasMemberFactory = 
webClusterSpec.getConfig().containsKey(DynamicWebAppCluster.FACTORY) || 
webClusterSpec.getFlags().containsKey("factory");
+        if (!(hasMemberSpec || hasMemberFactory)) {
+            webClusterSpec.configure(webClusterFlags);
+        } else {
+            log.warn("In {}, not setting cluster's {} because already set on 
webClusterSpec", new Object[] {this, webClusterFlags.keySet()});
+        }
+        setAttribute(WEB_CLUSTER_SPEC, webClusterSpec);
+        
+        DynamicWebAppCluster cluster = addChild(webClusterSpec);
         if (Entities.isManaged(this)) Entities.manage(cluster);
         setAttribute(CLUSTER, cluster);
         

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95cec8ab/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
index 7a5a9ee..8128ccd 100644
--- 
a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
@@ -15,10 +15,10 @@ import org.testng.annotations.Test;
 import brooklyn.entity.basic.ApplicationBuilder;
 import brooklyn.entity.basic.BasicConfigurableEntityFactory;
 import brooklyn.entity.basic.Entities;
-import brooklyn.entity.proxy.AbstractController;
 import brooklyn.entity.proxy.LoadBalancer;
 import brooklyn.entity.proxy.nginx.NginxController;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.jboss.JBoss7Server;
 import brooklyn.entity.webapp.jboss.JBoss7ServerFactory;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.EntityTestUtils;
@@ -136,4 +136,32 @@ public class ControlledDynamicWebAppClusterTest {
         
EntityTestUtils.assertAttributeEqualsEventually(MutableMap.of("timeout", 
TIMEOUT_MS), cluster, ControlledDynamicWebAppCluster.SERVICE_UP, 
expectedServiceUp);
     }
     
+    @Test(groups="Integration")
+    public void testUsesCustomWebClusterSpec() {
+        ControlledDynamicWebAppCluster cluster = 
app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class)
+                .configure("initialSize", 0)
+                .configure(ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC, 
EntitySpec.create(DynamicWebAppCluster.class)
+                        .displayName("mydisplayname")));
+        app.start(locs);
+
+        assertEquals(cluster.getCluster().getDisplayName(), "mydisplayname");
+    }
+    
+    @Test(groups="Integration")
+    public void testCustomWebClusterSpecGetsMemberSpec() {
+        ControlledDynamicWebAppCluster cluster = 
app.createAndManageChild(EntitySpec.create(ControlledDynamicWebAppCluster.class)
+                .configure("initialSize", 1)
+                .configure(ControlledDynamicWebAppCluster.MEMBER_SPEC, 
EntitySpec.create(JBoss7Server.class)
+                        .configure(JBoss7Server.ROOT_WAR, warUrl.toString()))
+                .configure(ControlledDynamicWebAppCluster.WEB_CLUSTER_SPEC, 
EntitySpec.create(DynamicWebAppCluster.class)
+                        .displayName("mydisplayname")));
+        app.start(locs);
+
+        String url = 
cluster.getController().getAttribute(NginxController.ROOT_URL);
+        HttpTestUtils.assertContentEventuallyContainsText(url, "Hello");
+
+        // and make sure it really was using our custom spec
+        assertEquals(cluster.getCluster().getDisplayName(), "mydisplayname");
+
+    }
 }

Reply via email to