Repository: brooklyn-library
Updated Branches:
  refs/heads/master a0e352de1 -> 7911d295b


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainer.java
----------------------------------------------------------------------
diff --git 
a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainer.java
 
b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainer.java
index e605c08..0d2d522 100644
--- 
a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainer.java
+++ 
b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafContainer.java
@@ -23,15 +23,17 @@ import java.util.Map;
 
 import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.ImplementedBy;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.annotation.Effector;
 import org.apache.brooklyn.core.annotation.EffectorParam;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.config.MapConfigKey;
 import org.apache.brooklyn.core.effector.MethodEffector;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensor;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.java.UsesJava;
 import org.apache.brooklyn.entity.java.UsesJmx;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
@@ -43,95 +45,89 @@ import org.apache.brooklyn.util.core.flags.SetFromFlag;
 @Catalog(name="Karaf", description="Apache Karaf is a small OSGi based runtime 
which provides a lightweight container onto which various components and 
applications can be deployed.", iconUrl="classpath:///karaf-logo.png")
 @ImplementedBy(KarafContainerImpl.class)
 public interface KarafContainer extends SoftwareProcess, UsesJava, UsesJmx {
-    
+
     // TODO Better way of setting/overriding defaults for config keys that are 
defined in super class SoftwareProcess
 
-    public static final String WRAP_SCHEME = "wrap";
-    public static final String FILE_SCHEME = "file";
-    public static final String MVN_SCHEME = "mvn";
-    public static final String HTTP_SCHEME = "http";
+    String WRAP_SCHEME = "wrap";
+    String FILE_SCHEME = "file";
+    String MVN_SCHEME = "mvn";
+    String HTTP_SCHEME = "http";
 
-    public static final MethodEffector<Map<Long,Map<String,?>>> LIST_BUNDLES = 
new MethodEffector(KarafContainer.class, "listBundles");
-    public static final MethodEffector<Long> INSTALL_BUNDLE = new 
MethodEffector<Long>(KarafContainer.class, "installBundle");
-    public static final MethodEffector<Void> UNINSTALL_BUNDLE = new 
MethodEffector<Void>(KarafContainer.class, "uninstallBundle");
-    public static final MethodEffector<Void> INSTALL_FEATURE = new 
MethodEffector<Void>(KarafContainer.class, "installFeature");
-    public static final MethodEffector<Void> UPDATE_SERVICE_PROPERTIES = new 
MethodEffector<Void>(KarafContainer.class, "updateServiceProperties");
+    MethodEffector<Map<Long,Map<String,?>>> LIST_BUNDLES = new 
MethodEffector(KarafContainer.class, "listBundles");
+    MethodEffector<Long> INSTALL_BUNDLE = new 
MethodEffector<Long>(KarafContainer.class, "installBundle");
+    MethodEffector<Void> UNINSTALL_BUNDLE = new 
MethodEffector<Void>(KarafContainer.class, "uninstallBundle");
+    MethodEffector<Void> INSTALL_FEATURE = new 
MethodEffector<Void>(KarafContainer.class, "installFeature");
+    MethodEffector<Void> UPDATE_SERVICE_PROPERTIES = new 
MethodEffector<Void>(KarafContainer.class, "updateServiceProperties");
 
     @SetFromFlag("version")
-    public static final ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(
+    ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(
             SoftwareProcess.SUGGESTED_VERSION, "2.3.0");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "apache-karaf-%s");
+
     @SetFromFlag("downloadUrl")
-    public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL 
= new BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://apache.mirror.anlx.net/karaf/${version}/apache-karaf-${version}.tar.gz";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://apache.mirror.anlx.net/karaf/${version}/apache-karaf-${version}.tar.gz";);
 
     @SetFromFlag("karafName")
-    public static final BasicAttributeSensorAndConfigKey<String> KARAF_NAME = 
new BasicAttributeSensorAndConfigKey<String>(
-            String.class, "karaf.name", "Karaf instance name", "root");
+    AttributeSensorAndConfigKey<String, String> KARAF_NAME = 
ConfigKeys.newStringSensorAndConfigKey(
+            "karaf.name", "Karaf instance name", "root");
 
     // TODO too complicated? Used by KarafContainer; was in JavaApp; where 
should it be in brave new world?
-    public static final MapConfigKey<Map<String,String>> NAMED_PROPERTY_FILES 
= new MapConfigKey(
+    MapConfigKey<Map<String,String>> NAMED_PROPERTY_FILES = new MapConfigKey(
             Map.class, "karaf.runtime.files", "Property files to be generated, 
referenced by name relative to runDir");
 
     @SetFromFlag("jmxUser")
-    public static final BasicAttributeSensorAndConfigKey<String> JMX_USER = 
new BasicAttributeSensorAndConfigKey<String>(
+    AttributeSensorAndConfigKey<String, String> JMX_USER = 
ConfigKeys.newSensorAndConfigKeyWithDefault(
             UsesJmx.JMX_USER, "karaf");
-    
+
     @SetFromFlag("jmxPassword")
-    public static final BasicAttributeSensorAndConfigKey<String> JMX_PASSWORD 
= new BasicAttributeSensorAndConfigKey<String>(
+    AttributeSensorAndConfigKey<String, String> JMX_PASSWORD = 
ConfigKeys.newSensorAndConfigKeyWithDefault(
             UsesJmx.JMX_PASSWORD, "karaf");
-        
+
     @SetFromFlag("jmxPort")
-    public static final PortAttributeSensorAndConfigKey JMX_PORT = new 
PortAttributeSensorAndConfigKey(
+    PortAttributeSensorAndConfigKey JMX_PORT = 
ConfigKeys.newPortSensorAndConfigKeyWithDefault(
             UsesJmx.JMX_PORT, "44444+");
 
     @SetFromFlag("rmiRegistryPort")
-    public static final PortAttributeSensorAndConfigKey RMI_REGISTRY_PORT = 
UsesJmx.RMI_REGISTRY_PORT;
-    
+    PortAttributeSensorAndConfigKey RMI_REGISTRY_PORT = 
UsesJmx.RMI_REGISTRY_PORT;
+
     @SetFromFlag("jmxContext")
-    public static final BasicAttributeSensorAndConfigKey<String> JMX_CONTEXT = 
new BasicAttributeSensorAndConfigKey<String>(
+    AttributeSensorAndConfigKey<String, String> JMX_CONTEXT = 
ConfigKeys.newSensorAndConfigKeyWithDefault(
             UsesJmx.JMX_CONTEXT, 
"karaf-"+KARAF_NAME.getConfigKey().getDefaultValue());
 
-    public static final BasicAttributeSensor<Map> KARAF_INSTANCES = new 
BasicAttributeSensor<Map>(
-            Map.class, "karaf.admin.instances", "Karaf admin instances");
-    public static final BasicAttributeSensor<Boolean> KARAF_ROOT = new 
BasicAttributeSensor<Boolean>(
-            Boolean.class, "karaf.admin.isRoot", "Karaf admin isRoot");
-    public static final BasicAttributeSensor<String> KARAF_JAVA_OPTS = new 
BasicAttributeSensor<String>(
-            String.class, "karaf.admin.java_opts", "Karaf Java opts");
-    public static final BasicAttributeSensor<String> KARAF_INSTALL_LOCATION  = 
new BasicAttributeSensor<String>(
-            String.class, "karaf.admin.location", "Karaf install location");
-    public static final BasicAttributeSensor<Integer> KARAF_PID = new 
BasicAttributeSensor<Integer>(
-            Integer.class, "karaf.admin.pid", "Karaf instance PID");
-    public static final BasicAttributeSensor<Integer> KARAF_SSH_PORT = new 
BasicAttributeSensor<Integer>(
-            Integer.class, "karaf.admin.ssh_port", "Karaf SSH Port");
-    public static final BasicAttributeSensor<Integer> KARAF_RMI_REGISTRY_PORT 
= new BasicAttributeSensor<Integer>(
-            Integer.class, "karaf.admin.rmi_registry_port", "Karaf instance 
RMI registry port");
-    public static final BasicAttributeSensor<Integer> KARAF_RMI_SERVER_PORT = 
new BasicAttributeSensor<Integer>(
-            Integer.class, "karaf.admin.rmi_server_port", "Karaf RMI (JMX) 
server port");
-    public static final BasicAttributeSensor<String> KARAF_STATE = new 
BasicAttributeSensor<String>(
-            String.class, "karaf.admin.state", "Karaf instance state");
+    AttributeSensor<Map> KARAF_INSTANCES = Sensors.newSensor(Map.class, 
"karaf.admin.instances", "Karaf admin instances");
+    AttributeSensor<Boolean> KARAF_ROOT = 
Sensors.newBooleanSensor("karaf.admin.isRoot", "Karaf admin isRoot");
+    AttributeSensor<String> KARAF_JAVA_OPTS = 
Sensors.newStringSensor("karaf.admin.java_opts", "Karaf Java opts");
+    AttributeSensor<String> KARAF_INSTALL_LOCATION  = 
Sensors.newStringSensor("karaf.admin.location", "Karaf install location");
+    AttributeSensor<Integer> KARAF_PID = 
Sensors.newIntegerSensor("karaf.admin.pid", "Karaf instance PID");
+    AttributeSensor<Integer> KARAF_SSH_PORT = 
Sensors.newIntegerSensor("karaf.admin.ssh_port", "Karaf SSH Port");
+    AttributeSensor<Integer> KARAF_RMI_REGISTRY_PORT = 
Sensors.newIntegerSensor("karaf.admin.rmi_registry_port", "Karaf instance RMI 
registry port");
+    AttributeSensor<Integer> KARAF_RMI_SERVER_PORT = 
Sensors.newIntegerSensor("karaf.admin.rmi_server_port", "Karaf RMI (JMX) server 
port");
+    AttributeSensor<String> KARAF_STATE = 
Sensors.newStringSensor("karaf.admin.state", "Karaf instance state");
 
     @Effector(description="Updates the OSGi Service's properties, adding (and 
overriding) the given key-value pairs")
-    public void updateServiceProperties(
-            @EffectorParam(name="serviceName", description="Name of the OSGi 
service") String serviceName, 
+    void updateServiceProperties(
+            @EffectorParam(name="serviceName", description="Name of the OSGi 
service") String serviceName,
             Map<String,String> additionalVals);
-    
+
     @Effector(description="Installs the given OSGi feature")
-    public void installFeature(
-            @EffectorParam(name="featureName", description="Name of the 
feature - see org.apache.karaf:type=features#installFeature()") final String 
featureName) 
+    void installFeature(
+            @EffectorParam(name="featureName", description="Name of the 
feature - see org.apache.karaf:type=features#installFeature()") final String 
featureName)
             throws Exception;
 
     @Effector(description="Lists all the karaf bundles")
-    public Map<Long,Map<String,?>> listBundles();
-    
+    Map<Long,Map<String,?>> listBundles();
+
     /**
      * throws URISyntaxException If bundle name is not a valid URI
      */
     @Effector(description="Deploys the given bundle, returning the bundle id - 
see osgi.core:type=framework#installBundle()")
-    public long installBundle(
+    long installBundle(
             @EffectorParam(name="bundle", description="URI of bundle to be 
deployed") String bundle) throws URISyntaxException;
 
     @Effector(description="Undeploys the bundle with the given id")
-    public void uninstallBundle(
+    void uninstallBundle(
             @EffectorParam(name="bundleId", description="Id of the bundle") 
Long bundleId);
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafSshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafSshDriver.java
 
b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafSshDriver.java
index 35e8c22..1662e87 100644
--- 
a/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafSshDriver.java
+++ 
b/software/osgi/src/main/java/org/apache/brooklyn/entity/osgi/karaf/KarafSshDriver.java
@@ -56,12 +56,6 @@ public class KarafSshDriver extends 
JavaSoftwareProcessSshDriver implements Kara
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(format("apache-karaf-%s", getVersion()))));
-    }
-
-    @Override
     public void install() {
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxController.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxController.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxController.java
index 649973d..939deac 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxController.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxController.java
@@ -20,6 +20,8 @@ package org.apache.brooklyn.entity.proxy.nginx;
 
 import java.util.Map;
 
+import com.google.common.collect.ImmutableMap;
+
 import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.ImplementedBy;
 import org.apache.brooklyn.api.objs.HasShortName;
@@ -29,6 +31,7 @@ import org.apache.brooklyn.core.annotation.Effector;
 import org.apache.brooklyn.core.annotation.EffectorParam;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.MethodEffector;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.proxy.AbstractController;
@@ -36,13 +39,11 @@ import org.apache.brooklyn.entity.proxy.ProxySslConfig;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
 
-import com.google.common.collect.ImmutableMap;
-
 /**
  * An entity that represents an Nginx proxy (e.g. for routing requests to 
servers in a cluster).
  * <p>
  * The default driver *builds* nginx from source (because binaries are not 
reliably available, esp not with sticky sessions).
- * This requires gcc and other build tools installed. The code attempts to 
install them but inevitably 
+ * This requires gcc and other build tools installed. The code attempts to 
install them but inevitably
  * this entity may be more finicky about the OS/image where it runs than 
others.
  * <p>
  * Paritcularly on OS X we require Xcode and command-line gcc installed and on 
the path.
@@ -51,7 +52,7 @@ import com.google.common.collect.ImmutableMap;
  * of configuring nginx.
  * <p>
  * https configuration is supported, with the certificates providable on a 
per-UrlMapping basis or a global basis.
- * (not supported to define in both places.) 
+ * (not supported to define in both places.)
  * per-Url is useful if different certificates are used for different server 
names,
  * or different ports if that is supported.
  * see more info on Ssl in {@link ProxySslConfig}.
@@ -65,11 +66,14 @@ public interface NginxController extends 
AbstractController, HasShortName {
 
     MethodEffector<Void> DEPLOY =
             new MethodEffector<Void>(NginxController.class, "deploy");
-    
+
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION =
             
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "1.8.0");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "nginx-%s");
+
     @SetFromFlag("stickyVersion")
     ConfigKey<String> STICKY_VERSION = ConfigKeys.newStringConfigKey(
             "nginx.sticky.version", "Version of ngnix-sticky-module to be 
installed, if required", "1.2.5");
@@ -79,12 +83,12 @@ public interface NginxController extends 
AbstractController, HasShortName {
             "pcre.version", "Version of PCRE to be installed, if required", 
"8.37");
 
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://nginx.org/download/nginx-${version}.tar.gz";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            "http://nginx.org/download/nginx-${version}.tar.gz";);
 
     @SetFromFlag("downloadAddonUrls")
-    BasicAttributeSensorAndConfigKey<Map<String,String>> DOWNLOAD_ADDON_URLS = 
new BasicAttributeSensorAndConfigKey<Map<String,String>>(
-            SoftwareProcess.DOWNLOAD_ADDON_URLS, ImmutableMap.of(
+    AttributeSensorAndConfigKey<Map<String,String>, Map<String,String>> 
DOWNLOAD_ADDON_URLS =
+            
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_ADDON_URLS,
 ImmutableMap.of(
                     "stickymodule", 
"https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/${addonversion}.tar.gz";,
                     "pcre", 
"ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${addonversion}.tar.gz";));
 
@@ -115,10 +119,10 @@ public interface NginxController extends 
AbstractController, HasShortName {
     ConfigKey<String> STATIC_CONTENT_ARCHIVE_URL = 
ConfigKeys.newStringConfigKey(
             "nginx.config.staticContentArchiveUrl", "The URL of an archive 
file of static content (To be copied to the server)");
 
-    BasicAttributeSensorAndConfigKey<String> ACCESS_LOG_LOCATION = new 
BasicAttributeSensorAndConfigKey<String>(String.class,
+    AttributeSensorAndConfigKey<String, String> ACCESS_LOG_LOCATION = 
ConfigKeys.newStringSensorAndConfigKey(
             "nginx.log.access", "Nginx access log file location", 
"logs/access.log");
 
-    BasicAttributeSensorAndConfigKey<String> ERROR_LOG_LOCATION = new 
BasicAttributeSensorAndConfigKey<String>(String.class,
+    AttributeSensorAndConfigKey<String, String> ERROR_LOG_LOCATION = 
ConfigKeys.newStringSensorAndConfigKey(
             "nginx.log.error", "Nginx error log file location", 
"logs/error.log");
 
     boolean isSticky();
@@ -134,11 +138,11 @@ public interface NginxController extends 
AbstractController, HasShortName {
     Iterable<UrlMapping> getUrlMappings();
 
     boolean appendSslConfig(String id, StringBuilder out, String prefix, 
ProxySslConfig ssl, boolean sslBlock, boolean certificateBlock);
-    
-    public static final AttributeSensor<Boolean> NGINX_URL_ANSWERS_NICELY = 
Sensors.newBooleanSensor( "nginx.url.answers.nicely");
-    public static final AttributeSensor<String> PID_FILE = 
Sensors.newStringSensor( "nginx.pid.file", "PID file");
-    
-    public interface NginxControllerInternal {
+
+    AttributeSensor<Boolean> NGINX_URL_ANSWERS_NICELY = 
Sensors.newBooleanSensor("nginx.url.answers.nicely");
+    AttributeSensor<String> PID_FILE = 
Sensors.newStringSensor("nginx.pid.file", "PID file");
+
+    interface NginxControllerInternal {
         public void doExtraConfigurationDuringStart();
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index 2cdbc91..f308aa8 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -129,12 +129,6 @@ public class NginxSshDriver extends 
AbstractSoftwareProcessSshDriver implements
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(format("nginx-%s", getVersion()))));
-    }
-
-    @Override
     public void install() {
         // inessential here, installation will fail later if it needs to sudo 
(eg if using port 80)
         
DynamicTasks.queueIfPossible(SshTasks.dontRequireTtyForSudo(getMachine(), 
OnFailingTask.WARN_OR_IF_DYNAMIC_FAIL_MARKING_INESSENTIAL)).orSubmitAndBlock();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6Server.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6Server.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6Server.java
index 4b2da35..4c7a5fe 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6Server.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6Server.java
@@ -22,7 +22,7 @@ import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.ImplementedBy;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.entity.java.UsesJmx;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
@@ -36,27 +36,29 @@ public interface JBoss6Server extends 
JavaWebAppSoftwareProcess, UsesJmx {
     // On localhost, if an existing jboss6 is running and consuming the 
required port(s), 
     // then we don't spot that and don't claim a different port.
     // Things then fail silently!
-    
+
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION =
             
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, 
"6.0.0.Final");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "jboss-%s");
+
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-${version}/jboss-as-distribution-${version}.zip?";
 +
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-${version}/jboss-as-distribution-${version}.zip?";
 +
             
"r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjboss%2Ffiles%2FJBoss%2F${version}%2F&ts=1307104229&use_mirror=kent");
 
     @SetFromFlag("bindAddress")
-    BasicAttributeSensorAndConfigKey<String> BIND_ADDRESS =
-            new BasicAttributeSensorAndConfigKey<String>(String.class, 
"jboss6.bind.address", 
+    AttributeSensorAndConfigKey<String, String> BIND_ADDRESS = 
ConfigKeys.newStringSensorAndConfigKey("jboss6.bind.address", 
                 "Address of interface JBoss should listen on, defaulting 
0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)", 
                 "0.0.0.0");
 
     @SetFromFlag("portIncrement")
-    BasicAttributeSensorAndConfigKey<Integer> PORT_INCREMENT =
-            new BasicAttributeSensorAndConfigKey<Integer>(Integer.class, 
"jboss6.portincrement", "Increment to be used for all jboss ports", 0);
+    AttributeSensorAndConfigKey<Integer, Integer> PORT_INCREMENT = 
ConfigKeys.newIntegerSensorAndConfigKey(
+            "jboss6.portincrement", "Increment to be used for all jboss 
ports", 0);
 
     @SetFromFlag("clusterName")
-    BasicAttributeSensorAndConfigKey<String> CLUSTER_NAME =
-            new BasicAttributeSensorAndConfigKey<String>(String.class, 
"jboss6.clusterName", "Identifier used to group JBoss instances", "");
+    AttributeSensorAndConfigKey<String, String> CLUSTER_NAME = 
ConfigKeys.newStringSensorAndConfigKey(
+            "jboss6.clusterName", "Identifier used to group JBoss instances", 
"");
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
index 704fa2a..769337a 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.entity.java.UsesJmx;
 import org.apache.brooklyn.entity.java.UsesJmx.JmxAgentModes;
 import org.apache.brooklyn.entity.webapp.JavaWebAppSshDriver;
@@ -89,12 +88,6 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver 
implements JBoss6Driver
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(format("jboss-%s", getVersion()))));
-    }
-
-    @Override
     public void install() {
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java
index 4fa1656..7cb3e1b 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java
@@ -24,8 +24,7 @@ import org.apache.brooklyn.api.objs.HasShortName;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
-import 
org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
@@ -45,27 +44,29 @@ public interface JBoss7Server extends 
JavaWebAppSoftwareProcess, HasShortName {
     // see https://community.jboss.org/thread/197780
     // 7.2.0.Final should be out during Q3 2012
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "jboss-%s");
+
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
StringAttributeSensorAndConfigKey(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://download.jboss.org/jbossas/7.1/jboss-as-${version}/jboss-as-${version}.tar.gz";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://download.jboss.org/jbossas/7.1/jboss-as-${version}/jboss-as-${version}.tar.gz";);
 
     @SetFromFlag("bindAddress")
-    BasicAttributeSensorAndConfigKey<String> BIND_ADDRESS =
-            new StringAttributeSensorAndConfigKey("jboss.bind.address",
-                "Address of interface JBoss should listen on, defaulting 
0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)", 
+    AttributeSensorAndConfigKey<String, String> BIND_ADDRESS = 
ConfigKeys.newStringSensorAndConfigKey("jboss.bind.address",
+                "Address of interface JBoss should listen on, defaulting 
0.0.0.0 (but could set e.g. to attributeWhenReady(HOSTNAME)",
                 "0.0.0.0");
 
     @SetFromFlag("managementHttpPort")
-    PortAttributeSensorAndConfigKey MANAGEMENT_HTTP_PORT =
-            new 
PortAttributeSensorAndConfigKey("webapp.jboss.managementHttpPort", "Management 
port", "9990+");
+    PortAttributeSensorAndConfigKey MANAGEMENT_HTTP_PORT = 
ConfigKeys.newPortSensorAndConfigKey(
+            "webapp.jboss.managementHttpPort", "Management port", "9990+");
 
     @SetFromFlag("managementHttpsPort")
-    PortAttributeSensorAndConfigKey MANAGEMENT_HTTPS_PORT =
-            new 
PortAttributeSensorAndConfigKey("webapp.jboss.managementHttpsPort", "Management 
port", "9443+");
+    PortAttributeSensorAndConfigKey MANAGEMENT_HTTPS_PORT = 
ConfigKeys.newPortSensorAndConfigKey(
+            "webapp.jboss.managementHttpsPort", "Management port", "9443+");
 
     @SetFromFlag("managementNativePort")
-    PortAttributeSensorAndConfigKey MANAGEMENT_NATIVE_PORT =
-            new 
PortAttributeSensorAndConfigKey("webapp.jboss.managementNativePort", 
"Management native port", "10999+");
+    PortAttributeSensorAndConfigKey MANAGEMENT_NATIVE_PORT = 
ConfigKeys.newPortSensorAndConfigKey(
+            "webapp.jboss.managementNativePort", "Management native port", 
"10999+");
 
     /**
      * Port increments are the standard way to run multiple instances of AS7 
on the same machine.
@@ -103,9 +104,9 @@ public interface JBoss7Server extends 
JavaWebAppSoftwareProcess, HasShortName {
     AttributeSensor<Integer> MANAGEMENT_STATUS =
             Sensors.newIntegerSensor("webapp.jboss.managementStatus", "HTTP 
response code for the management server");
 
-    AttributeSensor<Boolean> MANAGEMENT_URL_UP = 
+    AttributeSensor<Boolean> MANAGEMENT_URL_UP =
             Sensors.newBooleanSensor("webapp.jboss.managementUp", "Management 
server is responding with OK");
-    
-    public static final AttributeSensor<String> PID_FILE = 
Sensors.newStringSensor("jboss.pid.file", "PID file");
+
+    AttributeSensor<String> PID_FILE = 
Sensors.newStringSensor("jboss.pid.file", "PID file");
 
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index 1468d24..5fc1e86 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -103,7 +103,7 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver 
implements JBoss7Driver
     }
 
     @Override
-    public void preInstall() {
+    public void prepare() {
         resolver = Entities.newDownloader(this);
         setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(format("jboss-as-%s", getVersion()))));
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6Server.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6Server.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6Server.java
index c0fdf2c..b5c10d8 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6Server.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6Server.java
@@ -24,7 +24,7 @@ import org.apache.brooklyn.api.objs.HasShortName;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.java.UsesJmx;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
@@ -42,14 +42,17 @@ public interface Jetty6Server extends 
JavaWebAppSoftwareProcess, UsesJmx, HasSho
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "6.1.26");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "jetty-%s");
+
     ConfigKey<Duration> START_TIMEOUT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.START_TIMEOUT, 
Duration.FIVE_MINUTES);
 
     @SetFromFlag("configXmlTemplateUrl")
     ConfigKey<String> CONFIG_XML_TEMPLATE_URL = 
ConfigKeys.newStringConfigKey("jetty.configXml.templateUrl", "Extra XML 
configuration file template URL if required");
 
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://get.jenv.mvnsearch.org/download/jetty/jetty-${version}.zip";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://get.jenv.mvnsearch.org/download/jetty/jetty-${version}.zip";);
 
     AttributeSensor<Integer> RESPONSES_4XX_COUNT =
             Sensors.newIntegerSensor("webapp.responses.4xx", "Responses in the 
400's");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
index 6ae2c66..f8499e4 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
@@ -24,7 +24,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.entity.webapp.JavaWebAppSshDriver;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableList;
@@ -52,12 +51,6 @@ public class Jetty6SshDriver extends JavaWebAppSshDriver 
implements Jetty6Driver
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(format("jetty-%s", getVersion()))));
-    }
-
-    @Override
     public void install() {
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppService.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppService.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppService.java
index a7a2a13..ded421a 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppService.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppService.java
@@ -20,20 +20,20 @@ package org.apache.brooklyn.entity.webapp.nodejs;
 
 import java.util.List;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.TypeToken;
+
 import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.api.location.PortRange;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.location.PortRanges;
+import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.webapp.WebAppService;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.reflect.TypeToken;
-
 @Catalog(name="Node.JS Application",
         description="Node.js is a cross-platform runtime environment for 
server-side and networking applications. Node.js applications are written in 
JavaScriptq",
         iconUrl="classpath:///nodejs-logo.png")
@@ -43,7 +43,7 @@ public interface NodeJsWebAppService extends SoftwareProcess, 
WebAppService {
     ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "stable");
 
     @SetFromFlag("httpPort")
-    ConfigKey<PortRange> HTTP_PORT = 
ConfigKeys.newConfigKeyWithDefault(Attributes.HTTP_PORT.getConfigKey(), 
PortRanges.fromInteger(3000));
+    PortAttributeSensorAndConfigKey HTTP_PORT = 
ConfigKeys.newPortSensorAndConfigKeyWithDefault(Attributes.HTTP_PORT, 
PortRanges.fromInteger(3000));
 
     @SetFromFlag("gitRepoUrl")
     ConfigKey<String> APP_GIT_REPOSITORY_URL = 
ConfigKeys.newStringConfigKey("nodejs.gitRepo.url", "The Git repository where 
the application is hosted");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
index e6001ca..76f5bc3 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/nodejs/NodeJsWebAppSshDriver.java
@@ -23,12 +23,18 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+
 import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.Entities;
 import 
org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.webapp.WebAppService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
@@ -38,10 +44,6 @@ import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.Strings;
 
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-
 public class NodeJsWebAppSshDriver extends AbstractSoftwareProcessSshDriver 
implements NodeJsWebAppDriver {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(NodeJsWebAppService.class);
@@ -87,14 +89,14 @@ public class NodeJsWebAppSshDriver extends 
AbstractSoftwareProcessSshDriver impl
     // to report failures early, and in case getShellEnvironment() tries to 
convert any null port numbers
     // to int.
     @Override
-    public void preInstall() {
-        super.preInstall();
+    public void prepare() {
+        super.prepare();
         Networking.checkPortsValid(getPortMap());
     }
     
     @Override
     public void install() {
-        LOG.info("Installing Node.JS {}", 
getEntity().getConfig(SoftwareProcess.SUGGESTED_VERSION));
+        LOG.info("Installing Node.JS {}", getVersion());
 
         List<String> commands = MutableList.<String>builder()
                 .add(BashCommands.INSTALL_CURL)
@@ -104,7 +106,7 @@ public class NodeJsWebAppSshDriver extends 
AbstractSoftwareProcessSshDriver impl
                 .add(BashCommands.installPackage(MutableMap.of("yum", "git 
nodejs npm", "apt", "git-core nodejs"), null))
                 .add("mkdir \"$HOME/.npm\"")
                 .add(BashCommands.sudo("npm install -g n"))
-                .add(BashCommands.sudo("n " + 
getEntity().getConfig(SoftwareProcess.SUGGESTED_VERSION)))
+                .add(BashCommands.sudo("n " + getVersion()))
                 .build();
 
         newScript(INSTALLING)

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8Server.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8Server.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8Server.java
index 19a70c9..99f935b 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8Server.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/Tomcat8Server.java
@@ -22,7 +22,7 @@ import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.ImplementedBy;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
 import org.apache.brooklyn.util.javalang.JavaClassNames;
@@ -39,9 +39,12 @@ public interface Tomcat8Server extends TomcatServer {
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "8.0.22");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "apache-tomcat-%s");
+
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://download.nextag.com/apache/tomcat/tomcat-8/v${version}/bin/apache-tomcat-${version}.tar.gz";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://download.nextag.com/apache/tomcat/tomcat-8/v${version}/bin/apache-tomcat-${version}.tar.gz";);
 
     @SetFromFlag("server.xml")
     ConfigKey<String> SERVER_XML_RESOURCE = ConfigKeys.newStringConfigKey(

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServer.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServer.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServer.java
index cc03e65..93b7eb0 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServer.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatServer.java
@@ -25,9 +25,9 @@ import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.location.PortRanges;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensor;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
+import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.java.UsesJmx;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
@@ -48,9 +48,12 @@ public interface TomcatServer extends 
JavaWebAppSoftwareProcess, UsesJmx, HasSho
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "7.0.65");
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT,
 "apache-tomcat-%s");
+
     @SetFromFlag("downloadUrl")
-    BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new 
BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, 
"http://download.nextag.com/apache/tomcat/tomcat-7/v${version}/bin/apache-tomcat-${version}.tar.gz";);
+    AttributeSensorAndConfigKey<String, String> DOWNLOAD_URL = 
ConfigKeys.newSensorAndConfigKeyWithDefault(SoftwareProcess.DOWNLOAD_URL,
+            
"http://download.nextag.com/apache/tomcat/tomcat-7/v${version}/bin/apache-tomcat-${version}.tar.gz";);
 
     /**
      * Tomcat insists on having a port you can connect to for the sole purpose 
of shutting it down.
@@ -80,7 +83,7 @@ public interface TomcatServer extends 
JavaWebAppSoftwareProcess, UsesJmx, HasSho
     ConfigKey<Duration> START_TIMEOUT = 
ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.START_TIMEOUT, 
Duration.FIVE_MINUTES);
 
     AttributeSensor<String> CONNECTOR_STATUS =
-            new BasicAttributeSensor<String>(String.class, 
"webapp.tomcat.connectorStatus", "Catalina connector state name");
+            Sensors.newStringSensor("webapp.tomcat.connectorStatus", "Catalina 
connector state name");
 
     AttributeSensor<String> JMX_SERVICE_URL = UsesJmx.JMX_URL;
 

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/3352bfab/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
index ed2dc60..5214b28 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
@@ -25,7 +25,8 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.brooklyn.core.entity.Entities;
+import com.google.common.base.Preconditions;
+
 import org.apache.brooklyn.entity.webapp.JavaWebAppSshDriver;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableList;
@@ -35,8 +36,6 @@ import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes;
 
-import com.google.common.base.Preconditions;
-
 public class TomcatSshDriver extends JavaWebAppSshDriver implements 
TomcatDriver {
 
     private static final String KEYSTORE_FILE = "keystore";
@@ -46,12 +45,6 @@ public class TomcatSshDriver extends JavaWebAppSshDriver 
implements TomcatDriver
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName("apache-tomcat-"+getVersion())));
-    }
-
-    @Override
     public void install() {
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();

Reply via email to