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 2016/02/01 18:46:04 UTC

[01/50] brooklyn-library git commit: support passphrases set on localhost, using brooklyn.localhost.privateKeyPassphrase and support named locations, as described in NamedLocationResolver

Repository: brooklyn-library
Updated Branches:
  refs/heads/0.4.0 [created] 4df48da39


support passphrases set on localhost, using brooklyn.localhost.privateKeyPassphrase
and support named locations, as described in NamedLocationResolver


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

Branch: refs/heads/0.4.0
Commit: 4474ed54c5a3a897b283c79c70f6ca9d560b48df
Parents: cc497c0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Sep 18 12:16:27 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Sep 18 12:16:27 2012 +0100

----------------------------------------------------------------------
 examples/simple-web-cluster/src/main/resources/log4j.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4474ed54/examples/simple-web-cluster/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/resources/log4j.properties b/examples/simple-web-cluster/src/main/resources/log4j.properties
index a991715..d977696 100644
--- a/examples/simple-web-cluster/src/main/resources/log4j.properties
+++ b/examples/simple-web-cluster/src/main/resources/log4j.properties
@@ -34,5 +34,5 @@ log4j.logger.brooklyn.SSH=DEBUG
 log4j.logger.jclouds=DEBUG
 log4j.logger.org.jclouds=DEBUG
 log4j.logger.org.apache.whirr=DEBUG
-log4j.logger.brooklyn.location.basic.jclouds=DEBUG
-log4j.logger.brooklyn.util.internal.ssh=DEBUG
\ No newline at end of file
+log4j.logger.brooklyn.location=DEBUG
+log4j.logger.brooklyn.entity=DEBUG


[38/50] brooklyn-library git commit: get the appropriate http/https port for downstream address in UrlMapping

Posted by he...@apache.org.
get the appropriate http/https port for downstream address in UrlMapping


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

Branch: refs/heads/0.4.0
Commit: 636afdc6f0e2e9e351c94455748d0599a814aeb8
Parents: 8be0a5e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Oct 10 00:48:26 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Oct 10 00:48:26 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/nginx/UrlMapping.groovy        | 27 ++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/636afdc6/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.groovy
index aec8aae..82de0b0 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.groovy
@@ -10,6 +10,7 @@ import brooklyn.entity.proxy.AbstractController
 import brooklyn.entity.proxy.ProxySslConfig
 import brooklyn.entity.trait.Startable
 import brooklyn.entity.webapp.WebAppService
+import brooklyn.entity.webapp.WebAppServiceConstants;
 import brooklyn.event.SensorEvent
 import brooklyn.event.SensorEventListener
 import brooklyn.event.basic.BasicAttributeSensor
@@ -109,11 +110,33 @@ public class UrlMapping extends AbstractGroup {
     /** defines how address string, ie  hostname:port, is constructed from a given entity.
      * returns null if not possible.
      * <p>
-     * the default is to look at HOSTNAME and HTTP_PORT attribute sensors. this method is suitable (intended) for overriding.
+     * the default is to look at HOSTNAME and HTTPS_PORT or HTTP_PORT attribute sensors (depending on SSL_CONFIG being set with targetIsSsl).
+     * <p> 
+     * this method is suitable (intended) for overriding if needed.
      */
     protected String getAddressOfEntity(Entity s) {
         def h = s.getAttribute(Attributes.HOSTNAME);
-        def p = s.getAttribute(Attributes.HTTP_PORT);
+        
+        def p = null;
+        def proto = s.getAttribute(WebAppServiceConstants.ENABLED_PROTOCOLS);
+        ProxySslConfig sslConfig = getConfig(SSL_CONFIG);
+        if (sslConfig && sslConfig.targetIsSsl) {
+            // use ssl
+            if (proto && proto.find({ "https".equals( ((String)it).toLowerCase()); })) {
+                // proto configured correctly
+            } else {
+                // proto not defined; use https anyway, but it might fail
+                log.warn("Misconfiguration for "+this+": ENABLED_PROTOCOLS='"+proto+"' for "+s+" but sslConfig="+sslConfig);
+            }
+            p = s.getAttribute(Attributes.HTTPS_PORT);
+            if (!p)
+                log.warn("Misconfiguration for "+this+": sslConfig="+sslConfig+" but no HTTPS_PORT on "+s);
+        }
+        if (!p) {
+            // default to http
+            p = s.getAttribute(Attributes.HTTP_PORT);
+        }
+        
         if (h && p) return ""+h+":"+p;
         log.error("Unable to construct hostname:port representation for "+s+"; skipping in "+this);
         return null;


[35/50] brooklyn-library git commit: Merge pull request #346 from pveentjer/tomcat7installfix

Posted by he...@apache.org.
Merge pull request #346 from pveentjer/tomcat7installfix

Fixes an issue with the Tomcat7SshDriver where a bad tar install command...

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

Branch: refs/heads/0.4.0
Commit: 47eac159baa440f9d7e13a65fa1dd450c9f3275f
Parents: 8be0a5e 425daf7
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 9 06:57:54 2012 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 9 06:57:54 2012 -0700

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/47eac159/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
----------------------------------------------------------------------


[33/50] brooklyn-library git commit: Merge pull request #338 from dralves/jcloudsos-and-64bitsupport

Posted by he...@apache.org.
Merge pull request #338 from dralves/jcloudsos-and-64bitsupport

64 bit support and fetching jclouds details

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

Branch: refs/heads/0.4.0
Commit: 8be0a5e11a5872575785c4db6cf32b3207760674
Parents: c8d367d a54a476
Author: ahgittin <al...@cloudsoftcorp.com>
Authored: Tue Oct 9 02:21:22 2012 -0700
Committer: ahgittin <al...@cloudsoftcorp.com>
Committed: Tue Oct 9 02:21:22 2012 -0700

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8be0a5e1/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------


[48/50] brooklyn-library git commit: Fix NginxController's use of LinkedHashMultimap

Posted by he...@apache.org.
Fix NginxController's use of LinkedHashMultimap

- Don't call private constructor, which has been deleted in
  guava 13.


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

Branch: refs/heads/0.4.0
Commit: 459a453dff7e1fb5352d365541f5286a23092006
Parents: ff5d3c7
Author: Aled Sage <al...@gmail.com>
Authored: Tue Nov 13 15:34:50 2012 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Jan 14 16:49:29 2013 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/nginx/NginxController.groovy   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/459a453d/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 46a93f2..76673b9 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -248,7 +248,7 @@ public class NginxController extends AbstractController {
         
         // For mapping by URL
         Iterable<UrlMapping> mappings = findUrlMappings();
-        Multimap<String, UrlMapping> mappingsByDomain = new LinkedHashMultimap<String, UrlMapping>();
+        Multimap<String, UrlMapping> mappingsByDomain = LinkedHashMultimap.create();
         for (UrlMapping mapping : mappings) {
             Collection<String> addrs = mapping.getAttribute(UrlMapping.TARGET_ADDRESSES);
             if (addrs) {


[44/50] brooklyn-library git commit: Fix KarafContainer on ec2

Posted by he...@apache.org.
Fix KarafContainer on ec2

- Removes getRequiredOpenPorts adding getConfig(RMI_PORT),
  because causes ClassCastException in JcloudsLocation.
  It was adding a PortRange to a Collection<Integer>.

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

Branch: refs/heads/0.4.0
Commit: c5fc74be4ec8c65bba2695b3bd9da983d7c7b435
Parents: 12b435f
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 12 13:12:22 2012 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 12 13:12:22 2012 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/osgi/karaf/KarafContainer.groovy     | 7 -------
 1 file changed, 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c5fc74be/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafContainer.groovy
----------------------------------------------------------------------
diff --git a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafContainer.groovy b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafContainer.groovy
index 07e8987..c4e35bf 100644
--- a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafContainer.groovy
+++ b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafContainer.groovy
@@ -114,13 +114,6 @@ public class KarafContainer extends SoftwareProcessEntity implements UsesJava, U
     }
 
     @Override
-    protected Collection<Integer> getRequiredOpenPorts() {
-        Collection<Integer> result = super.getRequiredOpenPorts()
-        result.add(getConfig(RMI_PORT.configKey))
-        return result
-    }
-
-    @Override
     public void postStart() {
 		super.postStart()
         deployConfiguration(getConfig(NAMED_PROPERTY_FILES))


[39/50] brooklyn-library git commit: Merge pull request #349 from ahgittin/fix/https-urlmapping-target

Posted by he...@apache.org.
Merge pull request #349 from ahgittin/fix/https-urlmapping-target

get the appropriate http/https port for downstream address in UrlMapping

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

Branch: refs/heads/0.4.0
Commit: 96e4ab4ae7158a961dc3e3289439b90e77dd2d6a
Parents: 5c18a34 636afdc
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 10 04:30:11 2012 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 10 04:30:11 2012 -0700

----------------------------------------------------------------------
 .../entity/proxy/nginx/UrlMapping.groovy        | 27 ++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[21/50] brooklyn-library git commit: https support for java web-apps

Posted by he...@apache.org.
https support for java web-apps

- adds config keys for https-port and for enabled-protocols
- adds getHttpsPort and getEnabledProtocols to JavaWebAppDriver


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

Branch: refs/heads/0.4.0
Commit: 5b528bf4f4cd3f486fee1cd97fbc220920806cd6
Parents: 4e8721c
Author: Aled Sage <al...@gmail.com>
Authored: Thu Oct 4 10:34:08 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Oct 5 14:00:00 2012 +0100

----------------------------------------------------------------------
 .../entity/webapp/JavaWebAppDriver.java         |  9 ++++-
 .../entity/webapp/JavaWebAppSshDriver.java      | 39 +++++++++++++++++++-
 .../entity/webapp/WebAppServiceConstants.java   | 12 ++++++
 .../entity/webapp/tomcat/TomcatServer.java      |  2 +-
 4 files changed, 57 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5b528bf4/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppDriver.java
index 87f6abb..ee58275 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppDriver.java
@@ -1,13 +1,18 @@
 package brooklyn.entity.webapp;
 
-import brooklyn.entity.java.JavaSoftwareProcessDriver;
-
 import java.io.File;
+import java.util.List;
+
+import brooklyn.entity.java.JavaSoftwareProcessDriver;
 
 public interface JavaWebAppDriver extends JavaSoftwareProcessDriver {
 
+    List<String> getEnabledProtocols();
+
     Integer getHttpPort();
 
+    Integer getHttpsPort();
+
     void deploy(File file);
 
     void deploy(File f, String targetName);

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5b528bf4/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
index 3316d06..56a43db 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
@@ -1,7 +1,9 @@
 package brooklyn.entity.webapp;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.io.File;
+import java.util.List;
 
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.java.JavaSoftwareProcessSshDriver;
@@ -17,15 +19,48 @@ public abstract class JavaWebAppSshDriver extends JavaSoftwareProcessSshDriver i
         return (JavaWebAppSoftwareProcess) super.getEntity();
     }
 
+    protected boolean isProtocolEnabled(String protocol) {
+        List<String> protocols = getEnabledProtocols();
+        for (String contender : protocols) {
+            if (protocol.toLowerCase().equals(contender.toLowerCase())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public List<String> getEnabledProtocols() {
+        return entity.getAttribute(JavaWebAppSoftwareProcess.ENABLED_PROTOCOLS);
+    }
+    
     @Override
     public Integer getHttpPort() {
         return entity.getAttribute(Attributes.HTTP_PORT);
     }
 
     @Override
+    public Integer getHttpsPort() {
+        return entity.getAttribute(Attributes.HTTPS_PORT);
+    }
+
+    protected String inferRootUrl() {
+        if (isProtocolEnabled("https")) {
+            int port = getHttpsPort();
+            checkNotNull(port, "HTTPS_PORT sensors not set; is an acceptable port available?");
+            return String.format("https://%s:%s/", getHostname(), port);
+        } else if (isProtocolEnabled("http")) {
+            int port = getHttpPort();
+            checkNotNull(port, "HTTP_PORT sensors not set; is an acceptable port available?");
+            return String.format("http://%s:%s/", getHostname(), port);
+        } else {
+            throw new IllegalStateException("HTTP and HTTPS protocols not enabled for "+entity+"; enabled protocols are "+getEnabledProtocols());
+        }
+    }
+    
+    @Override
     public void postLaunch() {
-        assert getHttpPort() != null : "HTTP_PORT sensor not set; is an acceptable port available?";
-        String rootUrl = String.format("http://%s:%s/", getHostname(), getHttpPort());
+        String rootUrl = inferRootUrl();
         entity.setAttribute(WebAppService.ROOT_URL, rootUrl);
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5b528bf4/software/webapp/src/main/java/brooklyn/entity/webapp/WebAppServiceConstants.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/WebAppServiceConstants.java b/software/webapp/src/main/java/brooklyn/entity/webapp/WebAppServiceConstants.java
index 252c164..058e08d 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/WebAppServiceConstants.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/WebAppServiceConstants.java
@@ -1,16 +1,28 @@
 package brooklyn.entity.webapp;
 
+import java.util.List;
+
 import brooklyn.config.render.RendererHints;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
 import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
 import brooklyn.util.flags.SetFromFlag;
 
+import com.google.common.collect.ImmutableList;
+
 public interface WebAppServiceConstants {
 
     @SetFromFlag("httpPort")
     public static final PortAttributeSensorAndConfigKey HTTP_PORT = Attributes.HTTP_PORT;
 
+    @SetFromFlag("httpsPort")
+    public static final PortAttributeSensorAndConfigKey HTTPS_PORT = Attributes.HTTPS_PORT;
+
+    @SetFromFlag("enabledProtocols")
+    public static final BasicAttributeSensorAndConfigKey<List<String>> ENABLED_PROTOCOLS = new BasicAttributeSensorAndConfigKey(
+            List.class, "webapp.enabledProtocols", "List of enabled protocols (e.g. http, https)", ImmutableList.of("http"));
+
     public static final brooklyn.event.basic.BasicAttributeSensor<Integer> ERROR_COUNT =
             new brooklyn.event.basic.BasicAttributeSensor<Integer>(Integer.class, "webapp.reqs.errors", "Request errors");
     public static final BasicAttributeSensor<Integer> MAX_PROCESSING_TIME =

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5b528bf4/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
index ed71f03..ae28ca0 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -33,7 +33,7 @@ public class TomcatServer extends JavaWebAppSoftwareProcess implements JavaWebAp
 
     @SetFromFlag("version")
     public static final BasicConfigKey<String> SUGGESTED_VERSION =
-            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.29");
+            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.30");
 
     /**
      * Tomcat insists on having a port you can connect to for the sole purpose of shutting it down.


[40/50] brooklyn-library git commit: Cleanup logging

Posted by he...@apache.org.
Cleanup logging

- Don't warn about "already deployed" when setting config
  during construction (after setting owner!)
- DynamicCluster.addNode manages it immediately
- ssh logging: trace only in SshjTool and ScriptHelper;
  debug in "script runner", such as SshMachineLocation.execWithLogging
- Drop some log levels
- toStrings on LocalManagementContext and LocalSubscriptionManager
- logging subscriptions: avoid duplicate info in log message
- Repeater: avoid multiple logs when pass first time, and give
  more info about max num attempts etc


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

Branch: refs/heads/0.4.0
Commit: 50756cae1e185211ef1f55c20d5fffe5c179df01
Parents: 96e4ab4
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 10 21:33:38 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Oct 11 10:05:46 2012 +0100

----------------------------------------------------------------------
 .../src/main/java/brooklyn/entity/proxy/AbstractController.java | 2 +-
 .../java/brooklyn/entity/proxy/nginx/NginxController.groovy     | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/50756cae/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index d1e5de3..cc52e76 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -209,7 +209,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     @Override
     protected void postStart() {
         super.postStart();
-        LOG.info("Adding policy {} to {} on AbstractController.start", serverPoolMemberTrackerPolicy, this);
+        LOG.info("Adding policy {} to {}, during start", serverPoolMemberTrackerPolicy, this);
         addPolicy(serverPoolMemberTrackerPolicy);
         if (getUrl()==null) setAttribute(ROOT_URL, inferUrl());
         reset();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/50756cae/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index dc230df..46a93f2 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -20,13 +20,12 @@ import brooklyn.event.basic.BasicConfigKey
 import brooklyn.util.ResourceUtils
 import brooklyn.util.flags.SetFromFlag
 import brooklyn.util.internal.TimeExtras
+import brooklyn.util.text.Strings
 
 import com.google.common.collect.Iterables
 import com.google.common.collect.LinkedHashMultimap
 import com.google.common.collect.Multimap
 
-import brooklyn.util.text.Strings
-
 /**
  * An entity that represents an Nginx proxy (e.g. for routing requests to servers in a cluster).
  * <p>
@@ -57,7 +56,7 @@ public class NginxController extends AbstractController {
     @SetFromFlag("sticky")
     public static final BasicConfigKey<Boolean> STICKY =
         new BasicConfigKey<Boolean>(Boolean.class, "nginx.sticky", "whether to use sticky sessions", true);
-    
+
     public NginxController(Entity owner) {
         this(new LinkedHashMap(), owner);
     }


[19/50] brooklyn-library git commit: MySqlDriver dependency fixes: processed review comments

Posted by he...@apache.org.
MySqlDriver dependency fixes: processed review comments


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

Branch: refs/heads/0.4.0
Commit: eaeb54142d829abab79d03e09cc0100ecbb6f318
Parents: f88f82a
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Fri Oct 5 10:22:11 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Fri Oct 5 10:22:11 2012 +0300

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy    | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/eaeb5414/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 98d1145..3e84746 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -65,9 +65,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         String saveAs  = "${basename}.tar.gz"
         List<String> commands = new LinkedList<String>();
         commands.add(CommonCommands.INSTALL_TAR);
-        commands.add(CommonCommands.installPackage("libgcc_s.so.1"))                   ;
-        commands.add(CommonCommands.installPackage("libaio.so.1"))
-        commands.add(CommonCommands.installPackage("libncurses.so.5"))
+        commands.add(CommonCommands.installPackage(yum: "libgcc_s.so.1 libaoi.so.1 libncurses.so.5", apt: "libaoi1", null));
         commands.add("(which apt-get && "+CommonCommands.sudo("apt-get install libaio1")+") || echo skipping libaio installation");
         commands.addAll(CommonCommands.downloadUrlAs(url, getEntityVersionLabel('/'), saveAs));
         commands.add("tar xfvz ${saveAs}");


[50/50] brooklyn-library git commit: version changed to 0.4.0 for release (final)

Posted by he...@apache.org.
version changed to 0.4.0 for release (final)


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

Branch: refs/heads/0.4.0
Commit: 4df48da390e11a13b7ceffc2d2105099d78c50af
Parents: 6875ec8
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Jan 16 11:31:00 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Jan 16 11:31:00 2013 +0000

----------------------------------------------------------------------
 examples/global-web-fabric/pom.xml              | 2 +-
 examples/hadoop-and-whirr/pom.xml               | 2 +-
 examples/pom.xml                                | 2 +-
 examples/portable-cloudfoundry/pom.xml          | 2 +-
 examples/simple-messaging-pubsub/pom.xml        | 2 +-
 examples/simple-web-cluster/pom.xml             | 2 +-
 examples/webapps/hello-world-hadoop-jar/pom.xml | 2 +-
 examples/webapps/hello-world-hadoop/pom.xml     | 2 +-
 examples/webapps/hello-world-sql/pom.xml        | 2 +-
 examples/webapps/hello-world-webapp/pom.xml     | 2 +-
 examples/webapps/pom.xml                        | 2 +-
 sandbox/database/pom.xml                        | 2 +-
 sandbox/mgmt/pom.xml                            | 2 +-
 sandbox/rest/pom.xml                            | 2 +-
 sandbox/web-acceptance/pom.xml                  | 2 +-
 software/database/pom.xml                       | 2 +-
 software/messaging/pom.xml                      | 2 +-
 software/nosql/pom.xml                          | 2 +-
 software/osgi/pom.xml                           | 2 +-
 software/webapp/pom.xml                         | 2 +-
 usage/qa/pom.xml                                | 2 +-
 usage/qa/start-monitor.sh                       | 2 +-
 usage/qa/start-webcluster.sh                    | 2 +-
 23 files changed, 23 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/global-web-fabric/pom.xml
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/pom.xml b/examples/global-web-fabric/pom.xml
index 8e72d58..6e04adc 100644
--- a/examples/global-web-fabric/pom.xml
+++ b/examples/global-web-fabric/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/hadoop-and-whirr/pom.xml
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/pom.xml b/examples/hadoop-and-whirr/pom.xml
index bf8fdc1..8aca3de 100644
--- a/examples/hadoop-and-whirr/pom.xml
+++ b/examples/hadoop-and-whirr/pom.xml
@@ -8,7 +8,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index d81234a..361b5cd 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/portable-cloudfoundry/pom.xml
----------------------------------------------------------------------
diff --git a/examples/portable-cloudfoundry/pom.xml b/examples/portable-cloudfoundry/pom.xml
index f72ed6d..f12ae72 100644
--- a/examples/portable-cloudfoundry/pom.xml
+++ b/examples/portable-cloudfoundry/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/simple-messaging-pubsub/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-messaging-pubsub/pom.xml b/examples/simple-messaging-pubsub/pom.xml
index 03b5b6d..3d12a24 100644
--- a/examples/simple-messaging-pubsub/pom.xml
+++ b/examples/simple-messaging-pubsub/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/simple-web-cluster/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/pom.xml b/examples/simple-web-cluster/pom.xml
index b170bee..63c2242 100644
--- a/examples/simple-web-cluster/pom.xml
+++ b/examples/simple-web-cluster/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/webapps/hello-world-hadoop-jar/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-hadoop-jar/pom.xml b/examples/webapps/hello-world-hadoop-jar/pom.xml
index 90649f4..3d19747 100644
--- a/examples/webapps/hello-world-hadoop-jar/pom.xml
+++ b/examples/webapps/hello-world-hadoop-jar/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/webapps/hello-world-hadoop/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-hadoop/pom.xml b/examples/webapps/hello-world-hadoop/pom.xml
index 94adf50..b890519 100644
--- a/examples/webapps/hello-world-hadoop/pom.xml
+++ b/examples/webapps/hello-world-hadoop/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/webapps/hello-world-sql/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-sql/pom.xml b/examples/webapps/hello-world-sql/pom.xml
index 808dae0..c80a5a7 100644
--- a/examples/webapps/hello-world-sql/pom.xml
+++ b/examples/webapps/hello-world-sql/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version> <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/webapps/hello-world-webapp/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/hello-world-webapp/pom.xml b/examples/webapps/hello-world-webapp/pom.xml
index 887e786..366fb6f 100644
--- a/examples/webapps/hello-world-webapp/pom.xml
+++ b/examples/webapps/hello-world-webapp/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-webapps-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/examples/webapps/pom.xml
----------------------------------------------------------------------
diff --git a/examples/webapps/pom.xml b/examples/webapps/pom.xml
index 23ec477..2fa33b1 100644
--- a/examples/webapps/pom.xml
+++ b/examples/webapps/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn.example</groupId>
         <artifactId>brooklyn-examples-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/sandbox/database/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/database/pom.xml b/sandbox/database/pom.xml
index cf93f35..1a4eb26 100644
--- a/sandbox/database/pom.xml
+++ b/sandbox/database/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/sandbox/mgmt/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/mgmt/pom.xml b/sandbox/mgmt/pom.xml
index 7512b0c..e90fb95 100644
--- a/sandbox/mgmt/pom.xml
+++ b/sandbox/mgmt/pom.xml
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
     

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/sandbox/rest/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/rest/pom.xml b/sandbox/rest/pom.xml
index 2d48786..3b8d5ff 100644
--- a/sandbox/rest/pom.xml
+++ b/sandbox/rest/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version><!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version><!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/sandbox/web-acceptance/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/web-acceptance/pom.xml b/sandbox/web-acceptance/pom.xml
index 0a8b756..9704182 100644
--- a/sandbox/web-acceptance/pom.xml
+++ b/sandbox/web-acceptance/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>   <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>   <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/software/database/pom.xml
----------------------------------------------------------------------
diff --git a/software/database/pom.xml b/software/database/pom.xml
index 9b144c0..0043351 100644
--- a/software/database/pom.xml
+++ b/software/database/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/software/messaging/pom.xml
----------------------------------------------------------------------
diff --git a/software/messaging/pom.xml b/software/messaging/pom.xml
index 56b0890..e308175 100644
--- a/software/messaging/pom.xml
+++ b/software/messaging/pom.xml
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/software/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/software/nosql/pom.xml b/software/nosql/pom.xml
index 7bb16ad..68fcc54 100644
--- a/software/nosql/pom.xml
+++ b/software/nosql/pom.xml
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/software/osgi/pom.xml
----------------------------------------------------------------------
diff --git a/software/osgi/pom.xml b/software/osgi/pom.xml
index 75ca648..5b2300a 100644
--- a/software/osgi/pom.xml
+++ b/software/osgi/pom.xml
@@ -11,7 +11,7 @@
 	<parent>
 		<groupId>io.brooklyn</groupId>
 		<artifactId>brooklyn-parent</artifactId>
-		<version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+		<version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/software/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/software/webapp/pom.xml b/software/webapp/pom.xml
index e1c5e22..b4eb77a 100644
--- a/software/webapp/pom.xml
+++ b/software/webapp/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/usage/qa/pom.xml
----------------------------------------------------------------------
diff --git a/usage/qa/pom.xml b/usage/qa/pom.xml
index 1e77531..b69ad8e 100644
--- a/usage/qa/pom.xml
+++ b/usage/qa/pom.xml
@@ -10,7 +10,7 @@
     <parent>
         <groupId>io.brooklyn</groupId>
         <artifactId>brooklyn-parent</artifactId>
-        <version>0.4.0-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
+        <version>0.4.0</version>  <!-- BROOKLYN_VERSION -->
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/usage/qa/start-monitor.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-monitor.sh b/usage/qa/start-monitor.sh
index 35bc11c..46ef434 100755
--- a/usage/qa/start-monitor.sh
+++ b/usage/qa/start-monitor.sh
@@ -8,7 +8,7 @@
 
 CLASS=brooklyn.qa.longevity.Monitor
 # BROOKLYN_VERSION_BELOW
-VERSION=0.4.0-SNAPSHOT
+VERSION=0.4.0
 
 ROOT=$(cd $(dirname $0) && pwd)
 cd $ROOT

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4df48da3/usage/qa/start-webcluster.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-webcluster.sh b/usage/qa/start-webcluster.sh
index 07faff3..c24f02e 100755
--- a/usage/qa/start-webcluster.sh
+++ b/usage/qa/start-webcluster.sh
@@ -8,7 +8,7 @@
 
 CLASS=brooklyn.qa.longevity.webcluster.WebClusterApp
 # BROOKLYN_VERSION_BELOW
-VERSION=0.4.0-SNAPSHOT
+VERSION=0.4.0
 
 ROOT=$(cd $(dirname $0) && pwd)
 cd $ROOT


[09/50] brooklyn-library git commit: Nginx config classes: make serializable

Posted by he...@apache.org.
Nginx config classes: make serializable


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

Branch: refs/heads/0.4.0
Commit: ca6fb86d4814a97630fb88bed2b12db4ba71dd18
Parents: 4e9a81a
Author: Aled Sage <al...@gmail.com>
Authored: Tue Sep 25 13:38:15 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Sep 26 12:36:17 2012 +0100

----------------------------------------------------------------------
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 34 ++++++--------------
 .../entity/proxy/nginx/UrlRewriteRule.java      |  8 +++--
 2 files changed, 15 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ca6fb86d/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
index 37ffd68..91a17d0 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
@@ -1,6 +1,8 @@
 package brooklyn.entity.proxy;
 
-public class ProxySslConfig {
+import com.google.common.base.Objects;
+
+public class ProxySslConfig implements Serializable {
 
     /** 
      * url's for the SSL certificates required at the server
@@ -34,14 +36,7 @@ public class ProxySslConfig {
     
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result
-                + ((certificate == null) ? 0 : certificate.hashCode());
-        result = prime * result + ((key == null) ? 0 : key.hashCode());
-        result = prime * result + (reuseSessions ? 1231 : 1237);
-        result = prime * result + (targetIsSsl ? 1231 : 1237);
-        return result;
+		return Objects.hashCode(certificate, key, reuseSessions, targetIsSsl);
     }
 
     @Override
@@ -53,21 +48,10 @@ public class ProxySslConfig {
         if (getClass() != obj.getClass())
             return false;
         ProxySslConfig other = (ProxySslConfig) obj;
-        if (certificate == null) {
-            if (other.certificate != null)
-                return false;
-        } else if (!certificate.equals(other.certificate))
-            return false;
-        if (key == null) {
-            if (other.key != null)
-                return false;
-        } else if (!key.equals(other.key))
-            return false;
-        if (reuseSessions != other.reuseSessions)
-            return false;
-        if (targetIsSsl != other.targetIsSsl)
-            return false;
-        return true;
+		
+		return Objects.equal(certificate, other.certificate) &&
+				Objects.equal(key, other.key) &&
+				Objects.equal(reuseSessions, other.reuseSessions) &&
+				Objects.equal(targetIsSsl, other.targetIsSsl);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ca6fb86d/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlRewriteRule.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlRewriteRule.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlRewriteRule.java
index 0628d17..1ec7fc9 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlRewriteRule.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlRewriteRule.java
@@ -1,5 +1,7 @@
 package brooklyn.entity.proxy.nginx;
 
+import java.io.Serializable;
+
 /** records a rewrite rule for use in URL rewriting such as by nginx;
  * from and to are expected to be usual regex replacement strings,
  * with the convention here (for portability) that:
@@ -9,8 +11,10 @@ package brooklyn.entity.proxy.nginx;
  * </li>
  * so eg use from = (.*)A(.*)  and to = $1B$2 to change all occurrences of A to B
  */
-public class UrlRewriteRule {
-
+public class UrlRewriteRule implements Serializable {
+    
+    private static final long serialVersionUID = -8457441487467968553L;
+    
     String from, to;
     boolean isBreak;
     


[24/50] brooklyn-library git commit: Adds SoftwareProcessDriver.kill

Posted by he...@apache.org.
Adds SoftwareProcessDriver.kill

- To be used primarily for testing, where server dies

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

Branch: refs/heads/0.4.0
Commit: 8ddba97d4e94b5180c4b6cf5324cbb3e74354d9e
Parents: c582285
Author: Aled Sage <al...@gmail.com>
Authored: Sat Oct 6 15:29:17 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Sat Oct 6 15:29:17 2012 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy  | 4 ++++
 .../entity/messaging/activemq/ActiveMQSshDriver.groovy         | 5 +++++
 .../java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy   | 5 +++++
 .../brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy    | 5 +++++
 .../main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java   | 5 +++++
 .../main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java  | 5 +++++
 .../java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java     | 5 +++++
 .../java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java     | 6 ++++++
 .../java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java   | 6 ++++++
 9 files changed, 46 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 9f7b9be..a5c9bf0 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -153,4 +153,8 @@ datadir         = .
         newScript(STOPPING, usePidFile: true).execute();
     }
 
+    @Override
+    public void kill() {
+        newScript(KILLING, usePidFile: true).execute();
+    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.groovy b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.groovy
index dc6b390..6e134bb 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.groovy
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.groovy
@@ -70,6 +70,11 @@ public class ActiveMQSshDriver extends JavaSoftwareProcessSshDriver implements A
         newScript(STOPPING, usePidFile:pidFile).execute();
     }
 
+    @Override
+    public void kill() {
+        newScript(KILLING, usePidFile:pidFile).execute();
+    }
+
     public Map<String, String> getShellEnvironment() {
         def result = super.getShellEnvironment()
         result << [

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy
index b58c31a..6b8f020 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/qpid/QpidSshDriver.groovy
@@ -90,6 +90,11 @@ public class QpidSshDriver extends JavaSoftwareProcessSshDriver implements QpidD
         newScript(STOPPING, usePidFile:pidFile).execute();
     }
 
+    @Override
+    public void kill() {
+        newScript(KILLING, usePidFile:pidFile).execute();
+    }
+
     public Map<String, String> getShellEnvironment() {
         Map result = super.getShellEnvironment()
         result << [

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/messaging/src/main/java/brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy b/software/messaging/src/main/java/brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy
index e137dae..3d28b2c 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/rabbit/RabbitSshDriver.groovy
@@ -96,6 +96,11 @@ public class RabbitSshDriver extends AbstractSoftwareProcessSshDriver implements
                 .execute()
     }
 
+    @Override
+    public void kill() {
+        stop(); // TODO No pid file to easily do `kill -9`
+    }
+
     public Map<String, String> getShellEnvironment() {
         Map result = super.getShellEnvironment()
         result << [

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
index 75d4b0f..b52829b 100644
--- a/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
+++ b/software/osgi/src/main/java/brooklyn/entity/osgi/karaf/KarafSshDriver.java
@@ -105,6 +105,11 @@ public class KarafSshDriver extends JavaSoftwareProcessSshDriver implements Kara
     }
 
     @Override
+    public void kill() {
+        stop(); // TODO no pid file to easily do `kill -9`
+    }
+
+    @Override
     protected List<String> getCustomJavaConfigOptions() {
         List<String> result = new LinkedList<String>();
         result.addAll(super.getCustomJavaConfigOptions());

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index 4cce55c..022a331 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -180,6 +180,11 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
     }
 
     @Override
+    public void kill() {
+        stop(); // TODO Don't `kill -9`, as that doesn't stop the worker processes
+    }
+
+    @Override
     public void restart() {
         try {
             if (isRunning()) {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
index c9426a5..6d8d675 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
@@ -146,6 +146,11 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
     }
 
     @Override
+    public void kill() {
+        stop(); // TODO No pid file to easily do a `kill -9`
+    }
+        
+    @Override
     protected List<String> getCustomJavaConfigOptions() {
         List<String> options = new LinkedList<String>();
         options.addAll(super.getCustomJavaConfigOptions());

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index b63c878..ccf8515 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -141,6 +141,12 @@ class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver {
     }
 
     @Override
+    public void kill() {
+        Map flags = MutableMap.of("usePidFile", true);
+        newScript(flags, KILLING).execute();
+    }
+
+    @Override
     protected List<String> getCustomJavaConfigOptions() {
         List<String> options = new LinkedList<String>();
         options.addAll(super.getCustomJavaConfigOptions());

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8ddba97d/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
index 63cc155..255ed06 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
@@ -95,6 +95,12 @@ public class Tomcat7SshDriver extends JavaWebAppSshDriver implements Tomcat7Driv
     }
 
     @Override
+    public void kill() {
+        Map flags = MutableMap.of("usePidFile","pid.txt");
+        newScript(flags, KILLING).execute();
+    }
+
+    @Override
     protected List<String> getCustomJavaConfigOptions() {
         List<String> options = new LinkedList<String>();
         options.addAll(super.getCustomJavaConfigOptions());


[45/50] brooklyn-library git commit: Make class JBoss7SshDriver public

Posted by he...@apache.org.
Make class JBoss7SshDriver public

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

Branch: refs/heads/0.4.0
Commit: 95e1aac7a9bc10335a55e3074f64b0d35a8b38bc
Parents: c5fc74b
Author: Aled Sage <al...@gmail.com>
Authored: Tue Nov 13 22:23:14 2012 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Nov 13 22:23:14 2012 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/95e1aac7/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index ccf8515..48a8a67 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -15,7 +15,7 @@ import java.util.Map;
 import static java.lang.String.format;
 
 
-class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver {
+public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver {
 
     /*
       * TODO


[08/50] brooklyn-library git commit: Simplifies nginx: remove SPECIFIED_URL etc

Posted by he...@apache.org.
Simplifies nginx: remove SPECIFIED_URL etc

- removes (unused) SPECIFIED_URL - always infer url from other args
- removes default "anonymous" default domain config - use hostname if not defined
- AbstractController always sets ROOT_URL.
  (not happy about that, because root_url is a web-app concept).


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

Branch: refs/heads/0.4.0
Commit: bd32e0db57900e201beb275529529dae76742ca4
Parents: ca6fb86
Author: Aled Sage <al...@gmail.com>
Authored: Wed Sep 26 12:35:51 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Sep 26 12:36:17 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 75 +++++---------------
 .../entity/proxy/nginx/NginxController.groovy   | 11 +--
 2 files changed, 20 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/bd32e0db/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index 520cc21..cf34007 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -1,5 +1,6 @@
 package brooklyn.entity.proxy;
 
+import static brooklyn.util.JavaGroovyEquivalents.elvis;
 import static brooklyn.util.JavaGroovyEquivalents.groovyTruth;
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -20,6 +21,7 @@ import brooklyn.entity.basic.SoftwareProcessEntity;
 import brooklyn.entity.group.AbstractMembershipTrackingPolicy;
 import brooklyn.entity.group.Cluster;
 import brooklyn.entity.trait.Startable;
+import brooklyn.entity.webapp.WebAppService;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
@@ -30,7 +32,6 @@ import brooklyn.location.MachineLocation;
 import brooklyn.util.MutableMap;
 import brooklyn.util.flags.SetFromFlag;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 /**
@@ -53,21 +54,16 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     public static final BasicAttributeSensorAndConfigKey<String> PROTOCOL = new BasicAttributeSensorAndConfigKey<String>(
             String.class, "proxy.protocol", "Main URL protocol this proxy answers (typically http or https)", null);
     
-    //does this have special meaning to nginx/others? or should we just take the hostname ?
-    public static final String ANONYMOUS = "anonymous";
-    
     @SetFromFlag("domain")
     public static final BasicAttributeSensorAndConfigKey<String> DOMAIN_NAME = new BasicAttributeSensorAndConfigKey<String>(
-            String.class, "proxy.domainName", "Domain name that this controller responds to", ANONYMOUS);
+            String.class, "proxy.domainName", "Domain name that this controller responds to", null);
         
-    @SetFromFlag("url")
-    public static final BasicAttributeSensorAndConfigKey<String> SPECIFIED_URL = new BasicAttributeSensorAndConfigKey<String>(
-            String.class, "proxy.url", "Main URL this proxy listens at");
-    
     @SetFromFlag("ssl")
     public static final BasicConfigKey<ProxySslConfig> SSL_CONFIG = 
         new BasicConfigKey<ProxySslConfig>(ProxySslConfig.class, "proxy.ssl.config", "configuration (e.g. certificates) for SSL; will use SSL if set, not use SSL if not set");
 
+    public static final BasicAttributeSensor<String> ROOT_URL = WebAppService.ROOT_URL;
+    
     public static final BasicAttributeSensor<Set> TARGETS = new BasicAttributeSensor<Set>(
             Set.class, "proxy.targets", "Main set of downstream targets");
     
@@ -136,6 +132,10 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     	return isActive;
     }
     
+    public String getProtocol() {
+        return getAttribute(PROTOCOL);
+    }
+
     public String getDomain() {
         return getAttribute(DOMAIN_NAME);
     }
@@ -144,12 +144,8 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getAttribute(PROXY_HTTP_PORT);
     }
 
-    public String getProtocol() {
-        return getAttribute(PROTOCOL);
-    }
-
     public String getUrl() {
-        return getAttribute(SPECIFIED_URL);
+        return getAttribute(ROOT_URL);
     }
 
     public AttributeSensor getPortNumberSensor() {
@@ -159,34 +155,15 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     @Description("Forces reload of the configuration")
     public abstract void reload();
 
-    protected String inferProtocol(String url) {
-    	if (url!=null && !url.startsWith("null:")) {
-    		return url.substring(0, url.indexOf(':'));
-    	} else {
-    		return inferProtocol();
-    	}
-    }
-    
     protected String inferProtocol() {
-    	return getConfig(SSL_CONFIG)!=null ? "https" : "http";
-    }
-    
-    protected String inferHostname() {
-        String hostname = getDomain();
-        // use 'hostname' instead of domain if domain is anonymous
-        if (hostname==null || hostname.equals(ANONYMOUS)) {
-            hostname = getAttribute(HOSTNAME);
-            if (hostname == null) {
-                LOG.warn("Unable to determine domain/hostname for {}", this);
-            }
-        }
-        if (hostname==null) hostname = ANONYMOUS;
-        
-        return hostname;
+        return getConfig(SSL_CONFIG)!=null ? "https" : "http";
     }
     
     protected String inferUrl() {
-        return getProtocol()+"://"+getDomain()+":"+getPort()+"/";
+        String protocol = checkNotNull(getProtocol(), "protocol must not be null");
+        String domain = checkNotNull(getDomain(), "domain must not be null");
+        Integer port = checkNotNull(getPort(), "port must not be null");
+        return protocol+"://"+domain+":"+port+"/";
     }
     
     @Override
@@ -199,25 +176,11 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     protected void preStart() {
         super.preStart();
         
-        // use http port by default
-        checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
+        setAttribute(PROTOCOL, inferProtocol());
+        setAttribute(DOMAIN_NAME, elvis(getConfig(DOMAIN_NAME), getAttribute(HOSTNAME)));
+        setAttribute(ROOT_URL, inferUrl());
         
-        if (groovyTruth(getConfig(SPECIFIED_URL))) {
-            // previously we would attempt to infer values from a specified URL, but now we don't
-            // as that specified URL might be for another machine with port-forwarding
-            setAttribute(PROTOCOL, inferProtocol(getConfig(SPECIFIED_URL)));
-            setAttribute(HOSTNAME, inferHostname());
-            setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
-            setAttribute(SPECIFIED_URL, getConfig(SPECIFIED_URL));
-
-        } else {
-            setAttribute(PROTOCOL, inferProtocol());
-            setAttribute(HOSTNAME, inferHostname());
-            setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
-            setAttribute(SPECIFIED_URL, inferUrl());
-        }
-        
-        Preconditions.checkNotNull(getDomain(), "Domain must be set for controller");
+        checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
     }
     
     public void checkEntity(Entity member) {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/bd32e0db/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 7324bf6..cf5e074 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -13,11 +13,9 @@ import brooklyn.entity.basic.SoftwareProcessEntity
 import brooklyn.entity.group.AbstractMembershipTrackingPolicy
 import brooklyn.entity.proxy.AbstractController
 import brooklyn.entity.proxy.ProxySslConfig
-import brooklyn.entity.webapp.WebAppService
 import brooklyn.event.SensorEventListener
 import brooklyn.event.adapter.ConfigSensorAdapter
 import brooklyn.event.adapter.HttpSensorAdapter
-import brooklyn.event.basic.BasicAttributeSensor
 import brooklyn.event.basic.BasicConfigKey
 import brooklyn.util.ResourceUtils
 import brooklyn.util.flags.SetFromFlag
@@ -58,8 +56,6 @@ public class NginxController extends AbstractController {
     public static final BasicConfigKey<Boolean> STICKY =
         new BasicConfigKey<Boolean>(Boolean.class, "nginx.sticky", "whether to use sticky sessions", true);
     
-    public static final BasicAttributeSensor<String> ROOT_URL = WebAppService.ROOT_URL;
-    
     public NginxController(Entity owner) {
         this(new LinkedHashMap(), owner);
     }
@@ -109,7 +105,7 @@ public class NginxController extends AbstractController {
         sensorRegistry.register(new ConfigSensorAdapter());
         
         HttpSensorAdapter http = sensorRegistry.register(
-            new HttpSensorAdapter(getAttribute(AbstractController.SPECIFIED_URL), 
+            new HttpSensorAdapter(getAttribute(AbstractController.ROOT_URL), 
                 period: 1000*TimeUnit.MILLISECONDS));
         
         // "up" is defined as returning a valid HTTP response from nginx (including a 404 etc)
@@ -140,11 +136,6 @@ public class NginxController extends AbstractController {
         reconfigureService();
     }
     
-    protected void preStart() {
-        super.preStart();
-        setAttribute(ROOT_URL, getUrl());
-    }
-    
     protected void reconfigureService() {
 
         String cfg = getConfigFile();


[04/50] brooklyn-library git commit: fix java web app integration test and javadoc in response to recent change

Posted by he...@apache.org.
fix java web app integration test and javadoc in response to recent change


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

Branch: refs/heads/0.4.0
Commit: 22de8c5f2536e97b08891540bcd84eb40728894c
Parents: 3a37943
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Sep 20 17:13:48 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Sep 20 17:13:48 2012 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java    | 2 --
 .../src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java | 3 +--
 .../test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy | 2 +-
 3 files changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/22de8c5f/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
index c947f25..5c3c430 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
@@ -7,8 +7,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/22de8c5f/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
index 876572d..3316d06 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
@@ -62,8 +62,7 @@ public abstract class JavaWebAppSshDriver extends JavaSoftwareProcessSshDriver i
 
     /** deploys a URL as a webapp at the appserver;
      * returns a token which can be used as an argument to undeploy,
-     * typically the web application archive (eg WAR, EAR, JAR) filename (if copying files)
-     * or the web context (if using an API to manage).
+     * typically the web context with leading slash where the app can be reached (just "/" for ROOT)
      * <p>
      * see {@link JavaWebAppSoftwareProcess#deploy(String, String)} for details of how input filenames are handled */
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/22de8c5f/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
index d0d7132..aed1b2f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
@@ -413,7 +413,7 @@ public class WebAppIntegrationTest {
         executeUntilSucceeds(abortOnError:false, timeout:60*SECONDS) {
             // TODO get this URL from a WAR file entity
             assertTrue urlRespondsWithStatusCode200(entity.getAttribute(WebAppService.ROOT_URL)+"myartifactname/"+urlSubPathToPageToQuery)
-            assertEquals(entity.getAttribute(JavaWebAppSoftwareProcess.DEPLOYED_WARS), ImmutableSet.of("myartifactname.war"))
+            assertEquals(entity.getAttribute(JavaWebAppSoftwareProcess.DEPLOYED_WARS), ImmutableSet.of("/myartifactname"))
             true
         }
         


[16/50] brooklyn-library git commit: nginx forwards everything if there are no url mappings (so simple setup, esp in domain forwarding context, just works); and nginx does sudo if using a privileged port

Posted by he...@apache.org.
nginx forwards everything if there are no url mappings (so simple setup, esp in domain forwarding context, just works);
and nginx does sudo if using a privileged port


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

Branch: refs/heads/0.4.0
Commit: 88303598f2729ea280d5e432ff646698ab3a485b
Parents: f83a45b
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 28 01:06:51 2012 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 28 01:06:51 2012 -0400

----------------------------------------------------------------------
 .../entity/proxy/nginx/NginxController.groovy    | 19 ++++++++++++++-----
 .../entity/proxy/nginx/NginxSshDriver.java       | 10 +++++++---
 2 files changed, 21 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/88303598/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 7f56579..d82c7c1 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -203,10 +203,12 @@ public class NginxController extends AbstractController {
         
         // If no servers, then defaults to returning 404
         // TODO Give nicer page back 
-        config.append("  server {\n");
-        config.append("    listen "+getPort()+";\n")
-        config.append("    return 404;\n")
-        config.append("  }\n");
+        if (!isExclusive()) {
+            config.append("  server {\n");
+            config.append("    listen "+getPort()+";\n")
+            config.append("    return 404;\n")
+            config.append("  }\n");
+        }
         
         // For basic round-robin across the server-pool
         if (serverPoolAddresses) {
@@ -220,7 +222,8 @@ public class NginxController extends AbstractController {
             config.append("  }\n")
             config.append("  server {\n");
             config.append("    listen "+getPort()+";\n")
-            config.append("    server_name "+getDomain()+";\n")
+            if (!isExclusive())
+                config.append("    server_name "+getDomain()+";\n")
             config.append("    location / {\n");
             config.append("      proxy_pass "+(globalSslConfig && globalSslConfig.targetIsSsl ? "https" : "http")+"://"+getId()+";\n");
             config.append("    }\n");
@@ -360,4 +363,10 @@ public class NginxController extends AbstractController {
             return Collections.<UrlMapping>emptyList();
         }
     }
+
+    /** true iff this nginx server is routing for exactly one domain with no mappings, with downstream servers; 
+     * in such cases, forward all inbound traffic */    
+    protected boolean isExclusive() {
+        return serverPoolAddresses && !findUrlMappings();
+    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/88303598/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index ad917aa..4cce55c 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -150,10 +150,14 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
         newScript(flags, LAUNCHING).
                 body.append(
                 format("cd %s", getRunDir()),
-                format("nohup ./sbin/nginx -p %s/ -c conf/server.conf > ./console 2>&1 &", getRunDir())
+                sudoIfPrivilegedPort(getHttpPort(), format("nohup ./sbin/nginx -p %s/ -c conf/server.conf > ./console 2>&1 &", getRunDir()))
         ).execute();
     }
 
+    public static String sudoIfPrivilegedPort(int port, String command) {
+        return port < 1024 ? CommonCommands.sudo(command) : command;
+    }
+    
     @Override
     public boolean isRunning() {
         Map flags = MutableMap.of("usePidFile", "logs/nginx.pid");
@@ -171,7 +175,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
                 format("cd %s", getRunDir()),
                 format("export PID=`cat %s`", pidFile),
                 "[[ -n \"$PID\" ]] || exit 0",
-                "kill $PID"
+                sudoIfPrivilegedPort(getHttpPort(), "kill $PID")
         ).execute();
     }
 
@@ -211,7 +215,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
         newScript(flags, RESTARTING).
                 body.append(
                 format("cd %s", getRunDir()),
-                format("./sbin/nginx -p %s/ -c conf/server.conf -s reload", getRunDir())
+                sudoIfPrivilegedPort(getHttpPort(), format("./sbin/nginx -p %s/ -c conf/server.conf -s reload", getRunDir()))
         ).execute();
     }
 }


[22/50] brooklyn-library git commit: 64 bit support and fetching jclouds details

Posted by he...@apache.org.
64 bit support and fetching jclouds details


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

Branch: refs/heads/0.4.0
Commit: a54a476e72bdf35fcc1d48cfe7ec12552e2a7b2c
Parents: 4e8721c
Author: David Ribeiro Alves <da...@gmail.com>
Authored: Fri Oct 5 19:35:38 2012 -0500
Committer: David Ribeiro Alves <da...@gmail.com>
Committed: Fri Oct 5 19:35:38 2012 -0500

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/a54a476e/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 1e84b67..3ff7c40 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -37,12 +37,12 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
                 : new ComparableVersion(os.version).isGreaterThanOrEqualTo(OsVersions.MAC_10_6) ? "osx10.6"
                 : new ComparableVersion(os.version).isGreaterThanOrEqualTo(OsVersions.MAC_10_5) ? "osx10.5"
                 : "osx10.5";  //lowest common denominator
-            String osp2 = os.arch.equals(OsArchs.X_86_64) ? "x86_64" : "x86"
+            String osp2 = os.is64bit() ? "x86_64" : "x86"
             return osp1+"-"+osp2;
         }
         //assume generic linux
         String osp1 = "linux2.6";
-        String osp2 = os.arch.equals(OsArchs.X_86_64) ? "x86_64" : "i686"
+        String osp2 = os.is64bit() ? "x86_64" : "i686"
         return osp1+"-"+osp2;
     }
 	


[12/50] brooklyn-library git commit: Nginx reload: never restart server

Posted by he...@apache.org.
Nginx reload: never restart server

- Instead relies on start() subsequently calling update()
- Avoids where concurrent update+stop calls leave nginx running


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

Branch: refs/heads/0.4.0
Commit: 1684a352ccc75bca3dac9de07c2ee8649ccd94c3
Parents: cb90d4d
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 27 13:16:19 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 27 15:50:22 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 16 ++++--------
 .../entity/proxy/nginx/NginxController.groovy   | 20 +++++++++------
 .../entity/proxy/nginx/NginxSshDriver.java      | 26 ++++++++++----------
 .../entity/proxy/AbstractControllerTest.groovy  |  5 +---
 4 files changed, 32 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1684a352/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index 9477460..4b85c2c 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -218,24 +218,18 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
 
     /** 
      * Implementations should update the configuration so that 'serverPoolAddresses' are targeted.
-     * The caller will subsequently call reload if reconfigureService returned true.
-     * 
-     * @return True if the configuration has been modified (i.e. required reload); false otherwise.
+     * The caller will subsequently call reload to apply the new configuration.
      */
-    protected abstract boolean reconfigureService();
+    protected abstract void reconfigureService();
     
     public synchronized void update() {
         if (!isActive()) updateNeeded = true;
         else {
             updateNeeded = false;
             LOG.debug("Updating {} in response to changes", this);
-            boolean modified = reconfigureService();
-            if (modified) {
-                LOG.debug("Reloading {} in response to changes", this);
-                invokeFromJava(RELOAD);
-            } else {
-                LOG.debug("Reconfiguration made no change, so skipping reload", this);
-            }
+            reconfigureService();
+            LOG.debug("Reloading {} in response to changes", this);
+            invokeFromJava(RELOAD);
         }
         setAttribute(SERVER_POOL_TARGETS, serverPoolAddresses);
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1684a352/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 14eeed7..7f56579 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -137,16 +137,20 @@ public class NginxController extends AbstractController {
     }
     
     @Override
-    protected boolean reconfigureService() {
+    protected void reconfigureService() {
 
         String cfg = getConfigFile();
-        if (cfg==null) return false;
+        if (cfg==null) return;
         
         if (LOG.isDebugEnabled()) LOG.debug("Reconfiguring {}, targetting {} and {}", this, serverPoolAddresses, findUrlMappings());
         if (LOG.isTraceEnabled()) LOG.trace("Reconfiguring {}, config file:\n{}", this, cfg);
         
         NginxSshDriver driver = (NginxSshDriver)getDriver();
-        if (!driver.isCustomizationCompleted()) return;
+        if (!driver.isCustomizationCompleted()) {
+            if (LOG.isDebugEnabled()) LOG.debug("Reconfiguring {}, but driver's customization not yet complete so aborting");
+            return;
+        }
+        
         driver.machine.copyTo(new ByteArrayInputStream(cfg.getBytes()), driver.getRunDir()+"/conf/server.conf");
         
         installSslKeys("global", getConfig(SSL_CONFIG));
@@ -155,8 +159,6 @@ public class NginxController extends AbstractController {
             //cache ensures only the first is installed, which is what is assumed below
             installSslKeys(mapping.getDomain(), mapping.getConfig(UrlMapping.SSL_CONFIG));
         }
-        
-        return true;
     }
     
     Set<String> installedKeysCache = [];
@@ -181,8 +183,12 @@ public class NginxController extends AbstractController {
         // TODO should refactor this method to a new class with methods e.g. NginxConfigFileGenerator...
         
         NginxSshDriver driver = (NginxSshDriver)getDriver();
-        if (driver==null) return null;
-                
+        if (driver==null) {
+            if (LOG.isDebugEnabled()) LOG.debug("No driver for {}, so not generating config file (is entity stopping? state={})", 
+                this, getAttribute(NginxController.SERVICE_STATE));
+            return null;
+        }
+        
         StringBuilder config = new StringBuilder();
         config.append("\n")
         config.append(format("pid %s/logs/nginx.pid;\n",driver.getRunDir()));

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1684a352/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index 755c5da..e8091d3 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -188,22 +188,22 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
     }
     
     public void reload() {
-        // FIXME There is a race on stop()+reload(). Nginx can simultaneously be stopping and also reconfiguring 
-        // (e.g. due to a cluster-resize). The restart() call below means that nginx can be restarted after stop 
-        // has executed. Looking at lifecycle reduces the race, but we need some proper synchronization...
+        // Note that previously, if serviceUp==false then we'd restart nginx.
+        // That caused a race on stop()+reload(): nginx could simultaneously be stopping and also reconfiguring 
+        // (e.g. due to a cluster-resize), the restart() would leave nginx running even after stop() had returned.
+        //
+        // Now we rely on NginxController always calling update (and thus reload) once it has started. This is
+        // done in AbstractController.postStart().
+        //
+        // If our blocking check sees that !isRunning() (and if a separate thread is starting it, and subsequently
+        // calling waitForEntityStart()), we can guarantee that the start-thread's call to update will happen after 
+        // this call to reload. So we this can be a no-op, and just rely on that subsequent call to update.
         
         Lifecycle lifecycle = entity.getAttribute(NginxController.SERVICE_STATE);
-        Boolean serviceUp = entity.getAttribute(Startable.SERVICE_UP);
+        boolean running = isRunning();
 
-        if (lifecycle==Lifecycle.STOPPING || lifecycle==Lifecycle.STOPPED || lifecycle==Lifecycle.DESTROYED) {
-            log.debug("Ignoring reload of nginx "+entity+", becausing in state "+lifecycle);
-            return;
-        }
-        
-        if (serviceUp == null || serviceUp == false) {
-            //if it hasn't come up completely then do restart instead
-            log.debug("Reload of nginx "+entity+" is doing restart because has not come up");
-            restart();
+        if (!running) {
+            log.debug("Ignoring reload of nginx "+entity+", becausing service is not running (state "+lifecycle+")");
             return;
         }
         

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1684a352/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
index c095a96..78c1be0 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
@@ -59,13 +59,10 @@ class AbstractControllerTest {
                 domain:"mydomain") {
 
             @Override
-            protected boolean reconfigureService() {
+            protected void reconfigureService() {
                 log.info "test controller reconfigure, addresses $serverPoolAddresses"
                 if ((serverPoolAddresses && !updates) || (updates && serverPoolAddresses!=updates.last())) {
                     updates.add(serverPoolAddresses)
-                    return true;
-                } else {
-                    return false;
                 }
             }
 


[03/50] brooklyn-library git commit: Merge branch 'feature/better-config' into feature/ssh-passphrase

Posted by he...@apache.org.
Merge branch 'feature/better-config' into feature/ssh-passphrase


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

Branch: refs/heads/0.4.0
Commit: 3a37943bd6f378bb50b1a8f7a0bf24360d7c46b4
Parents: 4474ed5 0ba4340
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Sep 19 00:22:40 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Sep 19 00:22:40 2012 +0100

----------------------------------------------------------------------
 .../src/main/java/brooklyn/rest/resources/CatalogResource.java | 2 +-
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy  | 6 +++---
 .../brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[32/50] brooklyn-library git commit: Merge pull request #340 from aledsage/feature/jmx-polling-for-unreachable

Posted by he...@apache.org.
Merge pull request #340 from aledsage/feature/jmx-polling-for-unreachable

Adds JMX reachable listener, for setting service-down

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

Branch: refs/heads/0.4.0
Commit: c8d367d2926be1246eee58262f7074f54a928eee
Parents: 0024c88 34d911f
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 9 02:14:03 2012 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 9 02:14:03 2012 -0700

----------------------------------------------------------------------
 .../entity/database/mysql/MySqlSshDriver.groovy |  4 ++++
 .../messaging/activemq/ActiveMQSshDriver.groovy |  5 ++++
 .../entity/messaging/qpid/QpidSshDriver.groovy  |  5 ++++
 .../messaging/rabbit/RabbitSshDriver.groovy     |  5 ++++
 .../entity/osgi/karaf/KarafSshDriver.java       |  5 ++++
 .../entity/proxy/nginx/NginxSshDriver.java      |  5 ++++
 .../entity/webapp/jboss/JBoss6Server.java       | 25 +++++++++++++++-----
 .../entity/webapp/jboss/JBoss6SshDriver.java    |  5 ++++
 .../entity/webapp/jboss/JBoss7SshDriver.java    |  6 +++++
 .../entity/webapp/tomcat/Tomcat7SshDriver.java  |  6 +++++
 .../entity/webapp/tomcat/TomcatServer.java      | 11 +++++++++
 .../entity/webapp/WebAppIntegrationTest.groovy  | 20 ++++++++++++++++
 12 files changed, 96 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c8d367d2/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------


[11/50] brooklyn-library git commit: AbstractController server-pool: incorporate comments

Posted by he...@apache.org.
AbstractController server-pool: incorporate comments

- incorporate Peter's review comments from 
  https://github.com/brooklyncentral/brooklyn/pull/325
- and some other logging cleanup

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

Branch: refs/heads/0.4.0
Commit: cb90d4d891cbfdab02926a1b12da46168346f325
Parents: 2b096d6
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 27 13:15:08 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 27 13:15:08 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 45 ++++++++++++--------
 1 file changed, 28 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/cb90d4d8/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index c73a224..9477460 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -36,6 +36,13 @@ import com.google.common.collect.Sets;
  * Represents a controller mechanism for a {@link Cluster}.
  */
 public abstract class AbstractController extends SoftwareProcessEntity implements LoadBalancer {
+    
+    // TODO Should review synchronization model. Currently, all changes to the serverPoolTargets
+    // (and checking for potential changes) is done while synchronized on this. That means it 
+    // will also call update/reload while holding the lock. This is "conservative", but means
+    // sub-classes need to be extremely careful about any additional synchronization and of
+    // their implementations of update/reconfigureService/reload.
+    
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractController.class);
 
     /** sensor for port to forward to on target entities */
@@ -63,7 +70,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     public static final BasicAttributeSensor<String> ROOT_URL = WebAppService.ROOT_URL;
     
     public static final BasicAttributeSensor<Set<String>> SERVER_POOL_TARGETS = new BasicAttributeSensor(
-            Set.class, "proxy.targets", "Main set of downstream targets");
+            Set.class, "proxy.serverpool.targets", "The downstream targets in the server pool");
     
     /**
      * @deprecated Use SERVER_POOL_TARGETS
@@ -72,8 +79,8 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     
     public static final MethodEffector<Void> RELOAD = new MethodEffector(AbstractController.class, "reload");
     
-    protected boolean isActive;
-    protected boolean updateNeeded = true;
+    protected volatile boolean isActive;
+    protected volatile boolean updateNeeded = true;
 
     protected AbstractMembershipTrackingPolicy serverPoolMemberTrackerPolicy;
     protected Set<String> serverPoolAddresses = Sets.newLinkedHashSet();
@@ -210,14 +217,14 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     }
 
     /** 
-     * Implementations should update the configuration so that 'addresses' are targeted.
+     * Implementations should update the configuration so that 'serverPoolAddresses' are targeted.
      * The caller will subsequently call reload if reconfigureService returned true.
      * 
      * @return True if the configuration has been modified (i.e. required reload); false otherwise.
      */
     protected abstract boolean reconfigureService();
     
-    public void update() {
+    public synchronized void update() {
         if (!isActive()) updateNeeded = true;
         else {
             updateNeeded = false;
@@ -260,8 +267,9 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         setAttribute(SERVER_POOL_TARGETS, serverPoolAddresses);
     }
 
-    protected void onServerPoolMemberChanged(Entity member) {
-        if (LOG.isTraceEnabled()) LOG.trace("Start {} checkEntity {}", this, member);
+    protected synchronized void onServerPoolMemberChanged(Entity member) {
+        if (LOG.isTraceEnabled()) LOG.trace("For {}, considering membership of {} which is in locations {}", 
+                new Object[] {this, member, member.getLocations()});
         if (belongsInServerPool(member)) {
             addServerPoolMember(member);
         } else {
@@ -272,21 +280,22 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     
     protected boolean belongsInServerPool(Entity member) {
         if (!groovyTruth(member.getAttribute(Startable.SERVICE_UP))) {
-            LOG.debug("Members of {}, checking {}, eliminating because not up", getDisplayName(), member.getDisplayName());
+            if (LOG.isTraceEnabled()) LOG.trace("Members of {}, checking {}, eliminating because not up", getDisplayName(), member.getDisplayName());
             return false;
         }
         if (!getServerPool().getMembers().contains(member)) {
-            LOG.debug("Members of {}, checking {}, eliminating because not member", getDisplayName(), member.getDisplayName());
+            if (LOG.isTraceEnabled()) LOG.trace("Members of {}, checking {}, eliminating because not member", getDisplayName(), member.getDisplayName());
             return false;
         }
-        LOG.debug("Members of {}, checking {}, approving", getDisplayName(), member.getDisplayName());
+        if (LOG.isTraceEnabled()) LOG.trace("Members of {}, checking {}, approving", getDisplayName(), member.getDisplayName());
         return true;
     }
     
     protected synchronized void addServerPoolMember(Entity member) {
-        if (LOG.isTraceEnabled()) LOG.trace("Considering to add to {}, new member {} in locations {} - "+
-                "waiting for service to be up", new Object[] {this, member, member.getLocations()});
-        if (serverPoolTargets.contains(member)) return;
+        if (serverPoolTargets.contains(member)) {
+            if (LOG.isTraceEnabled()) LOG.trace("For {}, not adding as already have member {}", new Object[] {this, member});
+            return;
+        }
         
         String address = getAddressOfEntity(member);
         if (address != null) {
@@ -300,9 +309,10 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     }
     
     protected synchronized void removeServerPoolMember(Entity member) {
-        if (LOG.isTraceEnabled()) LOG.trace("Considering to remove from {}, member {} in locations {} - "+
-                "waiting for service to be up", new Object[] {this, member, member.getLocations()});
-        if (!serverPoolTargets.contains(member)) return;
+        if (!serverPoolTargets.contains(member)) {
+            if (LOG.isTraceEnabled()) LOG.trace("For {}, not removing as don't have member {}", new Object[] {this, member});
+            return;
+        }
         
         String address = getAddressOfEntity(member);
         if (address != null) {
@@ -321,7 +331,8 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         if (ip!=null && port!=null) {
             return ip+":"+port;
         }
-        LOG.error("Unable to construct hostname:port representation for "+member+"; skipping in "+this);
+        LOG.error("Unable to construct hostname:port representation for {} ({}:{}); skipping in {}", 
+                new Object[] {member, ip, port, this});
         return null;
     }
 }


[27/50] brooklyn-library git commit: ProxySslConfig is able to deal the same with empty string, white space strings, and null strings in a similar matter. So the fields don't need to be null but can also be empty strings to let the nginx ssl configuratio

Posted by he...@apache.org.
ProxySslConfig is able to deal the same with empty string, white space strings, and null strings in a similar matter. So the fields don't need to be null but can also be empty strings to let the nginx ssl configuration still work correctly. Also renamed the ProxySslConfig sourceurl fields so that they are in line with the destination fields


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

Branch: refs/heads/0.4.0
Commit: 3192fb8b6ba7fa9327fe925bb00e1adfe40b4aa6
Parents: 4eff322
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Tue Oct 9 07:57:16 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Tue Oct 9 07:57:16 2012 +0300

----------------------------------------------------------------------
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 14 ++++++------
 .../entity/proxy/nginx/NginxController.groovy   | 24 +++++++++++---------
 .../nginx/NginxHttpsSslIntegrationTest.groovy   |  4 +++-
 3 files changed, 23 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3192fb8b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
index e7f75f3..0e1fb92 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
@@ -22,15 +22,15 @@ public class ProxySslConfig implements Serializable {
      *  (however it will not currently merge multiple certificates.
      *  if conflicting certificates are attempted to be installed nginx will complain.) 
      */
-    String sourceCertificateUrl;
+    String certificateSourceUrl;
 
-    String sourceKeyUrl;
+    String keySourceUrl;
 
     /**
      * Sets the ssl_certificate path to be used within the generated LoadBalancer configuration. If set to null,
      * Brooklyn will use an auto generated path.
      *
-     * If sourceCertificateUrl, then Brooklyn will copy the certificate the certificateDestination.
+     * If certificateSourceUrl, then Brooklyn will copy the certificate the certificateDestination.
      *
      * Setting this field is useful if there is a certificate on the nginx machine you want to make use of.
      */
@@ -40,7 +40,7 @@ public class ProxySslConfig implements Serializable {
      * Sets the ssl_certificate_key path to be used within the generated LoadBalancer configuration. If set to null,
      * Brooklyn will use an auto generated path.
      *
-     * If sourceKeyUrl, then Brooklyn will copy the certificate the keyDestination.
+     * If keySourceUrl, then Brooklyn will copy the certificate the keyDestination.
      *
      * Setting this field is useful if there is a certificate_key on the nginx machine you want to make use of.
      */
@@ -57,7 +57,7 @@ public class ProxySslConfig implements Serializable {
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(sourceCertificateUrl, sourceKeyUrl, certificateDestination, keyDestination, reuseSessions, targetIsSsl);
+        return Objects.hashCode(certificateSourceUrl, keySourceUrl, certificateDestination, keyDestination, reuseSessions, targetIsSsl);
     }
 
     @Override
@@ -70,10 +70,10 @@ public class ProxySslConfig implements Serializable {
             return false;
         ProxySslConfig other = (ProxySslConfig) obj;
 
-        return Objects.equal(sourceCertificateUrl, other.sourceCertificateUrl) &&
+        return Objects.equal(certificateSourceUrl, other.certificateSourceUrl) &&
                Object.equals(certificateDestination, other.certificateDestination) &&
                Object.equals(keyDestination, other.keyDestination) &&
-                Objects.equal(sourceKeyUrl, other.sourceKeyUrl) &&
+                Objects.equal(keySourceUrl, other.keySourceUrl) &&
                 Objects.equal(reuseSessions, other.reuseSessions) &&
                 Objects.equal(targetIsSsl, other.targetIsSsl);
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3192fb8b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 031ab70..884ff15 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -25,6 +25,8 @@ import com.google.common.collect.Iterables
 import com.google.common.collect.LinkedHashMultimap
 import com.google.common.collect.Multimap
 
+import brooklyn.util.text.Strings
+
 /**
  * An entity that represents an Nginx proxy (e.g. for routing requests to servers in a cluster).
  * <p>
@@ -173,17 +175,17 @@ public class NginxController extends AbstractController {
 
         NginxSshDriver driver = (NginxSshDriver) getDriver();
 
-        if (ssl.sourceCertificateUrl != null) {
+        if (!Strings.isEmpty(ssl.certificateSourceUrl)) {
             String certificateDestination = ssl.certificateDestination == null ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.certificateDestination;
             driver.machine.copyTo(permissions: "0400",
-                    new ResourceUtils(this).getResourceFromUrl(ssl.sourceCertificateUrl),
+                    new ResourceUtils(this).getResourceFromUrl(ssl.certificateSourceUrl),
                     certificateDestination);
         }
 
-        if (ssl.sourceKeyUrl != null) {
+        if (!Strings.isEmpty(ssl.keySourceUrl)) {
             String keyDestination = ssl.keyDestination == null ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.keyDestination;
             driver.machine.copyTo(permissions: "0400",
-                    new ResourceUtils(this).getResourceFromUrl(ssl.sourceKeyUrl),
+                    new ResourceUtils(this).getResourceFromUrl(ssl.keySourceUrl),
                     keyDestination);
         }
 
@@ -347,8 +349,8 @@ public class NginxController extends AbstractController {
     }
 
     void verifyConfig(ProxySslConfig proxySslConfig) {
-        if(proxySslConfig.certificateDestination == null && proxySslConfig.sourceCertificateUrl == null){
-            throw new IllegalStateException("ProxySslConfig can't have a null certificateDestination and null sourceCertificateUrl. One or both need to be set")
+          if(Strings.isEmpty(proxySslConfig.certificateDestination) && Strings.isEmpty(proxySslConfig.certificateSourceUrl)){
+            throw new IllegalStateException("ProxySslConfig can't have a null certificateDestination and null certificateSourceUrl. One or both need to be set")
         }
     }
 
@@ -365,19 +367,19 @@ public class NginxController extends AbstractController {
         }
         if (certificateBlock) {
             String cert;
-            if (ssl.certificateDestination != null) {
-                cert = ssl.certificateDestination;
-            } else {
+            if (Strings.isEmpty(ssl.certificateDestination)) {
                 cert = "" + id + ".crt";
+            } else {
+                cert = ssl.certificateDestination;
             }
 
             out.append(prefix);
             out.append("ssl_certificate " + cert + ";\n");
 
             String key;
-            if (ssl.keyDestination != null) {
+            if (!Strings.isEmpty(ssl.keyDestination)) {
                 key = ssl.keyDestination;
-            } else if (ssl.sourceKeyUrl != null) {
+            } else if (!Strings.isEmpty(ssl.keySourceUrl)) {
                 key = "" + id + ".key";
             } else {
                 key = null;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3192fb8b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
index 7b38635..2cb5433 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
@@ -55,7 +55,9 @@ public class NginxHttpsSslIntegrationTest {
         cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
         cluster.setConfig(JavaWebAppService.ROOT_WAR, WAR_URL)
         
-        ProxySslConfig ssl = new ProxySslConfig(sourceCertificateUrl:CERTIFICATE_URL, sourceKeyUrl:KEY_URL);
+        ProxySslConfig ssl = new ProxySslConfig(
+                certificateSourceUrl:CERTIFICATE_URL,
+                keySourceUrl:KEY_URL);
         nginx = new NginxController(app,
                 sticky: false,
                 cluster: cluster,


[02/50] brooklyn-library git commit: cleanup in response to code review, providing explicit StructuredModifications for List and Map ConfigKey, moving Config interfaces to brooklyn.config, and IdGenerator to Identifiers

Posted by he...@apache.org.
cleanup in response to code review, providing explicit StructuredModifications for List and Map ConfigKey, moving Config interfaces to brooklyn.config, and IdGenerator to Identifiers


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

Branch: refs/heads/0.4.0
Commit: 0ba434013f6bd119fcb8f29936c58ba3173531a1
Parents: cc497c0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Sep 19 00:20:35 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Sep 19 00:20:35 2012 +0100

----------------------------------------------------------------------
 .../src/main/java/brooklyn/rest/resources/CatalogResource.java | 2 +-
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy  | 6 +++---
 .../brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0ba43401/sandbox/rest/src/main/java/brooklyn/rest/resources/CatalogResource.java
----------------------------------------------------------------------
diff --git a/sandbox/rest/src/main/java/brooklyn/rest/resources/CatalogResource.java b/sandbox/rest/src/main/java/brooklyn/rest/resources/CatalogResource.java
index b3732a9..0882a02 100644
--- a/sandbox/rest/src/main/java/brooklyn/rest/resources/CatalogResource.java
+++ b/sandbox/rest/src/main/java/brooklyn/rest/resources/CatalogResource.java
@@ -25,7 +25,7 @@ import javax.ws.rs.core.Response;
 
 import org.reflections.Reflections;
 
-import brooklyn.entity.ConfigKey;
+import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.AbstractEntity;
 import brooklyn.policy.basic.AbstractPolicy;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0ba43401/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 9e393bc..81c8001 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -10,8 +10,8 @@ import brooklyn.location.basic.SshMachineLocation
 import brooklyn.location.basic.BasicOsDetails.OsArchs
 import brooklyn.location.basic.BasicOsDetails.OsVersions
 import brooklyn.util.ComparableVersion
-import brooklyn.util.IdGenerator;
 import brooklyn.util.ResourceUtils
+import brooklyn.util.text.Identifiers;
 
 /**
  * The SSH implementation of the {@link MySlDriver}.
@@ -73,8 +73,8 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
             body.append(commands).execute();
     }
 
-    final String socketUid = IdGenerator.makeRandomId(6);
-    String secretPassword = IdGenerator.makeRandomId(6);
+    final String socketUid = Identifiers.makeRandomId(6);
+    String secretPassword = Identifiers.makeRandomId(6);
     public String getPassword() { secretPassword }
     public MySqlNode getEntity() { return super.getEntity() }
     public int getPort() { return entity.port }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0ba43401/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy
index daa181b..3fb2c5f 100644
--- a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingDnsService.groovy
@@ -15,8 +15,8 @@ import brooklyn.entity.dns.geoscaling.GeoscalingWebClient.SmartSubdomain
 import brooklyn.event.basic.BasicAttributeSensor
 import brooklyn.event.basic.BasicConfigKey
 import brooklyn.location.geo.HostGeoInfo
-import brooklyn.util.IdGenerator
 import brooklyn.util.flags.SetFromFlag
+import brooklyn.util.text.Identifiers;
 
 
 class GeoscalingDnsService extends AbstractGeoDnsService {
@@ -83,7 +83,7 @@ class GeoscalingDnsService extends AbstractGeoDnsService {
             // if no smart subdomain specified, but random is, use something random
             if (smartSubdomainName) smartSubdomainName += "-";
             else smartSubdomainName = "";
-            smartSubdomainName += IdGenerator.makeRandomId(8);
+            smartSubdomainName += Identifiers.makeRandomId(8);
         }
         checkNotNull(smartSubdomainName, "The GeoScaling smart subdomain name is not specified or randomized");
         


[07/50] brooklyn-library git commit: AbstractController: use config/sensors instead of fields

Posted by he...@apache.org.
AbstractController: use config/sensors instead of fields

Will make it easier to serialize/deserialize if using standard
mechanism of getAttribute rather than duplicating the values in
fields.

Also, "fixes" makeUrl which was called from checkEntity. It therefore
overwrote the value of SPECIFIED_URL attribute each time. And tests
only worked because of the call to makeUrl inside checkEntity, which
was very misleading.

I'm not sure about the old comment in preStart:
  previously we would attempt to infer values from a specified URL, but now we don't
  as that specified URL might be for another machine with port-forwarding
I've changed it so we really do believe the SPECIFIED_URL for reporting the
protocol and specified_url attributes.


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

Branch: refs/heads/0.4.0
Commit: 4e9a81a18f4cecd317fb0d5ba70242f55bcf5515
Parents: 71c8f49
Author: Aled Sage <al...@gmail.com>
Authored: Tue Sep 25 13:37:57 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Sep 26 11:16:17 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 106 ++++++++++---------
 .../entity/proxy/nginx/NginxController.groovy   |   9 +-
 2 files changed, 57 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e9a81a1/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index eff7df1..520cc21 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -41,7 +41,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
 
     /** sensor for port to forward to on target entities */
     @SetFromFlag("portNumberSensor")
-    public static final BasicConfigKey<AttributeSensor> PORT_NUMBER_SENSOR = new BasicConfigKey<AttributeSensor>(
+    public static final BasicAttributeSensorAndConfigKey<AttributeSensor> PORT_NUMBER_SENSOR = new BasicAttributeSensorAndConfigKey<AttributeSensor>(
             AttributeSensor.class, "member.sensor.portNumber", "Port number sensor on members (defaults to http.port)", Attributes.HTTP_PORT);
 
     @SetFromFlag("port")
@@ -73,14 +73,9 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     
     public static final MethodEffector<Void> RELOAD = new MethodEffector(AbstractController.class, "reload");
     
-    protected String domain;
-    protected Integer port;
-    protected String protocol;
-    protected String url;
-    protected AttributeSensor<Integer> portNumber;
-    protected boolean isActive = false;
-    protected boolean updateNeeded = true;
     protected Group serverPool;
+    protected boolean isActive;
+    protected boolean updateNeeded = true;
 
     AbstractMembershipTrackingPolicy policy;
     protected Set<String> addresses = new LinkedHashSet<String>();
@@ -137,47 +132,61 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         }
     }
 
+    public boolean isActive() {
+    	return isActive;
+    }
+    
     public String getDomain() {
-        return domain;
+        return getAttribute(DOMAIN_NAME);
     }
     
     public Integer getPort() {
-        return port;
+        return getAttribute(PROXY_HTTP_PORT);
     }
 
     public String getProtocol() {
-        return protocol;
+        return getAttribute(PROTOCOL);
     }
 
     public String getUrl() {
-        return url;
+        return getAttribute(SPECIFIED_URL);
+    }
+
+    public AttributeSensor getPortNumberSensor() {
+        return getAttribute(PORT_NUMBER_SENSOR);
     }
 
     @Description("Forces reload of the configuration")
     public abstract void reload();
+
+    protected String inferProtocol(String url) {
+    	if (url!=null && !url.startsWith("null:")) {
+    		return url.substring(0, url.indexOf(':'));
+    	} else {
+    		return inferProtocol();
+    	}
+    }
     
-    protected void makeUrl() {
-        if (url==null || url.contains("://"+ANONYMOUS+":")) {
-            String hostname = domain;
-            // use 'hostname' instead of domain if domain is anonymous
-            if (hostname==null || hostname==ANONYMOUS) {
-                hostname = getAttribute(HOSTNAME);
-                if (hostname!=null) {
-                    domain = hostname;
-                    setConfigEvenIfOwned(DOMAIN_NAME, hostname);
-                    setAttribute(DOMAIN_NAME, hostname);
-                } else {
-                    LOG.warn("Unable to determine domain/hostname for "+this);
-                }
-            }
-            if (hostname==null) hostname = ANONYMOUS;
-            if (protocol==null) {
-                if (url!=null && !url.startsWith("null:")) protocol = url.substring(0, url.indexOf(':'));
-                else protocol = getConfig(SSL_CONFIG)!=null ? "https" : "http";
+    protected String inferProtocol() {
+    	return getConfig(SSL_CONFIG)!=null ? "https" : "http";
+    }
+    
+    protected String inferHostname() {
+        String hostname = getDomain();
+        // use 'hostname' instead of domain if domain is anonymous
+        if (hostname==null || hostname.equals(ANONYMOUS)) {
+            hostname = getAttribute(HOSTNAME);
+            if (hostname == null) {
+                LOG.warn("Unable to determine domain/hostname for {}", this);
             }
-            url = protocol+"://"+hostname+":"+port+"/";
-            setAttribute(SPECIFIED_URL, url);
         }
+        if (hostname==null) hostname = ANONYMOUS;
+        
+        return hostname;
+    }
+    
+    protected String inferUrl() {
+        return getProtocol()+"://"+getDomain()+":"+getPort()+"/";
     }
     
     @Override
@@ -191,24 +200,24 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         super.preStart();
         
         // use http port by default
-        portNumber = checkNotNull(getConfig(PORT_NUMBER_SENSOR));
-
-        port = getAttribute(PROXY_HTTP_PORT);
-        Preconditions.checkNotNull(port, "Port must be set for controller");
+        checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
         
-        protocol = getConfig(PROTOCOL);
-        domain = getConfig(DOMAIN_NAME);
-
-        if (!groovyTruth(getConfig(SPECIFIED_URL))) {
+        if (groovyTruth(getConfig(SPECIFIED_URL))) {
             // previously we would attempt to infer values from a specified URL, but now we don't
             // as that specified URL might be for another machine with port-forwarding
+            setAttribute(PROTOCOL, inferProtocol(getConfig(SPECIFIED_URL)));
+            setAttribute(HOSTNAME, inferHostname());
+            setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
+            setAttribute(SPECIFIED_URL, getConfig(SPECIFIED_URL));
+
         } else {
-            makeUrl();
+            setAttribute(PROTOCOL, inferProtocol());
+            setAttribute(HOSTNAME, inferHostname());
+            setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
+            setAttribute(SPECIFIED_URL, inferUrl());
         }
-        setAttribute(PROTOCOL, protocol);
-        setAttribute(DOMAIN_NAME, domain);
         
-        Preconditions.checkNotNull(domain, "Domain must be set for controller");
+        Preconditions.checkNotNull(getDomain(), "Domain must be set for controller");
     }
     
     public void checkEntity(Entity member) {
@@ -247,7 +256,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
             MachineLocation machine = (MachineLocation) loc;
             //use hostname as this is more portable (eg in amazon, ip doesn't resolve)
             String ip = machine.getAddress().getHostName();
-            Integer port = member.getAttribute(portNumber);
+            Integer port = member.getAttribute(getPortNumberSensor());
             if (ip==null || port==null) {
                 LOG.warn("Missing ip/port for web controller {} target {}, skipping", this, member);
             } else {
@@ -260,9 +269,6 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         }
         LOG.info("Adding to {}, new member {} in locations {}", new Object[] {getDisplayName(), member.getDisplayName(), member.getLocations()});
         
-        // TODO shouldn't need to do this here? (no harm though)
-        makeUrl();
-        
         update();
         targets.add(member);
     }
@@ -274,7 +280,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         for (Location loc : member.getLocations()) {
             MachineLocation machine = (MachineLocation) loc;
             String ip = machine.getAddress().getHostAddress();
-            int port = member.getAttribute(portNumber);
+            int port = member.getAttribute(getPortNumberSensor());
             addresses.remove(ip+":"+port);
         }
         if (addresses==oldAddresses) {
@@ -304,7 +310,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     protected abstract void reconfigureService();
     
     public void update() {
-        if (!isActive) updateNeeded = true;
+        if (!isActive()) updateNeeded = true;
         else {
             updateNeeded = false;
             LOG.debug("Updating {} in response to changes", this);

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e9a81a1/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 824fc34..7324bf6 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -23,7 +23,6 @@ import brooklyn.util.ResourceUtils
 import brooklyn.util.flags.SetFromFlag
 import brooklyn.util.internal.TimeExtras
 
-import com.google.common.base.Predicates
 import com.google.common.collect.Iterables
 import com.google.common.collect.LinkedHashMultimap
 import com.google.common.collect.Multimap
@@ -107,8 +106,6 @@ public class NginxController extends AbstractController {
     public void connectSensors() {
         super.connectSensors();
         
-        makeUrl();
-        
         sensorRegistry.register(new ConfigSensorAdapter());
         
         HttpSensorAdapter http = sensorRegistry.register(
@@ -134,11 +131,6 @@ public class NginxController extends AbstractController {
         setAttribute(SERVICE_UP, false);
     }
     
-    protected void makeUrl() {
-        super.makeUrl();
-        setAttribute(ROOT_URL, url);
-    }
-    
     @Override
     public Class getDriverInterface() {
         return NginxDriver.class;
@@ -150,6 +142,7 @@ public class NginxController extends AbstractController {
     
     protected void preStart() {
         super.preStart();
+        setAttribute(ROOT_URL, getUrl());
     }
     
     protected void reconfigureService() {


[28/50] brooklyn-library git commit: Merge pull request #337 from aledsage/feature/https-config-for-webapps

Posted by he...@apache.org.
Merge pull request #337 from aledsage/feature/https-config-for-webapps

https support for java web-apps

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

Branch: refs/heads/0.4.0
Commit: c9fbd49d8e0494ea3a94494934820ef8676a2b8f
Parents: 4eff322 5b528bf
Author: ahgittin <al...@cloudsoftcorp.com>
Authored: Tue Oct 9 01:49:11 2012 -0700
Committer: ahgittin <al...@cloudsoftcorp.com>
Committed: Tue Oct 9 01:49:11 2012 -0700

----------------------------------------------------------------------
 .../entity/webapp/JavaWebAppDriver.java         |  9 ++++-
 .../entity/webapp/JavaWebAppSshDriver.java      | 39 +++++++++++++++++++-
 .../entity/webapp/WebAppServiceConstants.java   | 12 ++++++
 .../entity/webapp/tomcat/TomcatServer.java      |  2 +-
 4 files changed, 57 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[18/50] brooklyn-library git commit: Adds dependencies so that it works on centos

Posted by he...@apache.org.
Adds dependencies so that it works on centos


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

Branch: refs/heads/0.4.0
Commit: f88f82a69a30a00facadc9644c825158c18cb7aa
Parents: 4e8721c
Author: Peter Veentjer <al...@gmail.com>
Authored: Thu Oct 4 15:08:44 2012 +0300
Committer: Peter Veentjer <al...@gmail.com>
Committed: Thu Oct 4 15:08:44 2012 +0300

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy     | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f88f82a6/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 1e84b67..98d1145 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -65,6 +65,9 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         String saveAs  = "${basename}.tar.gz"
         List<String> commands = new LinkedList<String>();
         commands.add(CommonCommands.INSTALL_TAR);
+        commands.add(CommonCommands.installPackage("libgcc_s.so.1"))                   ;
+        commands.add(CommonCommands.installPackage("libaio.so.1"))
+        commands.add(CommonCommands.installPackage("libncurses.so.5"))
         commands.add("(which apt-get && "+CommonCommands.sudo("apt-get install libaio1")+") || echo skipping libaio installation");
         commands.addAll(CommonCommands.downloadUrlAs(url, getEntityVersionLabel('/'), saveAs));
         commands.add("tar xfvz ${saveAs}");


[25/50] brooklyn-library git commit: nginx preinstalled key/certificate: added validation for when destination/source in proxysslconfig is null. Added an integration tests where the https functionality with pre-existing key/certificate is tested

Posted by he...@apache.org.
nginx preinstalled key/certificate: added validation for when destination/source in proxysslconfig is null. Added an integration tests where the https functionality with pre-existing key/certificate is tested


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

Branch: refs/heads/0.4.0
Commit: 2ff614f1c0c2f1d34355f2b5bcf0bef70855626d
Parents: af388f5
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Mon Oct 8 16:04:34 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Mon Oct 8 16:04:34 2012 +0300

----------------------------------------------------------------------
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 20 ++++---
 .../entity/proxy/nginx/NginxController.groovy   | 19 ++++++-
 .../nginx/NginxHttpsSslIntegrationTest.groovy   | 56 +++++++++++++++++++-
 3 files changed, 84 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ff614f1/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
index 3ed4149..e7f75f3 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
@@ -27,17 +27,23 @@ public class ProxySslConfig implements Serializable {
     String sourceKeyUrl;
 
     /**
-     * Sets the ssl_certificate path to be used. If set to null, Brooklyn will take control. If explicitly set
-     * this value will be placed in the ssl_certificate. Setting this field is useful if there is a certificate on the
-     * nginx machine you want to make use of.
+     * Sets the ssl_certificate path to be used within the generated LoadBalancer configuration. If set to null,
+     * Brooklyn will use an auto generated path.
+     *
+     * If sourceCertificateUrl, then Brooklyn will copy the certificate the certificateDestination.
+     *
+     * Setting this field is useful if there is a certificate on the nginx machine you want to make use of.
      */
     String certificateDestination;
 
     /**
-      * Sets the ssl_certificate_key path to be used. If set to null, Brooklyn will take control. If explicitly set
-      * this value will be placed in the ssl_certificate_key. Setting this field is useful if there is a certificate_key
-     * on the nginx machine you want to make use of.
-      */
+     * Sets the ssl_certificate_key path to be used within the generated LoadBalancer configuration. If set to null,
+     * Brooklyn will use an auto generated path.
+     *
+     * If sourceKeyUrl, then Brooklyn will copy the certificate the keyDestination.
+     *
+     * Setting this field is useful if there is a certificate_key on the nginx machine you want to make use of.
+     */
     String keyDestination;
 
     /** whether the downstream server (if mapping) also expects https; default false */

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ff614f1/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 8646a5e..63c0319 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -50,7 +50,7 @@ public class NginxController extends AbstractController {
        
     @SetFromFlag("version")
     public static final BasicConfigKey<String> SUGGESTED_VERSION =
-        new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "1.3.0");
+        new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "1.3.7");
 
     @SetFromFlag("sticky")
     public static final BasicConfigKey<Boolean> STICKY =
@@ -210,7 +210,11 @@ public class NginxController extends AbstractController {
         
         ProxySslConfig globalSslConfig = getConfig(SSL_CONFIG);
         boolean ssl = globalSslConfig != null;
-        if (ssl) appendSslConfig("global", config, "    ", globalSslConfig, true, true);
+
+        if (ssl) {
+            verifyConfig(globalSslConfig)
+            appendSslConfig("global", config, "    ", globalSslConfig, true, true)
+        };
         
         // If no servers, then defaults to returning 404
         // TODO Give nicer page back 
@@ -277,6 +281,7 @@ public class NginxController extends AbstractController {
             for (UrlMapping mappingInDomain : mappingsByDomain.get(domain)) {
                 ProxySslConfig sslConfig = mappingInDomain.getConfig(UrlMapping.SSL_CONFIG);
                 if (sslConfig!=null) {
+                    verifyConfig(sslConfig)
                     if (localSslConfig!=null) {
                         if (localSslConfig.equals(sslConfig)) {
                             //ignore identical config specified on multiple mappings
@@ -341,6 +346,16 @@ public class NginxController extends AbstractController {
         return config.toString();
     }
 
+    void verifyConfig(ProxySslConfig proxySslConfig) {
+        if (proxySslConfig.keyDestination == null &&  proxySslConfig.sourceKeyUrl == null){
+            throw new IllegalStateException("ProxySslConfig can't have a null keyDestination and null sourceKeyUrl. One or both need to be set")
+        }
+
+        if(proxySslConfig.certificateDestination == null && proxySslConfig.sourceCertificateUrl == null){
+            throw new IllegalStateException("ProxySslConfig can't have a null certificateDestination and null sourceCertificateUrl. One or both need to be set")
+        }
+    }
+
     public boolean appendSslConfig(String id, StringBuilder out, String prefix, ProxySslConfig ssl,
                                    boolean sslBlock, boolean certificateBlock) {
         if (ssl == null) return false;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2ff614f1/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
index 8ab3413..7b38635 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
@@ -50,17 +50,18 @@ public class NginxHttpsSslIntegrationTest {
      * Test that the Nginx proxy starts up and sets SERVICE_UP correctly.
      */
     @Test(groups = "Integration")
-    public void testStartsWithGlobalSsl() {
+    public void testStartsWithGlobalSsl_withCertificateAndKeyCopy() {
         def template = { Map properties -> new JBoss7Server(properties) }
         cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
         cluster.setConfig(JavaWebAppService.ROOT_WAR, WAR_URL)
         
         ProxySslConfig ssl = new ProxySslConfig(sourceCertificateUrl:CERTIFICATE_URL, sourceKeyUrl:KEY_URL);
         nginx = new NginxController(app,
+                sticky: false,
                 cluster: cluster,
                 domain : "localhost",
                 port: "8443+",
-                ssl: ssl 
+                ssl: ssl
             );
         
         app.start([ new LocalhostMachineProvisioningLocation() ])
@@ -91,4 +92,55 @@ public class NginxHttpsSslIntegrationTest {
         assertFalse cluster.getAttribute(SoftwareProcessEntity.SERVICE_UP)
         cluster.members.each { assertFalse it.getAttribute(SoftwareProcessEntity.SERVICE_UP) }
     }
+
+    private String getFile(String file) {
+           return new File(getClass().getResource("/" + file).getFile()).getAbsolutePath();
+       }
+
+    @Test(groups = "Integration")
+    public void testStartsWithGlobalSsl_withPreinstalledCertificateAndKey() {
+           def template = { Map properties -> new JBoss7Server(properties) }
+           cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
+           cluster.setConfig(JavaWebAppService.ROOT_WAR, WAR_URL)
+
+           ProxySslConfig ssl = new ProxySslConfig(
+                   certificateDestination: getFile("ssl/certs/localhost/server.crt"),
+                   keyDestination: getFile("ssl/certs/localhost/server.key"));
+
+           nginx = new NginxController(app,
+                   sticky: false,
+                   cluster: cluster,
+                   domain : "localhost",
+                   port: "8443+",
+                   ssl: ssl
+               );
+
+           app.start([ new LocalhostMachineProvisioningLocation() ])
+
+           String url = nginx.getAttribute(WebAppService.ROOT_URL);
+           if (!url.startsWith("https://")) Assert.fail("URL should be https: "+url);
+
+           executeUntilSucceeds() {
+               // Services are running
+               assertTrue cluster.getAttribute(SoftwareProcessEntity.SERVICE_UP)
+               cluster.members.each { assertTrue it.getAttribute(SoftwareProcessEntity.SERVICE_UP) }
+
+               assertTrue nginx.getAttribute(SoftwareProcessEntity.SERVICE_UP)
+
+               // Nginx URL is available
+               assertTrue urlRespondsWithStatusCode200(url)
+
+               // Web-server URL is available
+               cluster.members.each {
+                   assertTrue urlRespondsWithStatusCode200(it.getAttribute(WebAppService.ROOT_URL))
+               }
+           }
+
+           app.stop()
+
+           // Services have stopped
+           assertFalse nginx.getAttribute(SoftwareProcessEntity.SERVICE_UP)
+           assertFalse cluster.getAttribute(SoftwareProcessEntity.SERVICE_UP)
+           cluster.members.each { assertFalse it.getAttribute(SoftwareProcessEntity.SERVICE_UP) }
+       }
 }


[26/50] brooklyn-library git commit: Nginx ssl config: removed to strict validation where both key-destination/key-url need to be set..key isn't mandatory for nginx ssl configuration

Posted by he...@apache.org.
Nginx ssl config: removed to strict validation where both key-destination/key-url need to be set..key isn't mandatory for nginx ssl configuration


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

Branch: refs/heads/0.4.0
Commit: 4eff32259e3660d56c8f23e307f39ec43ede0501
Parents: 2ff614f
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Mon Oct 8 16:31:18 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Mon Oct 8 16:31:18 2012 +0300

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/nginx/NginxController.groovy | 4 ----
 1 file changed, 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4eff3225/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 63c0319..031ab70 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -347,10 +347,6 @@ public class NginxController extends AbstractController {
     }
 
     void verifyConfig(ProxySslConfig proxySslConfig) {
-        if (proxySslConfig.keyDestination == null &&  proxySslConfig.sourceKeyUrl == null){
-            throw new IllegalStateException("ProxySslConfig can't have a null keyDestination and null sourceKeyUrl. One or both need to be set")
-        }
-
         if(proxySslConfig.certificateDestination == null && proxySslConfig.sourceCertificateUrl == null){
             throw new IllegalStateException("ProxySslConfig can't have a null certificateDestination and null sourceCertificateUrl. One or both need to be set")
         }


[10/50] brooklyn-library git commit: AbstractController: server-pool member monitoring

Posted by he...@apache.org.
AbstractController: server-pool member monitoring

- When getting members of group, get it right from beginning
  rather than waiting for notification events from listener
  (very important for rebind).
- Fix bugs exposed by rebind (e.g. reset cleared addresses but
  not targets, so after a reset we wouldn't re-add addresses
  already in that "target" list).
- Simplify responding to sever-pool membership changes
- Simplify inferring server ip:port
- Avoid unnecessary "rebind" calls, if reconfigureService makes
  no change.
- use "serverPool" instead of "cluster" in calls to controller


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

Branch: refs/heads/0.4.0
Commit: 2b096d667d437f301ba2fff522c859f3c607f99e
Parents: bd32e0d
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 27 09:59:11 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 27 10:28:20 2012 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 226 ++++++++++---------
 .../entity/proxy/nginx/NginxController.groovy   |  14 +-
 .../ControlledDynamicWebAppCluster.groovy       |   2 +-
 .../entity/proxy/AbstractControllerTest.groovy  |  38 ++--
 .../nginx/NginxHttpsSslIntegrationTest.groovy   |   6 +-
 .../proxy/nginx/NginxIntegrationTest.groovy     |  28 +--
 6 files changed, 178 insertions(+), 136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index cf34007..c73a224 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -5,7 +5,6 @@ import static brooklyn.util.JavaGroovyEquivalents.groovyTruth;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.util.Collection;
-import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 
@@ -27,12 +26,11 @@ import brooklyn.event.basic.BasicAttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
 import brooklyn.event.basic.BasicConfigKey;
 import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
-import brooklyn.location.Location;
-import brooklyn.location.MachineLocation;
 import brooklyn.util.MutableMap;
 import brooklyn.util.flags.SetFromFlag;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
 
 /**
  * Represents a controller mechanism for a {@link Cluster}.
@@ -64,18 +62,22 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
 
     public static final BasicAttributeSensor<String> ROOT_URL = WebAppService.ROOT_URL;
     
-    public static final BasicAttributeSensor<Set> TARGETS = new BasicAttributeSensor<Set>(
+    public static final BasicAttributeSensor<Set<String>> SERVER_POOL_TARGETS = new BasicAttributeSensor(
             Set.class, "proxy.targets", "Main set of downstream targets");
     
+    /**
+     * @deprecated Use SERVER_POOL_TARGETS
+     */
+    public static final BasicAttributeSensor<Set<String>> TARGETS = SERVER_POOL_TARGETS;
+    
     public static final MethodEffector<Void> RELOAD = new MethodEffector(AbstractController.class, "reload");
     
-    protected Group serverPool;
     protected boolean isActive;
     protected boolean updateNeeded = true;
 
-    AbstractMembershipTrackingPolicy policy;
-    protected Set<String> addresses = new LinkedHashSet<String>();
-    protected Set<Entity> targets = new LinkedHashSet<Entity>();
+    protected AbstractMembershipTrackingPolicy serverPoolMemberTrackerPolicy;
+    protected Set<String> serverPoolAddresses = Sets.newLinkedHashSet();
+    protected Set<Entity> serverPoolTargets = Sets.newLinkedHashSet();
     
     public AbstractController() {
         this(MutableMap.of(), null, null);
@@ -95,10 +97,10 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     public AbstractController(Map properties, Entity owner, Cluster cluster) {
         super(properties, owner);
 
-        policy = new AbstractMembershipTrackingPolicy(MutableMap.of("name", "Controller targets tracker")) {
-            protected void onEntityChange(Entity member) { checkEntity(member); }
-            protected void onEntityAdded(Entity member) { addEntity(member); }
-            protected void onEntityRemoved(Entity member) { removeEntity(member); }
+        serverPoolMemberTrackerPolicy = new AbstractMembershipTrackingPolicy(MutableMap.of("name", "Controller targets tracker")) {
+            protected void onEntityChange(Entity member) { onServerPoolMemberChanged(member); }
+            protected void onEntityAdded(Entity member) { onServerPoolMemberChanged(member); }
+            protected void onEntityRemoved(Entity member) { onServerPoolMemberChanged(member); }
         };
     }
 
@@ -123,11 +125,19 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
      * Can pass in the 'cluster'.
      */
     public void bind(Map flags) {
-        if (flags.containsKey("cluster")) {
+        if (flags.containsKey("serverPool")) {
+            setConfig(SERVER_POOL, (Group) flags.get("serverPool"));
+            
+        } else if (flags.containsKey("cluster")) {
+            LOG.warn("Deprecated use of AbstractController.cluster: entity {}; value {}", this, flags.get("cluster"));
             setConfig(SERVER_POOL, (Group) flags.get("cluster"));
         }
     }
 
+    private Group getServerPool() {
+        return getConfig(SERVER_POOL);
+    }
+    
     public boolean isActive() {
     	return isActive;
     }
@@ -173,6 +183,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return result;
     }
 
+    @Override
     protected void preStart() {
         super.preStart();
         
@@ -183,19 +194,88 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
     }
     
-    public void checkEntity(Entity member) {
+    @Override
+    protected void postStart() {
+        super.postStart();
+        LOG.info("Adding policy {} to {} on AbstractController.start", serverPoolMemberTrackerPolicy, this);
+        addPolicy(serverPoolMemberTrackerPolicy);
+        reset();
+        isActive = true;
+        update();
+    }
+    
+    protected void preStop() {
+        super.preStop();
+        serverPoolMemberTrackerPolicy.reset();
+    }
+
+    /** 
+     * Implementations should update the configuration so that 'addresses' are targeted.
+     * The caller will subsequently call reload if reconfigureService returned true.
+     * 
+     * @return True if the configuration has been modified (i.e. required reload); false otherwise.
+     */
+    protected abstract boolean reconfigureService();
+    
+    public void update() {
+        if (!isActive()) updateNeeded = true;
+        else {
+            updateNeeded = false;
+            LOG.debug("Updating {} in response to changes", this);
+            boolean modified = reconfigureService();
+            if (modified) {
+                LOG.debug("Reloading {} in response to changes", this);
+                invokeFromJava(RELOAD);
+            } else {
+                LOG.debug("Reconfiguration made no change, so skipping reload", this);
+            }
+        }
+        setAttribute(SERVER_POOL_TARGETS, serverPoolAddresses);
+    }
+
+    protected synchronized void reset() {
+        serverPoolMemberTrackerPolicy.reset();
+        serverPoolAddresses.clear();
+        serverPoolTargets.clear();
+        if (groovyTruth(getServerPool())) {
+            serverPoolMemberTrackerPolicy.setGroup(getServerPool());
+            
+            // Initialize ourselves immediately with the latest set of members; don't wait for
+            // listener notifications because then will be out-of-date for short period (causing 
+            // problems for rebind)
+            for (Entity member : getServerPool().getMembers()) {
+                if (belongsInServerPool(member)) {
+                    if (LOG.isTraceEnabled()) LOG.trace("Done {} checkEntity {}", this, member);
+                    serverPoolTargets.add(member);
+                    String address = getAddressOfEntity(member);
+                    if (address != null) {
+                        serverPoolAddresses.add(address);
+                    }
+                }
+            }
+            
+            LOG.info("Resetting {}, members {} with address {}", new Object[] {this, serverPoolTargets, serverPoolAddresses});
+        }
+        
+        setAttribute(SERVER_POOL_TARGETS, serverPoolAddresses);
+    }
+
+    protected void onServerPoolMemberChanged(Entity member) {
         if (LOG.isTraceEnabled()) LOG.trace("Start {} checkEntity {}", this, member);
-        if (belongs(member)) addEntity(member);
-        else removeEntity(member);
+        if (belongsInServerPool(member)) {
+            addServerPoolMember(member);
+        } else {
+            removeServerPoolMember(member);
+        }
         if (LOG.isTraceEnabled()) LOG.trace("Done {} checkEntity {}", this, member);
     }
     
-    public boolean belongs(Entity member) {
-        if (!member.getAttribute(Startable.SERVICE_UP)) {
+    protected boolean belongsInServerPool(Entity member) {
+        if (!groovyTruth(member.getAttribute(Startable.SERVICE_UP))) {
             LOG.debug("Members of {}, checking {}, eliminating because not up", getDisplayName(), member.getDisplayName());
             return false;
         }
-        if (!serverPool.getMembers().contains(member)) {
+        if (!getServerPool().getMembers().contains(member)) {
             LOG.debug("Members of {}, checking {}, eliminating because not member", getDisplayName(), member.getDisplayName());
             return false;
         }
@@ -203,101 +283,45 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return true;
     }
     
-    //FIXME members locations might be remote?
-    public synchronized void addEntity(Entity member) {
+    protected synchronized void addServerPoolMember(Entity member) {
         if (LOG.isTraceEnabled()) LOG.trace("Considering to add to {}, new member {} in locations {} - "+
-                "waiting for service to be up", new Object[] {getDisplayName(), member.getDisplayName(), member.getLocations()});
-        if (targets.contains(member)) return;
+                "waiting for service to be up", new Object[] {this, member, member.getLocations()});
+        if (serverPoolTargets.contains(member)) return;
         
-        if (!groovyTruth(member.getAttribute(Startable.SERVICE_UP))) {
-            LOG.debug("Members of {}, not adding {} because not yet up", getDisplayName(), member.getDisplayName());
-            return;
+        String address = getAddressOfEntity(member);
+        if (address != null) {
+            serverPoolAddresses.add(address);
         }
-        
-        Set oldAddresses = new LinkedHashSet(addresses);
-        for (Location loc : member.getLocations()) {
-            MachineLocation machine = (MachineLocation) loc;
-            //use hostname as this is more portable (eg in amazon, ip doesn't resolve)
-            String ip = machine.getAddress().getHostName();
-            Integer port = member.getAttribute(getPortNumberSensor());
-            if (ip==null || port==null) {
-                LOG.warn("Missing ip/port for web controller {} target {}, skipping", this, member);
-            } else {
-                addresses.add(ip+":"+port);
-            }
-        }
-        if (addresses==oldAddresses) {
-            if (LOG.isTraceEnabled()) LOG.trace("invocation of {}.addEntity({}) causes no change", this, member);
-            return;
-        }
-        LOG.info("Adding to {}, new member {} in locations {}", new Object[] {getDisplayName(), member.getDisplayName(), member.getLocations()});
+
+        LOG.info("Adding to {}, new member {} with address {}", new Object[] {this, member, address});
         
         update();
-        targets.add(member);
+        serverPoolTargets.add(member);
     }
     
-    public synchronized void removeEntity(Entity member) {
-        if (!targets.contains(member)) return;
+    protected synchronized void removeServerPoolMember(Entity member) {
+        if (LOG.isTraceEnabled()) LOG.trace("Considering to remove from {}, member {} in locations {} - "+
+                "waiting for service to be up", new Object[] {this, member, member.getLocations()});
+        if (!serverPoolTargets.contains(member)) return;
         
-        Set oldAddresses = new LinkedHashSet(addresses);
-        for (Location loc : member.getLocations()) {
-            MachineLocation machine = (MachineLocation) loc;
-            String ip = machine.getAddress().getHostAddress();
-            int port = member.getAttribute(getPortNumberSensor());
-            addresses.remove(ip+":"+port);
-        }
-        if (addresses==oldAddresses) {
-            LOG.debug("when removing from {}, member {}, not found (already removed?)", getDisplayName(), member.getDisplayName());
-            return;
+        String address = getAddressOfEntity(member);
+        if (address != null) {
+            serverPoolAddresses.remove(address);
         }
         
-        LOG.info("Removing from {}, member {} previously in locations {}", 
-                new Object[] {getDisplayName(), member.getDisplayName(), member.getLocations()});
-        update();
-        targets.remove(member);
-    }
-    
-    public void start(Collection<? extends Location> locations) {
-        // TODO Should not add policy before NginxController is properly started; otherwise
-        // get callbacks for addEntity when fields like portNumber are still null.
-        serverPool = getConfig(SERVER_POOL);
-        LOG.info("Adding policy {} to {} on AbstractController.start", policy, this);
-        addPolicy(policy);
-        reset();
-        super.start(locations);
-        isActive = true;
+        LOG.info("Removing from {}, member {} with address {}", new Object[] {this, member, address});
+        
         update();
+        serverPoolTargets.remove(member);
     }
-
-    /** should set up so that 'addresses' are targeted */
-    protected abstract void reconfigureService();
     
-    public void update() {
-        if (!isActive()) updateNeeded = true;
-        else {
-            updateNeeded = false;
-            LOG.debug("Updating {} in response to changes", this);
-            reconfigureService();
-            LOG.debug("Submitting restart for update to {}", this);
-            invokeFromJava(RELOAD);
+    protected String getAddressOfEntity(Entity member) {
+        String ip = member.getAttribute(Attributes.HOSTNAME);
+        Integer port = member.getAttribute(Attributes.HTTP_PORT);
+        if (ip!=null && port!=null) {
+            return ip+":"+port;
         }
-        setAttribute(TARGETS, addresses);
-    }
-
-    public void reset() {
-        policy.reset();
-        addresses.clear();
-        if (groovyTruth(serverPool)) {
-            policy.setGroup(serverPool);
-        }
-        setAttribute(TARGETS, addresses);
-    }
-
-	
-	protected void preStop() {
-		super.preStop();
-        policy.reset();
-        addresses.clear();
-        setAttribute(TARGETS, addresses);
+        LOG.error("Unable to construct hostname:port representation for "+member+"; skipping in "+this);
+        return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index cf5e074..14eeed7 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -136,11 +136,13 @@ public class NginxController extends AbstractController {
         reconfigureService();
     }
     
-    protected void reconfigureService() {
+    @Override
+    protected boolean reconfigureService() {
 
         String cfg = getConfigFile();
-        if (cfg==null) return;
-        if (LOG.isDebugEnabled()) LOG.debug("Reconfiguring {}, targetting {} and {}", this, addresses, findUrlMappings());
+        if (cfg==null) return false;
+        
+        if (LOG.isDebugEnabled()) LOG.debug("Reconfiguring {}, targetting {} and {}", this, serverPoolAddresses, findUrlMappings());
         if (LOG.isTraceEnabled()) LOG.trace("Reconfiguring {}, config file:\n{}", this, cfg);
         
         NginxSshDriver driver = (NginxSshDriver)getDriver();
@@ -153,6 +155,8 @@ public class NginxController extends AbstractController {
             //cache ensures only the first is installed, which is what is assumed below
             installSslKeys(mapping.getDomain(), mapping.getConfig(UrlMapping.SSL_CONFIG));
         }
+        
+        return true;
     }
     
     Set<String> installedKeysCache = [];
@@ -199,12 +203,12 @@ public class NginxController extends AbstractController {
         config.append("  }\n");
         
         // For basic round-robin across the server-pool
-        if (addresses) {
+        if (serverPoolAddresses) {
             config.append(format("  upstream "+getId()+" {\n"))
             if (sticky){
                 config.append("    sticky;\n");
             }
-            for (String address: addresses){
+            for (String address: serverPoolAddresses){
                 config.append("    server "+address+";\n")
             }
             config.append("  }\n")

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
index 91bca59..495dd9d 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
@@ -98,7 +98,7 @@ public class ControlledDynamicWebAppCluster extends AbstractEntity implements St
         
         addOwnedChild(controller);
         this.locations.addAll(locations);
-        controller.bind(cluster:cluster);
+        controller.bind(serverPool:cluster);
         Entities.invokeEffectorList(this, [cluster, controller], Startable.START, [locations:locations]).get();
         
         connectSensors();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
index 87f0f12..c095a96 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.groovy
@@ -13,19 +13,20 @@ import org.testng.annotations.Test
 
 import brooklyn.entity.Entity
 import brooklyn.entity.basic.AbstractApplication
+import brooklyn.entity.basic.Attributes
 import brooklyn.entity.basic.EntityLocal
-import brooklyn.entity.basic.lifecycle.legacy.SshBasedAppSetup
 import brooklyn.entity.driver.MockSshBasedSoftwareSetup
 import brooklyn.entity.group.Cluster
 import brooklyn.entity.group.DynamicCluster
 import brooklyn.entity.trait.Startable
-import brooklyn.event.Sensor
-import brooklyn.event.basic.BasicAttributeSensor
+import brooklyn.event.AttributeSensor
 import brooklyn.location.Location
+import brooklyn.location.MachineLocation
 import brooklyn.location.MachineProvisioningLocation
 import brooklyn.location.basic.FixedListMachineProvisioningLocation
 import brooklyn.location.basic.SshMachineLocation
 import brooklyn.test.entity.TestEntity
+import brooklyn.util.flags.SetFromFlag
 
 class AbstractControllerTest {
 
@@ -53,14 +54,19 @@ class AbstractControllerTest {
         final AtomicInteger invokeCountForStart = new AtomicInteger(0);
         controller = new AbstractController(
                 owner:app, 
-                cluster:cluster, 
-                portNumberSensor:ClusteredEntity.MY_PORT,
+                serverPool:cluster, 
+                portNumberSensor:ClusteredEntity.HTTP_PORT,
                 domain:"mydomain") {
 
             @Override
-            protected void reconfigureService() {
-                log.info "test controller reconfigure, addresses $addresses"
-                if ((addresses && !updates) || (updates && addresses!=updates.last())) updates.add(addresses)
+            protected boolean reconfigureService() {
+                log.info "test controller reconfigure, addresses $serverPoolAddresses"
+                if ((serverPoolAddresses && !updates) || (updates && serverPoolAddresses!=updates.last())) {
+                    updates.add(serverPoolAddresses)
+                    return true;
+                } else {
+                    return false;
+                }
             }
 
             @Override
@@ -84,7 +90,7 @@ class AbstractControllerTest {
         def u = new ArrayList(updates);
         assertEquals(u, [], "expected empty list but got $u")
         
-        child.setAttribute(ClusteredEntity.MY_PORT, 1234)
+        child.setAttribute(ClusteredEntity.HTTP_PORT, 1234)
         child.setAttribute(Startable.SERVICE_UP, true)
         assertEventuallyAddressesMatchCluster()
 
@@ -93,7 +99,7 @@ class AbstractControllerTest {
         executeUntilSucceeds { cluster.ownedChildren.size() == 2 }
         EntityLocal child2 = cluster.ownedChildren.asList().get(1)
         
-        child2.setAttribute(ClusteredEntity.MY_PORT, 1234)
+        child2.setAttribute(ClusteredEntity.HTTP_PORT, 1234)
         child2.setAttribute(Startable.SERVICE_UP, true)
         assertEventuallyAddressesMatchCluster()
     }
@@ -119,7 +125,7 @@ class AbstractControllerTest {
         // Get some children, so we can remove one...
         cluster.resize(2)
         cluster.ownedChildren.each {
-            it.setAttribute(ClusteredEntity.MY_PORT, 1234)
+            it.setAttribute(ClusteredEntity.HTTP_PORT, 1234)
             it.setAttribute(Startable.SERVICE_UP, true)
         }
         assertEventuallyAddressesMatchCluster()
@@ -156,13 +162,19 @@ class ClusteredEntity extends TestEntity {
     public ClusteredEntity(Map flags=[:], Entity owner=null) { super(flags,owner) }
     public ClusteredEntity(Entity owner) { this([:],owner) }
     
-    public static final Sensor<Integer> MY_PORT = new BasicAttributeSensor<Integer>(Integer.class, "port", "My port");
+    @SetFromFlag("hostname")
+    public static final AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
+    
+    @SetFromFlag("port")
+    public static final AttributeSensor<Integer> HTTP_PORT = Attributes.HTTP_PORT;
     
     MachineProvisioningLocation provisioner
     
     public void start(Collection<? extends Location> locs) {
         provisioner = locs.first()
-        locations << provisioner.obtain([:])
+        MachineLocation machine = provisioner.obtain([:]);
+        locations << machine
+        setAttribute(HOSTNAME, machine.address.hostName);
     }
     public void stop() {
         provisioner?.release(firstLocation())

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
index 462f72e..a284054 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
@@ -33,7 +33,9 @@ public class NginxHttpsSslIntegrationTest {
     private NginxController nginx
     private DynamicCluster cluster
 
-    private static String WAR_URL = "classpath://hello-world.war";
+    private static final String WAR_URL = "classpath://hello-world.war";
+    private static final String CERTIFICATE_URL = "classpath://ssl/certs/localhost/server.crt";
+    private static final String KEY_URL = "classpath://ssl/certs/localhost/server.key";
     
     @BeforeMethod(groups = "Integration")
     public void setup() {
@@ -54,7 +56,7 @@ public class NginxHttpsSslIntegrationTest {
         cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
         cluster.setConfig(JavaWebAppService.ROOT_WAR, WAR_URL)
         
-        ProxySslConfig ssl = new ProxySslConfig(certificate:"classpath://ssl/certs/localhost/server.crt", key:"classpath://ssl/certs/localhost/server.key");
+        ProxySslConfig ssl = new ProxySslConfig(certificate:CERTIFICATE_URL, key:KEY_URL);
         nginx = new NginxController(app,
 	            cluster: cluster,
 	            domain : "localhost",

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b096d66/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
index 062164f..5dd7eda 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
@@ -34,7 +34,7 @@ public class NginxIntegrationTest {
 
     private TestApplication app
     private NginxController nginx
-    private DynamicCluster cluster
+    private DynamicCluster serverPool
 
     @BeforeMethod(groups = "Integration")
     public void setup() {
@@ -52,11 +52,11 @@ public class NginxIntegrationTest {
     @Test(groups = "Integration")
     public void testWhenNoServersReturns404() {
         def serverFactory = { throw new UnsupportedOperationException(); }
-        cluster = new DynamicCluster(owner:app, factory:serverFactory, initialSize:0)
+        serverPool = new DynamicCluster(owner:app, factory:serverFactory, initialSize:0)
         
         nginx = new NginxController([
                 "owner" : app,
-                "cluster" : cluster,
+                "serverPool" : serverPool,
                 "domain" : "localhost"
             ])
         
@@ -75,12 +75,12 @@ public class NginxIntegrationTest {
         URL war = getClass().getClassLoader().getResource("hello-world.war")
         Preconditions.checkState war != null, "Unable to locate resource $war"
         
-        cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
-        cluster.setConfig(JavaWebAppService.ROOT_WAR, war.path)
+        serverPool = new DynamicCluster(owner:app, factory:template, initialSize:1)
+        serverPool.setConfig(JavaWebAppService.ROOT_WAR, war.path)
         
         nginx = new NginxController([
 	            "owner" : app,
-	            "cluster" : cluster,
+	            "serverPool" : serverPool,
 	            "domain" : "localhost",
 	            "portNumberSensor" : WebAppService.HTTP_PORT,
             ])
@@ -88,15 +88,15 @@ public class NginxIntegrationTest {
         app.start([ new LocalhostMachineProvisioningLocation() ])
         
         // App-servers and nginx has started
-        assertAttributeEventually(cluster, SoftwareProcessEntity.SERVICE_UP, true);
-        cluster.members.each {
+        assertAttributeEventually(serverPool, SoftwareProcessEntity.SERVICE_UP, true);
+        serverPool.members.each {
             assertAttributeEventually(it, SoftwareProcessEntity.SERVICE_UP, true);
         }
         assertAttributeEventually(nginx, SoftwareProcessEntity.SERVICE_UP, true);
 
         // URLs reachable        
         assertUrlStatusCodeEventually(nginx.getAttribute(NginxController.ROOT_URL), 200);
-        cluster.members.each {
+        serverPool.members.each {
             assertUrlStatusCodeEventually(it.getAttribute(WebAppService.ROOT_URL), 200);
         }
 
@@ -104,8 +104,8 @@ public class NginxIntegrationTest {
 
         // Services have stopped
         assertFalse(nginx.getAttribute(SoftwareProcessEntity.SERVICE_UP));
-        assertFalse(cluster.getAttribute(SoftwareProcessEntity.SERVICE_UP));
-        cluster.members.each {
+        assertFalse(serverPool.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        serverPool.members.each {
             assertFalse(it.getAttribute(SoftwareProcessEntity.SERVICE_UP));
         }
     }
@@ -113,17 +113,17 @@ public class NginxIntegrationTest {
     @Test(groups = "Integration")
     public void testTwoNginxesGetDifferentPorts() {
         def serverFactory = { throw new UnsupportedOperationException(); }
-        cluster = new DynamicCluster(owner:app, factory:serverFactory, initialSize:0)
+        serverPool = new DynamicCluster(owner:app, factory:serverFactory, initialSize:0)
         
         def nginx1 = new NginxController([
                 "owner" : app,
-                "cluster" : cluster,
+                "serverPool" : serverPool,
                 "domain" : "localhost",
                 "port" : "14000+"
             ]);
         def nginx2 = new NginxController([
             "owner" : app,
-            "cluster" : cluster,
+            "serverPool" : serverPool,
             "domain" : "localhost",
             "port" : "14000+"
         ])


[31/50] brooklyn-library git commit: Adds JMX reachable listener, for setting service-down

Posted by he...@apache.org.
Adds JMX reachable listener, for setting service-down

- adds JmxReachableAdapter, for responding to MBean not-reachable
- adds AbstractPollHelper.polledListeners (rather than
  just setting sensors)
- JmxAttributeAdapter:
-- don't wait 15 seconds for MBean to exist during activate
-- and catch exception if connect exception
- tests JmxSensorAdapter for when jmx service/mbean unreachable
- tests/fixes web-apps for kill, that they report service-down


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

Branch: refs/heads/0.4.0
Commit: 34d911fd0eb7bb984e05c0bf9003b6a9fbc16e17
Parents: 8ddba97
Author: Aled Sage <al...@gmail.com>
Authored: Sat Oct 6 15:30:32 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 9 10:01:36 2012 +0100

----------------------------------------------------------------------
 .../entity/webapp/jboss/JBoss6Server.java       | 25 +++++++++++++++-----
 .../entity/webapp/tomcat/TomcatServer.java      | 11 +++++++++
 .../entity/webapp/WebAppIntegrationTest.groovy  | 20 ++++++++++++++++
 3 files changed, 50 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/34d911fd/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
index a8e59e7..5174574 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss6Server.java
@@ -1,5 +1,14 @@
 package brooklyn.entity.webapp.jboss;
 
+import groovy.time.TimeDuration;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.SoftwareProcessEntity;
 import brooklyn.entity.java.UsesJmx;
@@ -12,13 +21,8 @@ import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
 import brooklyn.event.basic.BasicConfigKey;
 import brooklyn.event.basic.MapConfigKey;
 import brooklyn.util.flags.SetFromFlag;
-import groovy.time.TimeDuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import com.google.common.base.Function;
 
 public class JBoss6Server extends JavaWebAppSoftwareProcess implements JavaWebAppService, UsesJmx {
 
@@ -68,6 +72,15 @@ public class JBoss6Server extends JavaWebAppSoftwareProcess implements JavaWebAp
         objectNameAdapter.attribute("requestCount").subscribe(REQUEST_COUNT);
         objectNameAdapter.attribute("processingTime").subscribe(TOTAL_PROCESSING_TIME);
         jmx.objectName("jboss.system:type=Server").attribute("Started").subscribe(SERVICE_UP);
+        
+        // If MBean is unreachable, then mark as service-down
+        jmx.objectName("jboss.system:type=Server").reachable().poll(new Function<Boolean,Void>() {
+                @Override public Void apply(Boolean input) {
+                    if (input != null && Boolean.FALSE.equals(input)) {
+                        setAttribute(SERVICE_UP, false);
+                    }
+                    return null;
+                }});
     }
 
 //    public JBoss6SshDriver newDriver(SshMachineLocation machine) {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/34d911fd/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
index ed71f03..5748f91 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -25,6 +25,8 @@ import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.util.flags.SetFromFlag;
 
+import com.google.common.base.Function;
+
 /**
  * An {@link brooklyn.entity.Entity} that represents a single Tomcat instance.
  */
@@ -87,6 +89,15 @@ public class TomcatServer extends JavaWebAppSoftwareProcess implements JavaWebAp
             }
         };
         connectorObjectNameAdapter.attribute("stateName").subscribe(SERVICE_UP, closure);
+
+        // If MBean is unreachable, then mark as service-down
+        requestProcessorObjectNameAdapter.reachable().poll(new Function<Boolean,Void>() {
+                @Override public Void apply(Boolean input) {
+                    if (input != null && Boolean.FALSE.equals(input)) {
+                        setAttribute(SERVICE_UP, false);
+                    }
+                    return null;
+                }});
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/34d911fd/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
index 326c6a2..85aa1c7 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
@@ -170,6 +170,26 @@ public class WebAppIntegrationTest {
     }
     
     /**
+     * Checks an entity can start, set SERVICE_UP to true and shutdown again.
+     */
+    @Test(groups = "Integration", dataProvider = "basicEntities")
+    public void testReportsServiceDownWhenKilled(SoftwareProcessEntity entity) {
+        this.entity = entity
+        log.info("test=testReportsServiceDownWithKilled; entity="+entity+"; app="+entity.getApplication())
+        
+        entity.start([ new LocalhostMachineProvisioningLocation(name:'london') ])
+        executeUntilSucceeds(timeout: 120*SECONDS) {
+            assertTrue entity.getAttribute(Startable.SERVICE_UP)
+        }
+        
+        entity.getDriver().kill();
+
+        executeUntilSucceeds {
+            assertFalse(entity.getAttribute(Startable.SERVICE_UP))
+        }
+    }
+    
+    /**
      * Checks that an entity correctly sets request and error count metrics by
      * connecting to a non-existent URL several times.
      */


[34/50] brooklyn-library git commit: Fixes an issue with the Tomcat7SshDriver where a bad tar install command is given.. tar xvzf is installed.. instead of tar

Posted by he...@apache.org.
Fixes an issue with the Tomcat7SshDriver where a bad tar install command is given.. tar xvzf is installed.. instead of tar


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

Branch: refs/heads/0.4.0
Commit: 425daf7f0783e48c7226e023045fbe42c8cfbe6b
Parents: 4eff322
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Tue Oct 9 16:46:55 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Tue Oct 9 16:46:55 2012 +0300

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/425daf7f/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
index 63cc155..40fc468 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/Tomcat7SshDriver.java
@@ -45,7 +45,7 @@ public class Tomcat7SshDriver extends JavaWebAppSshDriver implements Tomcat7Driv
 
         List<String> commands = new LinkedList<String>();
         commands.addAll(CommonCommands.downloadUrlAs(url, getEntityVersionLabel("/"), saveAs));
-        commands.add(CommonCommands.installExecutable("tar xvzf"));
+        commands.add(CommonCommands.installExecutable("tar"));
         commands.add(format("tar xvzf %s",saveAs));
 
         newScript(INSTALLING).


[30/50] brooklyn-library git commit: Merge pull request #342 from pveentjer/nginx-copy-key-and-certificate-config

Posted by he...@apache.org.
Merge pull request #342 from pveentjer/nginx-copy-key-and-certificate-config

ProxySslConfig is able to deal the same with empty string, white space s...

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

Branch: refs/heads/0.4.0
Commit: 0024c88f70f6d9a1658599fe3d7855c471b54151
Parents: c9fbd49 44556c4
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 9 01:51:07 2012 -0700
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 9 01:51:07 2012 -0700

----------------------------------------------------------------------
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 14 +++++-----
 .../entity/proxy/nginx/NginxController.groovy   | 28 +++++++++++---------
 .../nginx/NginxHttpsSslIntegrationTest.groovy   |  4 ++-
 3 files changed, 25 insertions(+), 21 deletions(-)
----------------------------------------------------------------------



[46/50] brooklyn-library git commit: bump to tomcat v 7.0.34 (since 7.0.32 no longer available)

Posted by he...@apache.org.
bump to tomcat v 7.0.34 (since 7.0.32 no longer available)


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

Branch: refs/heads/0.4.0
Commit: 1686840b94885d017e905de0f10b22b0fe542b0e
Parents: 95e1aac
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Jan 4 16:00:35 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Jan 4 17:30:53 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/1686840b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
index 5a120c2..e4252f6 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -35,7 +35,7 @@ public class TomcatServer extends JavaWebAppSoftwareProcess implements JavaWebAp
 
     @SetFromFlag("version")
     public static final BasicConfigKey<String> SUGGESTED_VERSION =
-            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.32");
+            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.34");
 
     /**
      * Tomcat insists on having a port you can connect to for the sole purpose of shutting it down.


[05/50] brooklyn-library git commit: fix integration test undeploy argument

Posted by he...@apache.org.
fix integration test undeploy argument


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

Branch: refs/heads/0.4.0
Commit: 98c29a33601b4218253a080ef0ad562927ad0bdd
Parents: 22de8c5
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Sep 20 18:25:03 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Sep 20 18:25:03 2012 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java    | 3 ++-
 .../test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98c29a33/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
index 5c3c430..ffc98db 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSoftwareProcess.java
@@ -124,7 +124,8 @@ public abstract class JavaWebAppSoftwareProcess extends SoftwareProcessEntity im
         }
     }
 
-    @Description("Undeploys the given artifact")
+    /** For the DEPLOYED_WARS to be updated, the input must match the result of the call to deploy */ 
+    @Description("Undeploys the given context/artifact")
     public void undeploy(
             @NamedParameter("targetName") String targetName) {
         try {

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/98c29a33/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
index aed1b2f..326c6a2 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppIntegrationTest.groovy
@@ -418,7 +418,7 @@ public class WebAppIntegrationTest {
         }
         
         // And undeploying
-        entity.undeploy("myartifactname.war")
+        entity.undeploy("/myartifactname")
         executeUntilSucceeds(abortOnError:false, timeout:60*SECONDS) {
             // TODO get this URL from a WAR file entity
             assertEquals(urlRespondsStatusCode(entity.getAttribute(WebAppService.ROOT_URL)+"myartifactname"+urlSubPathToPageToQuery), 404);


[15/50] brooklyn-library git commit: global-web example uses launcher DSL (flexible ports), and improve README

Posted by he...@apache.org.
global-web example uses launcher DSL (flexible ports), and improve README


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

Branch: refs/heads/0.4.0
Commit: 612721071547e99a9f95ec39839fe901b27d8f79
Parents: 6e62d4c
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Sep 27 11:43:11 2012 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 28 00:21:23 2012 -0400

----------------------------------------------------------------------
 examples/global-web-fabric/README.txt              | 16 +++++++++-------
 .../brooklyn/demo/GlobalWebFabricExample.groovy    | 17 +++++++++--------
 2 files changed, 18 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/61272107/examples/global-web-fabric/README.txt
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/README.txt b/examples/global-web-fabric/README.txt
index de4978a..700145c 100644
--- a/examples/global-web-fabric/README.txt
+++ b/examples/global-web-fabric/README.txt
@@ -1,16 +1,16 @@
 Instructions for running examples
 =================================
 
-The commands below assume that the `brooklyn` script is already on your $PATH, and you are in the "examples" directory:
+The commands below assume that the `brooklyn` script is on your $PATH, this project has been built,
+and you are in this directory.  Adjust to taste for other configurations.
 
-  cd global-web-fabric
   export BROOKLYN_CLASSPATH=$(pwd)/target/classes
 
-  # Launch the app on localhost
-  brooklyn launch --app brooklyn.demo.GlobalWebFabricExample --location locahost
-
   # Launch the app in aws-ec2 regions eu-west-1 and us-east-1
-  brooklyn launch --app brooklyn.demo.SingleWebServerExample --location "aws-ec2:eu-west-1,aws-ec2:us-east-1"
+  brooklyn launch --app brooklyn.demo.GlobalWebFabricExample --location "aws-ec2:eu-west-1,aws-ec2:us-east-1"
+
+  # Launch the app in aws-ec2 regions eu-west-1 and us-east-1, and use an AppFog cloudfoundry account in AWS US-West
+  brooklyn launch --app brooklyn.demo.GlobalWebFabricExample --location "aws-ec2:eu-west-1,aws-ec2:us-east-1,cloudfoundry:https://api.aws.af.cm/"
 
 ---
 
@@ -20,7 +20,9 @@ This file should contain something like:
   brooklyn.jclouds.aws-ec2.identity=AKA50M30N3S1DFR0MAW55
   brooklyn.jclouds.aws-ec2.credential=aT0Ps3cr3tC0D3wh1chAW5w1llG1V3y0uTOus333
 
-Brooklyn defaults to using ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub
+Brooklyn defaults to using ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub.
+
+For Cloud Foundry you must have an AppFog account set up and the CloudFoundry client configured and on the path.
 
 ---
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/61272107/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.groovy
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.groovy b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.groovy
index 635288c..1ae05a2 100644
--- a/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.groovy
+++ b/examples/global-web-fabric/src/main/java/brooklyn/demo/GlobalWebFabricExample.groovy
@@ -60,16 +60,17 @@ class GlobalWebFabricExample extends AbstractApplication {
 
         
     public static void main(String[] argv) {
+        GlobalWebFabricExample app = new GlobalWebFabricExample(name: 'Brooklyn Global Web Fabric Example');
+        
         ArrayList args = new ArrayList(Arrays.asList(argv));
-        int port = CommandLineUtil.getCommandLineOptionInt(args, "--port", 8081);
-        List<Location> locations = new LocationRegistry().getLocationsById(args ?: DEFAULT_LOCATIONS)
+        BrooklynLauncher.newLauncher().
+                webconsolePort( CommandLineUtil.getCommandLineOption(args, "--port", "8081+") ).
+                managing(app).
+                launch();
 
-        GlobalWebFabricExample app = new GlobalWebFabricExample(name: 'Brooklyn Global Web Fabric Example');
-            
-        BrooklynLauncher.manage(app, port)
-        app.start(locations)
-        Entities.dumpInfo(app)
+        List<Location> locations = new LocationRegistry().getLocationsById(args ?: DEFAULT_LOCATIONS);
+        app.start(locations);
+        Entities.dumpInfo(app);
     }
-    
         
 }


[43/50] brooklyn-library git commit: oi!? mysql needs async *io*

Posted by he...@apache.org.
oi!? mysql needs async *io*


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

Branch: refs/heads/0.4.0
Commit: 12b435f57a3f6b9389ec01e8ab5f02d264e6460c
Parents: ece5cb0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Oct 30 12:50:22 2012 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Oct 30 12:53:58 2012 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/12b435f5/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 67b4bf4..8b09c5d 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -65,7 +65,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         String saveAs  = "${basename}.tar.gz"
         List<String> commands = new LinkedList<String>();
         commands.add(CommonCommands.INSTALL_TAR);
-        commands.add(CommonCommands.installPackage(yum: "libgcc_s.so.1 libaoi.so.1 libncurses.so.5", apt: "libaoi1", null));
+        commands.add(CommonCommands.installPackage(yum: "libgcc_s.so.1 libaio.so.1 libncurses.so.5", apt: "libaio1", null));
         commands.addAll(CommonCommands.downloadUrlAs(url, getEntityVersionLabel('/'), saveAs));
         commands.add("tar xfvz ${saveAs}");
 


[42/50] brooklyn-library git commit: bump mysql version

Posted by he...@apache.org.
bump mysql version


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

Branch: refs/heads/0.4.0
Commit: ece5cb0f291dc31c9f09028ca64d346af28a0571
Parents: 0f5c12a
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Oct 23 03:09:31 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Oct 23 03:09:31 2012 +0100

----------------------------------------------------------------------
 .../src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ece5cb0f/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
index 99d53dc..da1600a 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
@@ -14,7 +14,7 @@ public class MySqlNode extends SoftwareProcessEntity {
 
     // NOTE MySQL changes the minor version number of their GA release frequently, check for latest version if install fails
     @SetFromFlag("version")
-    public static final BasicConfigKey<String> SUGGESTED_VERSION = [ SoftwareProcessEntity.SUGGESTED_VERSION, "5.5.25a" ]
+    public static final BasicConfigKey<String> SUGGESTED_VERSION = [ SoftwareProcessEntity.SUGGESTED_VERSION, "5.5.28" ]
 
     @SetFromFlag("port")
     public static final PortAttributeSensorAndConfigKey MYSQL_PORT = [ "mysql.port", "MySQL port", PortRanges.fromString("3306, 13306+") ]


[14/50] brooklyn-library git commit: remove sensor no longer used

Posted by he...@apache.org.
remove sensor no longer used


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

Branch: refs/heads/0.4.0
Commit: f83a45b5439ca966fb3bd1998ca1714e10496d86
Parents: 6127210
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 28 00:19:47 2012 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 28 00:21:23 2012 -0400

----------------------------------------------------------------------
 .../ControlledDynamicWebAppCluster.groovy       | 26 ++------------------
 1 file changed, 2 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/f83a45b5/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
index f8fa29d..be3a6b0 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
@@ -102,7 +102,6 @@ public class ControlledDynamicWebAppCluster extends AbstractEntity implements St
         Entities.invokeEffectorList(this, [cluster, controller], Startable.START, [locations:locations]).get();
         
         connectSensors();
-        setAttribute(SERVICE_UP, true);
     }
     
     public void stop() {
@@ -121,33 +120,12 @@ public class ControlledDynamicWebAppCluster extends AbstractEntity implements St
         stop();
         start(locations);
     }
-
-    void updateHostnameFromController() {
-        String url = controller.getAttribute(NginxController.ROOT_URL);
-        if (url==null) url = controller.getAttribute(AbstractController.ROOT_URL);
-        if (url==null || url.contains("://"+AbstractController.ANONYMOUS+":") || url.contains("://"+AbstractController.ANONYMOUS+"/")) {
-            //probably isn't necessary, as is done in Nginx?
-            String hostname = controller.getAttribute(HOSTNAME);
-            Object port = controller.getAttribute(AbstractController.PROXY_HTTP_PORT);
-            if (hostname==null || port==null) return;
-            url = "http://"+hostname+":"+port+"/";
-            LOG.warn("Building URL for $this from $controller: $url");
-        }
-        setAttribute(ROOT_URL, url);
-    }
     
     void connectSensors() {
         SensorPropagatingEnricher.newInstanceListeningToAllSensorsBut(cluster, SERVICE_UP, ROOT_URL).
             addToEntityAndEmitAll(this);
-        
-        //following 3 lines (and updateHostname method) unnecessary if above is working, I think
-        controller.subscribe(controller, NginxController.ROOT_URL, { updateHostnameFromController() } as SensorEventListener);
-        controller.subscribe(controller, NginxController.ROOT_URL, { updateHostnameFromController() } as SensorEventListener);
-        controller.subscribe(controller, AbstractController.HOSTNAME, { updateHostnameFromController() } as SensorEventListener);
-        updateHostnameFromController();
-        
-        SensorPropagatingEnricher.newInstanceListeningTo(controller, AbstractController.HOSTNAME, SERVICE_UP).
-        addToEntityAndEmitAll(this);
+        SensorPropagatingEnricher.newInstanceListeningTo(controller, AbstractController.HOSTNAME, SERVICE_UP, ROOT_URL).
+            addToEntityAndEmitAll(this);
     }
 
     public Integer resize(Integer desiredSize) {


[47/50] brooklyn-library git commit: various files which required additional annotations or manual changes for version updates

Posted by he...@apache.org.
various files which required additional annotations or manual changes for version updates


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

Branch: refs/heads/0.4.0
Commit: ff5d3c73ebf8775525a5861284572a1107b7e56b
Parents: 1686840
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Jan 4 15:56:46 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Jan 4 22:50:52 2013 +0000

----------------------------------------------------------------------
 usage/qa/start-monitor.sh    | 1 +
 usage/qa/start-webcluster.sh | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ff5d3c73/usage/qa/start-monitor.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-monitor.sh b/usage/qa/start-monitor.sh
index 03b786f..35bc11c 100755
--- a/usage/qa/start-monitor.sh
+++ b/usage/qa/start-monitor.sh
@@ -7,6 +7,7 @@
 #set -x # debug
 
 CLASS=brooklyn.qa.longevity.Monitor
+# BROOKLYN_VERSION_BELOW
 VERSION=0.4.0-SNAPSHOT
 
 ROOT=$(cd $(dirname $0) && pwd)

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/ff5d3c73/usage/qa/start-webcluster.sh
----------------------------------------------------------------------
diff --git a/usage/qa/start-webcluster.sh b/usage/qa/start-webcluster.sh
index d249051..07faff3 100755
--- a/usage/qa/start-webcluster.sh
+++ b/usage/qa/start-webcluster.sh
@@ -7,6 +7,7 @@
 #set -x # debug
 
 CLASS=brooklyn.qa.longevity.webcluster.WebClusterApp
+# BROOKLYN_VERSION_BELOW
 VERSION=0.4.0-SNAPSHOT
 
 ROOT=$(cd $(dirname $0) && pwd)


[13/50] brooklyn-library git commit: AbstractController server-pool: incorporate more comments

Posted by he...@apache.org.
AbstractController server-pool: incorporate more comments

- see Alex's comments in https://github.com/brooklyncentral/brooklyn/pull/325


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

Branch: refs/heads/0.4.0
Commit: 6e62d4c78b9eeae0a762c45796d82caf06bb9067
Parents: 1684a35
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 27 23:51:32 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 27 23:53:43 2012 +0100

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java    | 2 +-
 .../brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6e62d4c7/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index e8091d3..ad917aa 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -203,7 +203,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
         boolean running = isRunning();
 
         if (!running) {
-            log.debug("Ignoring reload of nginx "+entity+", becausing service is not running (state "+lifecycle+")");
+            log.debug("Ignoring reload of nginx "+entity+", because service is not running (state "+lifecycle+")");
             return;
         }
         

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6e62d4c7/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
index 495dd9d..f8fa29d 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.groovy
@@ -124,7 +124,7 @@ public class ControlledDynamicWebAppCluster extends AbstractEntity implements St
 
     void updateHostnameFromController() {
         String url = controller.getAttribute(NginxController.ROOT_URL);
-        if (url==null) url = controller.getAttribute(AbstractController.SPECIFIED_URL);
+        if (url==null) url = controller.getAttribute(AbstractController.ROOT_URL);
         if (url==null || url.contains("://"+AbstractController.ANONYMOUS+":") || url.contains("://"+AbstractController.ANONYMOUS+"/")) {
             //probably isn't necessary, as is done in Nginx?
             String hostname = controller.getAttribute(HOSTNAME);
@@ -142,7 +142,7 @@ public class ControlledDynamicWebAppCluster extends AbstractEntity implements St
         
         //following 3 lines (and updateHostname method) unnecessary if above is working, I think
         controller.subscribe(controller, NginxController.ROOT_URL, { updateHostnameFromController() } as SensorEventListener);
-        controller.subscribe(controller, NginxController.SPECIFIED_URL, { updateHostnameFromController() } as SensorEventListener);
+        controller.subscribe(controller, NginxController.ROOT_URL, { updateHostnameFromController() } as SensorEventListener);
         controller.subscribe(controller, AbstractController.HOSTNAME, { updateHostnameFromController() } as SensorEventListener);
         updateHostnameFromController();
         


[37/50] brooklyn-library git commit: Merged master for the upgrade to tomcat 7.0.32

Posted by he...@apache.org.
Merged master for the upgrade to tomcat 7.0.32


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

Branch: refs/heads/0.4.0
Commit: 5c18a34cad9004ec5aebea0a6bf3623d96342355
Parents: 7fcabe8 47eac15
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Tue Oct 9 17:10:06 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Tue Oct 9 17:10:06 2012 +0300

----------------------------------------------------------------------
 .../entity/database/mysql/MySqlSshDriver.groovy |  8 +++-
 .../messaging/activemq/ActiveMQSshDriver.groovy |  5 +++
 .../entity/messaging/qpid/QpidSshDriver.groovy  |  5 +++
 .../messaging/rabbit/RabbitSshDriver.groovy     |  5 +++
 .../entity/osgi/karaf/KarafSshDriver.java       |  5 +++
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 14 +++----
 .../entity/proxy/nginx/NginxController.groovy   | 28 +++++++-------
 .../entity/proxy/nginx/NginxSshDriver.java      |  5 +++
 .../entity/webapp/JavaWebAppDriver.java         |  9 ++++-
 .../entity/webapp/JavaWebAppSshDriver.java      | 39 +++++++++++++++++++-
 .../entity/webapp/WebAppServiceConstants.java   | 12 ++++++
 .../entity/webapp/jboss/JBoss6Server.java       | 25 ++++++++++---
 .../entity/webapp/jboss/JBoss6SshDriver.java    |  5 +++
 .../entity/webapp/jboss/JBoss7SshDriver.java    |  6 +++
 .../entity/webapp/tomcat/Tomcat7SshDriver.java  |  6 +++
 .../entity/webapp/tomcat/TomcatServer.java      | 11 ++++++
 .../nginx/NginxHttpsSslIntegrationTest.groovy   |  4 +-
 .../entity/webapp/WebAppIntegrationTest.groovy  | 20 ++++++++++
 18 files changed, 179 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5c18a34c/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------


[23/50] brooklyn-library git commit: Nginx key/cert copying is now configurable; also the destination paths are configurable (useful if there are keys on the nginx environment nginx should make use of, instead of always copying

Posted by he...@apache.org.
Nginx key/cert copying is now configurable; also the destination paths are configurable (useful if there are keys on the nginx environment nginx should make use of, instead of always copying


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

Branch: refs/heads/0.4.0
Commit: af388f516c764186818cd4baba35bd12ed1f5e9a
Parents: c582285
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Sat Oct 6 11:20:50 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Sat Oct 6 11:20:50 2012 +0300

----------------------------------------------------------------------
 .../brooklyn/entity/proxy/ProxySslConfig.groovy | 35 ++++++++---
 .../entity/proxy/nginx/NginxController.groovy   | 62 ++++++++++++++------
 .../nginx/NginxHttpsSslIntegrationTest.groovy   | 11 ++--
 3 files changed, 75 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/af388f51/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
index 91a17d0..3ed4149 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
@@ -22,7 +22,23 @@ public class ProxySslConfig implements Serializable {
      *  (however it will not currently merge multiple certificates.
      *  if conflicting certificates are attempted to be installed nginx will complain.) 
      */
-    String certificate, key;
+    String sourceCertificateUrl;
+
+    String sourceKeyUrl;
+
+    /**
+     * Sets the ssl_certificate path to be used. If set to null, Brooklyn will take control. If explicitly set
+     * this value will be placed in the ssl_certificate. Setting this field is useful if there is a certificate on the
+     * nginx machine you want to make use of.
+     */
+    String certificateDestination;
+
+    /**
+      * Sets the ssl_certificate_key path to be used. If set to null, Brooklyn will take control. If explicitly set
+      * this value will be placed in the ssl_certificate_key. Setting this field is useful if there is a certificate_key
+     * on the nginx machine you want to make use of.
+      */
+    String keyDestination;
 
     /** whether the downstream server (if mapping) also expects https; default false */
     boolean targetIsSsl = false;
@@ -31,12 +47,11 @@ public class ProxySslConfig implements Serializable {
      * corresponds to nginx setting: proxy_ssl_session_reuse on|off */
     boolean reuseSessions = false;
 
-    
     // autogenerated hash code and equals; nothing special required
-    
+
     @Override
     public int hashCode() {
-		return Objects.hashCode(certificate, key, reuseSessions, targetIsSsl);
+        return Objects.hashCode(sourceCertificateUrl, sourceKeyUrl, certificateDestination, keyDestination, reuseSessions, targetIsSsl);
     }
 
     @Override
@@ -48,10 +63,12 @@ public class ProxySslConfig implements Serializable {
         if (getClass() != obj.getClass())
             return false;
         ProxySslConfig other = (ProxySslConfig) obj;
-		
-		return Objects.equal(certificate, other.certificate) &&
-				Objects.equal(key, other.key) &&
-				Objects.equal(reuseSessions, other.reuseSessions) &&
-				Objects.equal(targetIsSsl, other.targetIsSsl);
+
+        return Objects.equal(sourceCertificateUrl, other.sourceCertificateUrl) &&
+               Object.equals(certificateDestination, other.certificateDestination) &&
+               Object.equals(keyDestination, other.keyDestination) &&
+                Objects.equal(sourceKeyUrl, other.sourceKeyUrl) &&
+                Objects.equal(reuseSessions, other.reuseSessions) &&
+                Objects.equal(targetIsSsl, other.targetIsSsl);
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/af388f51/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 2e32eef..8646a5e 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -162,20 +162,31 @@ public class NginxController extends AbstractController {
     }
     
     Set<String> installedKeysCache = [];
-    /** installs SSL keys named as  ID.{crt,key}  where nginx can find them; 
+
+    /** installs SSL keys named as  ID.{crt,key}  where nginx can find them;
      * currently skips re-installs (does not support changing)
      */
     protected void installSslKeys(String id, ProxySslConfig ssl) {
-        if (ssl==null) return;
+        if (ssl == null) return;
+
         if (installedKeysCache.contains(id)) return;
-        NginxSshDriver driver = (NginxSshDriver)getDriver();
-        driver.machine.copyTo(permissions: "0400", 
-            new ResourceUtils(this).getResourceFromUrl(ssl.certificate),
-            driver.getRunDir()+"/conf/"+id+".crt");
-        if (ssl.key!=null)
-            driver.machine.copyTo(permissions: "0400", 
-                new ResourceUtils(this).getResourceFromUrl(ssl.key),
-                driver.getRunDir()+"/conf/"+id+".key");
+
+        NginxSshDriver driver = (NginxSshDriver) getDriver();
+
+        if (ssl.sourceCertificateUrl != null) {
+            String certificateDestination = ssl.certificateDestination == null ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.certificateDestination;
+            driver.machine.copyTo(permissions: "0400",
+                    new ResourceUtils(this).getResourceFromUrl(ssl.sourceCertificateUrl),
+                    certificateDestination);
+        }
+
+        if (ssl.sourceKeyUrl != null) {
+            String keyDestination = ssl.keyDestination == null ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.keyDestination;
+            driver.machine.copyTo(permissions: "0400",
+                    new ResourceUtils(this).getResourceFromUrl(ssl.sourceKeyUrl),
+                    keyDestination);
+        }
+
         installedKeysCache.add(id);
     }
 
@@ -329,10 +340,10 @@ public class NginxController extends AbstractController {
 
         return config.toString();
     }
-    
+
     public boolean appendSslConfig(String id, StringBuilder out, String prefix, ProxySslConfig ssl,
-            boolean sslBlock, boolean certificateBlock) {
-        if (ssl==null) return false;
+                                   boolean sslBlock, boolean certificateBlock) {
+        if (ssl == null) return false;
         if (sslBlock) {
             out.append(prefix);
             out.append("ssl on;\n");
@@ -342,13 +353,28 @@ public class NginxController extends AbstractController {
             out.append("proxy_ssl_session_reuse on;");
         }
         if (certificateBlock) {
-            String cert = ""+id+".crt";
+            String cert;
+            if (ssl.certificateDestination != null) {
+                cert = ssl.certificateDestination;
+            } else {
+                cert = "" + id + ".crt";
+            }
+
             out.append(prefix);
-            out.append("ssl_certificate "+cert+";\n");
-            if (ssl.key!=null) {
-                String key = ""+id+".key";
+            out.append("ssl_certificate " + cert + ";\n");
+
+            String key;
+            if (ssl.keyDestination != null) {
+                key = ssl.keyDestination;
+            } else if (ssl.sourceKeyUrl != null) {
+                key = "" + id + ".key";
+            } else {
+                key = null;
+            }
+
+            if (key != null) {
                 out.append(prefix);
-                out.append("ssl_certificate_key "+key+";\n");
+                out.append("ssl_certificate_key " + key + ";\n");
             }
         }
         return true;

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/af388f51/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
index a284054..8ab3413 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.groovy
@@ -1,7 +1,6 @@
 package brooklyn.entity.proxy.nginx;
 
 import static brooklyn.test.TestUtils.*
-import static java.util.concurrent.TimeUnit.*
 import static org.testng.Assert.*
 
 import org.slf4j.Logger
@@ -56,11 +55,11 @@ public class NginxHttpsSslIntegrationTest {
         cluster = new DynamicCluster(owner:app, factory:template, initialSize:1)
         cluster.setConfig(JavaWebAppService.ROOT_WAR, WAR_URL)
         
-        ProxySslConfig ssl = new ProxySslConfig(certificate:CERTIFICATE_URL, key:KEY_URL);
+        ProxySslConfig ssl = new ProxySslConfig(sourceCertificateUrl:CERTIFICATE_URL, sourceKeyUrl:KEY_URL);
         nginx = new NginxController(app,
-	            cluster: cluster,
-	            domain : "localhost",
-	            port: "8443+",
+                cluster: cluster,
+                domain : "localhost",
+                port: "8443+",
                 ssl: ssl 
             );
         
@@ -81,7 +80,7 @@ public class NginxHttpsSslIntegrationTest {
 
             // Web-server URL is available
             cluster.members.each {
-	            assertTrue urlRespondsWithStatusCode200(it.getAttribute(WebAppService.ROOT_URL))
+                assertTrue urlRespondsWithStatusCode200(it.getAttribute(WebAppService.ROOT_URL))
             }
         }
         


[17/50] brooklyn-library git commit: code review cleanup of Controller so that domain=null means serve all domains

Posted by he...@apache.org.
code review cleanup of Controller so that domain=null means serve all domains


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

Branch: refs/heads/0.4.0
Commit: 4e8721cc17ea215eed68bdaffbed40212f17f813
Parents: 8830359
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 28 13:39:50 2012 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 28 13:39:50 2012 -0400

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 12 ++++--
 .../entity/proxy/nginx/NginxController.groovy   |  9 +---
 .../proxy/nginx/NginxIntegrationTest.groovy     | 43 ++++++++++++++++++++
 3 files changed, 54 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index 4b85c2c..d1e5de3 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -61,7 +61,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     
     @SetFromFlag("domain")
     public static final BasicAttributeSensorAndConfigKey<String> DOMAIN_NAME = new BasicAttributeSensorAndConfigKey<String>(
-            String.class, "proxy.domainName", "Domain name that this controller responds to", null);
+            String.class, "proxy.domainName", "Domain name that this controller responds to, or null if it responds to all domains", null);
         
     @SetFromFlag("ssl")
     public static final BasicConfigKey<ProxySslConfig> SSL_CONFIG = 
@@ -153,6 +153,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getAttribute(PROTOCOL);
     }
 
+    /** returns primary domain this controller responds to, or null if it responds to all domains */
     public String getDomain() {
         return getAttribute(DOMAIN_NAME);
     }
@@ -161,6 +162,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getAttribute(PROXY_HTTP_PORT);
     }
 
+    /** primary URL this controller serves, if one can / has been inferred */
     public String getUrl() {
         return getAttribute(ROOT_URL);
     }
@@ -176,9 +178,12 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getConfig(SSL_CONFIG)!=null ? "https" : "http";
     }
     
+    /** returns URL, if it can be inferred; null otherwise */
     protected String inferUrl() {
         String protocol = checkNotNull(getProtocol(), "protocol must not be null");
-        String domain = checkNotNull(getDomain(), "domain must not be null");
+        String domain = getDomain();
+        if (domain==null) domain = getAttribute(HOSTNAME);
+        if (domain==null) return null;
         Integer port = checkNotNull(getPort(), "port must not be null");
         return protocol+"://"+domain+":"+port+"/";
     }
@@ -195,7 +200,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         super.preStart();
         
         setAttribute(PROTOCOL, inferProtocol());
-        setAttribute(DOMAIN_NAME, elvis(getConfig(DOMAIN_NAME), getAttribute(HOSTNAME)));
+        setAttribute(DOMAIN_NAME);
         setAttribute(ROOT_URL, inferUrl());
         
         checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
@@ -206,6 +211,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         super.postStart();
         LOG.info("Adding policy {} to {} on AbstractController.start", serverPoolMemberTrackerPolicy, this);
         addPolicy(serverPoolMemberTrackerPolicy);
+        if (getUrl()==null) setAttribute(ROOT_URL, inferUrl());
         reset();
         isActive = true;
         update();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index d82c7c1..2e32eef 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -203,7 +203,7 @@ public class NginxController extends AbstractController {
         
         // If no servers, then defaults to returning 404
         // TODO Give nicer page back 
-        if (!isExclusive()) {
+        if (getDomain()!=null || serverPoolAddresses==null || serverPoolAddresses.isEmpty()) {
             config.append("  server {\n");
             config.append("    listen "+getPort()+";\n")
             config.append("    return 404;\n")
@@ -222,7 +222,7 @@ public class NginxController extends AbstractController {
             config.append("  }\n")
             config.append("  server {\n");
             config.append("    listen "+getPort()+";\n")
-            if (!isExclusive())
+            if (getDomain()!=null)
                 config.append("    server_name "+getDomain()+";\n")
             config.append("    location / {\n");
             config.append("      proxy_pass "+(globalSslConfig && globalSslConfig.targetIsSsl ? "https" : "http")+"://"+getId()+";\n");
@@ -364,9 +364,4 @@ public class NginxController extends AbstractController {
         }
     }
 
-    /** true iff this nginx server is routing for exactly one domain with no mappings, with downstream servers; 
-     * in such cases, forward all inbound traffic */    
-    protected boolean isExclusive() {
-        return serverPoolAddresses && !findUrlMappings();
-    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
index 5dd7eda..e2a1a44 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
@@ -110,6 +110,49 @@ public class NginxIntegrationTest {
         }
     }
     
+    /**
+     * Test that the Nginx proxy works, serving all domains, if no domain is set
+     */
+    @Test(groups = "Integration")
+    public void testDomainless() {
+        def template = { Map properties -> new JBoss7Server(properties) }
+        URL war = getClass().getClassLoader().getResource("hello-world.war")
+        Preconditions.checkState war != null, "Unable to locate resource $war"
+        
+        serverPool = new DynamicCluster(owner:app, factory:template, initialSize:1)
+        serverPool.setConfig(JavaWebAppService.ROOT_WAR, war.path)
+        
+        nginx = new NginxController([
+                "owner" : app,
+                "serverPool" : serverPool,
+                "portNumberSensor" : WebAppService.HTTP_PORT,
+            ])
+        
+        app.start([ new LocalhostMachineProvisioningLocation() ])
+        
+        // App-servers and nginx has started
+        assertAttributeEventually(serverPool, SoftwareProcessEntity.SERVICE_UP, true);
+        serverPool.members.each {
+            assertAttributeEventually(it, SoftwareProcessEntity.SERVICE_UP, true);
+        }
+        assertAttributeEventually(nginx, SoftwareProcessEntity.SERVICE_UP, true);
+
+        // URLs reachable
+        assertUrlStatusCodeEventually(nginx.getAttribute(NginxController.ROOT_URL), 200);
+        serverPool.members.each {
+            assertUrlStatusCodeEventually(it.getAttribute(WebAppService.ROOT_URL), 200);
+        }
+
+        app.stop();
+
+        // Services have stopped
+        assertFalse(nginx.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        assertFalse(serverPool.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        serverPool.members.each {
+            assertFalse(it.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        }
+    }
+    
     @Test(groups = "Integration")
     public void testTwoNginxesGetDifferentPorts() {
         def serverFactory = { throw new UnsupportedOperationException(); }


[20/50] brooklyn-library git commit: MySQL Dependency Fixed; the duplicate call for libaoi1 and apt has been removed

Posted by he...@apache.org.
MySQL Dependency Fixed; the duplicate call for libaoi1 and apt has been removed


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

Branch: refs/heads/0.4.0
Commit: c5822852bcf997523168f6681f059e68a2d3b4fc
Parents: eaeb541
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Fri Oct 5 14:56:31 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Fri Oct 5 14:56:31 2012 +0300

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy  | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/c5822852/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 3e84746..9f7b9be 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -66,7 +66,6 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         List<String> commands = new LinkedList<String>();
         commands.add(CommonCommands.INSTALL_TAR);
         commands.add(CommonCommands.installPackage(yum: "libgcc_s.so.1 libaoi.so.1 libncurses.so.5", apt: "libaoi1", null));
-        commands.add("(which apt-get && "+CommonCommands.sudo("apt-get install libaio1")+") || echo skipping libaio installation");
         commands.addAll(CommonCommands.downloadUrlAs(url, getEntityVersionLabel('/'), saveAs));
         commands.add("tar xfvz ${saveAs}");
 


[29/50] brooklyn-library git commit: NginxController; fixes a bug with key copying and null vs isEmpty

Posted by he...@apache.org.
NginxController; fixes a bug with key copying and null vs isEmpty


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

Branch: refs/heads/0.4.0
Commit: 44556c4fd84c5d6aaa91890d5d892f9ab8d81925
Parents: 3192fb8
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Tue Oct 9 11:50:05 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Tue Oct 9 11:50:05 2012 +0300

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/nginx/NginxController.groovy | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/44556c4f/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 884ff15..dc230df 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -176,14 +176,14 @@ public class NginxController extends AbstractController {
         NginxSshDriver driver = (NginxSshDriver) getDriver();
 
         if (!Strings.isEmpty(ssl.certificateSourceUrl)) {
-            String certificateDestination = ssl.certificateDestination == null ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.certificateDestination;
+            String certificateDestination = Strings.isEmpty(ssl.certificateDestination) ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.certificateDestination;
             driver.machine.copyTo(permissions: "0400",
                     new ResourceUtils(this).getResourceFromUrl(ssl.certificateSourceUrl),
                     certificateDestination);
         }
 
         if (!Strings.isEmpty(ssl.keySourceUrl)) {
-            String keyDestination = ssl.keyDestination == null ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.keyDestination;
+            String keyDestination = Strings.isEmpty(ssl.keyDestination) ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.keyDestination;
             driver.machine.copyTo(permissions: "0400",
                     new ResourceUtils(this).getResourceFromUrl(ssl.keySourceUrl),
                     keyDestination);


[36/50] brooklyn-library git commit: Upgraded tomcat to 7.0.32 (since 7.0.29 can't be downloaded anymore)

Posted by he...@apache.org.
Upgraded tomcat to 7.0.32 (since 7.0.29 can't be downloaded anymore)


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

Branch: refs/heads/0.4.0
Commit: 7fcabe8561647fdbaf05f1104f6abb8716c194ab
Parents: 425daf7
Author: Peter Veentjer <pe...@cloudsoft.com>
Authored: Tue Oct 9 17:04:31 2012 +0300
Committer: Peter Veentjer <pe...@cloudsoft.com>
Committed: Tue Oct 9 17:04:31 2012 +0300

----------------------------------------------------------------------
 .../src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/7fcabe85/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
index ed71f03..10c7ecd 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -33,7 +33,7 @@ public class TomcatServer extends JavaWebAppSoftwareProcess implements JavaWebAp
 
     @SetFromFlag("version")
     public static final BasicConfigKey<String> SUGGESTED_VERSION =
-            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.29");
+            new BasicConfigKey<String>(SoftwareProcessEntity.SUGGESTED_VERSION, "7.0.32");
 
     /**
      * Tomcat insists on having a port you can connect to for the sole purpose of shutting it down.


[06/50] brooklyn-library git commit: allow server options to be specified for MySQL, including a convenience for lower_case_table_names

Posted by he...@apache.org.
allow server options to be specified for MySQL, including a convenience for lower_case_table_names


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

Branch: refs/heads/0.4.0
Commit: 71c8f496c477224065352496086b77b702d7511d
Parents: 98c29a3
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 21 11:48:46 2012 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Sep 24 08:31:39 2012 -0400

----------------------------------------------------------------------
 .../java/brooklyn/entity/database/mysql/MySqlNode.groovy    | 8 +++++---
 .../brooklyn/entity/database/mysql/MySqlSshDriver.groovy    | 9 +++++++++
 2 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/71c8f496/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
index e287b73..99d53dc 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.groovy
@@ -1,14 +1,13 @@
 package brooklyn.entity.database.mysql
 
+import brooklyn.config.ConfigKey
 import brooklyn.entity.Entity
 import brooklyn.entity.basic.SoftwareProcessEntity
-
 import brooklyn.event.basic.BasicAttributeSensor
 import brooklyn.event.basic.BasicConfigKey
+import brooklyn.event.basic.MapConfigKey
 import brooklyn.event.basic.PortAttributeSensorAndConfigKey
-
 import brooklyn.location.basic.PortRanges
-
 import brooklyn.util.flags.SetFromFlag
 
 public class MySqlNode extends SoftwareProcessEntity {
@@ -25,6 +24,9 @@ public class MySqlNode extends SoftwareProcessEntity {
 
     @SetFromFlag("creationScriptUrl")
     public static final BasicConfigKey<String> CREATION_SCRIPT_URL = [ String, "mysql.creation.script.url", "URL where MySQL creation script can be found", "" ]
+
+    public static final MapConfigKey<String> MYSQL_SERVER_CONF = [ Object, "mysql.server.conf", "Configuration options for mysqld" ]
+    public static final ConfigKey<Object> MYSQL_SERVER_CONF_LOWER_CASE_TABLE_NAMES = MYSQL_SERVER_CONF.subKey("lower_case_table_names", "See MySQL guide. Set 1 to ignore case in table names (useful for OS portability)");
     
     /** download mirror, if desired; defaults to Austria which seems one of the fastest */
 	@SetFromFlag("mirrorUrl")

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/71c8f496/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
index 81c8001..1e84b67 100644
--- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
+++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.groovy
@@ -107,6 +107,7 @@ port            = ${port}
 socket          = /tmp/mysql.sock.${socketUid}.${port}
 basedir         = ${basedir}
 datadir         = .
+"""+getMySqlServerOptionsString()+"""
 
 """+"END_MYSQL_CONF_${entity.id}\n",
                 "${basedir}/scripts/mysql_install_db "+
@@ -124,6 +125,14 @@ datadir         = .
                 "kill \$MYSQL_PID"
             ).execute();
     }
+    
+    protected String getMySqlServerOptionsString() {
+        Map options = entity.getConfig(MySqlNode.MYSQL_SERVER_CONF);
+        if (!options) return "";
+        String result = "";
+        options.each { k,v -> result += ""+k+" = "+v+"\n" }
+        return result;
+    }
 
     @Override
     public void launch() {


[41/50] brooklyn-library git commit: Fixes StackOverflow in ProxySslConfig.equals

Posted by he...@apache.org.
Fixes StackOverflow in ProxySslConfig.equals


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

Branch: refs/heads/0.4.0
Commit: 0f5c12ae68f146969d4bb863bc7a51516567e939
Parents: 50756ca
Author: Aled Sage <al...@gmail.com>
Authored: Fri Oct 12 21:33:56 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 16 22:22:55 2012 +0100

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/proxy/ProxySslConfig.groovy    | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0f5c12ae/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
index 0e1fb92..d4ad964 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.groovy
@@ -1,6 +1,6 @@
 package brooklyn.entity.proxy;
 
-import com.google.common.base.Objects;
+import com.google.common.base.Objects
 
 public class ProxySslConfig implements Serializable {
 
@@ -62,8 +62,6 @@ public class ProxySslConfig implements Serializable {
 
     @Override
     public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
         if (obj == null)
             return false;
         if (getClass() != obj.getClass())
@@ -71,8 +69,8 @@ public class ProxySslConfig implements Serializable {
         ProxySslConfig other = (ProxySslConfig) obj;
 
         return Objects.equal(certificateSourceUrl, other.certificateSourceUrl) &&
-               Object.equals(certificateDestination, other.certificateDestination) &&
-               Object.equals(keyDestination, other.keyDestination) &&
+                Objects.equal(certificateDestination, other.certificateDestination) &&
+                Objects.equal(keyDestination, other.keyDestination) &&
                 Objects.equal(keySourceUrl, other.keySourceUrl) &&
                 Objects.equal(reuseSessions, other.reuseSessions) &&
                 Objects.equal(targetIsSsl, other.targetIsSsl);


[49/50] brooklyn-library git commit: created bogus empty java files for examples, so that javadoc artifact is created, and build is not rejected by maven central! (cherry-picked from master)

Posted by he...@apache.org.
created bogus empty java files for examples, so that javadoc artifact is created, and build is not rejected by maven central!
(cherry-picked from master)


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

Branch: refs/heads/0.4.0
Commit: 6875ec8fae2be474ed349551dd7d4e699c5d8ca0
Parents: 459a453
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Jan 11 16:43:38 2013 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Jan 14 16:50:53 2013 +0000

----------------------------------------------------------------------
 .../src/main/java/brooklyn/demo/ReadMe.java               | 10 ++++++++++
 .../src/main/java/brooklyn/extras/whirr/ReadMe.java       | 10 ++++++++++
 2 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6875ec8f/examples/global-web-fabric/src/main/java/brooklyn/demo/ReadMe.java
----------------------------------------------------------------------
diff --git a/examples/global-web-fabric/src/main/java/brooklyn/demo/ReadMe.java b/examples/global-web-fabric/src/main/java/brooklyn/demo/ReadMe.java
new file mode 100644
index 0000000..e3bd5ae
--- /dev/null
+++ b/examples/global-web-fabric/src/main/java/brooklyn/demo/ReadMe.java
@@ -0,0 +1,10 @@
+package brooklyn.demo;
+
+public class ReadMe {
+
+/* This class exists only so that javadoc is generated and artifacts can be staged at sonatype for deployment to maven central.
+ * See: https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
+ *
+ * (The actual examples are in other classes in this package / project.) */
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/6875ec8f/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/ReadMe.java
----------------------------------------------------------------------
diff --git a/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/ReadMe.java b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/ReadMe.java
new file mode 100644
index 0000000..3f342f8
--- /dev/null
+++ b/examples/hadoop-and-whirr/src/main/java/brooklyn/extras/whirr/ReadMe.java
@@ -0,0 +1,10 @@
+package brooklyn.extras.whirr;
+
+public class ReadMe {
+
+/* This class exists only so that javadoc is generated and artifacts can be staged at sonatype for deployment to maven central.
+ * See: https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
+ *
+ * (The actual examples are in other classes in this package / project.) */
+
+}