JBoss7: support disabling direct connection

- Important if instance is locked down such that only ssh access to
  the VM is available.


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

Branch: refs/heads/master
Commit: b1a57d13792ce3f068aba3c98e91363cab1da167
Parents: b70a556
Author: Aled Sage <[email protected]>
Authored: Wed Nov 18 15:36:45 2015 +0000
Committer: Aled Sage <[email protected]>
Committed: Tue Nov 24 13:53:45 2015 +0000

----------------------------------------------------------------------
 .../entity/webapp/jboss/JBoss7Server.java       |   5 +-
 .../entity/webapp/jboss/JBoss7ServerImpl.java   | 121 ++++++++++---------
 .../jboss/JBoss7ServerAwsEc2LiveTest.java       |  31 ++++-
 3 files changed, 101 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/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 0ba1b38..4fa1656 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
@@ -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.sensor.BasicAttributeSensorAndConfigKey;
+import 
org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.Sensors;
-import 
org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
 import org.apache.brooklyn.util.core.ResourcePredicates;
@@ -94,6 +94,9 @@ public interface JBoss7Server extends 
JavaWebAppSoftwareProcess, HasShortName {
     ConfigKey<String> MANAGEMENT_PASSWORD =
             ConfigKeys.newStringConfigKey("webapp.jboss.managementPassword", 
"Password for MANAGEMENT_USER.");
 
+    @SetFromFlag("useHttpMonitoring")
+    ConfigKey<Boolean> USE_HTTP_MONITORING = 
ConfigKeys.newConfigKey("httpMonitoring.enabled", "HTTP(S) monitoring enabled", 
Boolean.TRUE);
+
     AttributeSensor<String> MANAGEMENT_URL =
             Sensors.newStringSensor("webapp.jboss.managementUrl", "URL where 
management endpoint is available");
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
index 4ebd545..e2411a7 100644
--- 
a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
+++ 
b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java
@@ -29,9 +29,9 @@ import 
org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcessImpl;
 import org.apache.brooklyn.feed.http.HttpFeed;
 import org.apache.brooklyn.feed.http.HttpPollConfig;
 import org.apache.brooklyn.feed.http.HttpValueFunctions;
+import org.apache.brooklyn.util.guava.Functionals;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.util.guava.Functionals;
 
 import com.google.common.base.Functions;
 import com.google.common.collect.ImmutableMap;
@@ -79,63 +79,72 @@ public class JBoss7ServerImpl extends 
JavaWebAppSoftwareProcessImpl implements J
         String managementUri = 
String.format("http://%s:%s/management/subsystem/web/connector/http/read-resource";,
                 hp.getHostText(), hp.getPort());
         sensors().set(MANAGEMENT_URL, managementUri);
-        log.debug("JBoss sensors for "+this+" reading from "+managementUri);
-        Map<String, String> includeRuntimeUriVars = 
ImmutableMap.of("include-runtime","true");
-        boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS);
-        
-        httpFeed = HttpFeed.builder()
-                .entity(this)
-                .period(200)
-                .baseUri(managementUri)
-                .credentials(getConfig(MANAGEMENT_USER), 
getConfig(MANAGEMENT_PASSWORD))
-                .poll(new HttpPollConfig<Integer>(MANAGEMENT_STATUS)
-                        .onSuccess(HttpValueFunctions.responseCode())
-                        .suppressDuplicates(true))
-                .poll(new HttpPollConfig<Boolean>(MANAGEMENT_URL_UP)
-                        .onSuccess(HttpValueFunctions.responseCodeEquals(200))
-                        .onFailureOrException(Functions.constant(false))
-                        .suppressDuplicates(true))
-                .poll(new HttpPollConfig<Integer>(REQUEST_COUNT)
-                        .vars(includeRuntimeUriVars)
-                        
.onSuccess(HttpValueFunctions.jsonContents("requestCount", Integer.class))
-                        .enabled(retrieveUsageMetrics))
-                .poll(new HttpPollConfig<Integer>(ERROR_COUNT)
-                        .vars(includeRuntimeUriVars)
-                        
.onSuccess(HttpValueFunctions.jsonContents("errorCount", Integer.class))
-                        .enabled(retrieveUsageMetrics))
-                .poll(new HttpPollConfig<Integer>(TOTAL_PROCESSING_TIME)
-                        .vars(includeRuntimeUriVars)
-                        
.onSuccess(HttpValueFunctions.jsonContents("processingTime", Integer.class))
-                        .enabled(retrieveUsageMetrics))
-                .poll(new HttpPollConfig<Integer>(MAX_PROCESSING_TIME)
-                        .vars(includeRuntimeUriVars)
-                        .onSuccess(HttpValueFunctions.jsonContents("maxTime", 
Integer.class))
-                        .enabled(retrieveUsageMetrics))
-                .poll(new HttpPollConfig<Long>(BYTES_RECEIVED)
-                        .vars(includeRuntimeUriVars)
-                        // jboss seems to report 0 even if it has received 
lots of requests; dunno why.
-                        
.onSuccess(HttpValueFunctions.jsonContents("bytesReceived", Long.class))
-                        .enabled(retrieveUsageMetrics))
-                .poll(new HttpPollConfig<Long>(BYTES_SENT)
-                        .vars(includeRuntimeUriVars)
-                        
.onSuccess(HttpValueFunctions.jsonContents("bytesSent", Long.class))
-                        .enabled(retrieveUsageMetrics))
-                .build();
+
+        if (isHttpMonitoringEnabled()) {
+            log.debug("JBoss sensors for "+this+" reading from 
"+managementUri);
+            Map<String, String> includeRuntimeUriVars = 
ImmutableMap.of("include-runtime","true");
+            boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS);
+
+            httpFeed = HttpFeed.builder()
+                    .entity(this)
+                    .period(200)
+                    .baseUri(managementUri)
+                    .credentials(getConfig(MANAGEMENT_USER), 
getConfig(MANAGEMENT_PASSWORD))
+                    .poll(new HttpPollConfig<Integer>(MANAGEMENT_STATUS)
+                            .onSuccess(HttpValueFunctions.responseCode())
+                            .suppressDuplicates(true))
+                    .poll(new HttpPollConfig<Boolean>(MANAGEMENT_URL_UP)
+                            
.onSuccess(HttpValueFunctions.responseCodeEquals(200))
+                            .onFailureOrException(Functions.constant(false))
+                            .suppressDuplicates(true))
+                    .poll(new HttpPollConfig<Integer>(REQUEST_COUNT)
+                            .vars(includeRuntimeUriVars)
+                            
.onSuccess(HttpValueFunctions.jsonContents("requestCount", Integer.class))
+                            .enabled(retrieveUsageMetrics))
+                    .poll(new HttpPollConfig<Integer>(ERROR_COUNT)
+                            .vars(includeRuntimeUriVars)
+                            
.onSuccess(HttpValueFunctions.jsonContents("errorCount", Integer.class))
+                            .enabled(retrieveUsageMetrics))
+                    .poll(new HttpPollConfig<Integer>(TOTAL_PROCESSING_TIME)
+                            .vars(includeRuntimeUriVars)
+                            
.onSuccess(HttpValueFunctions.jsonContents("processingTime", Integer.class))
+                            .enabled(retrieveUsageMetrics))
+                    .poll(new HttpPollConfig<Integer>(MAX_PROCESSING_TIME)
+                            .vars(includeRuntimeUriVars)
+                            
.onSuccess(HttpValueFunctions.jsonContents("maxTime", Integer.class))
+                            .enabled(retrieveUsageMetrics))
+                    .poll(new HttpPollConfig<Long>(BYTES_RECEIVED)
+                            .vars(includeRuntimeUriVars)
+                            // jboss seems to report 0 even if it has received 
lots of requests; dunno why.
+                            
.onSuccess(HttpValueFunctions.jsonContents("bytesReceived", Long.class))
+                            .enabled(retrieveUsageMetrics))
+                    .poll(new HttpPollConfig<Long>(BYTES_SENT)
+                            .vars(includeRuntimeUriVars)
+                            
.onSuccess(HttpValueFunctions.jsonContents("bytesSent", Long.class))
+                            .enabled(retrieveUsageMetrics))
+                    .build();
+            
+            
enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+                    .from(MANAGEMENT_URL_UP)
+                    .computing(Functionals.ifNotEquals(true).value("Management 
URL not reachable") )
+                    .build());
+        }
         
-        connectServiceUp();
+        connectServiceUpIsRunning();
     }
     
-    protected void connectServiceUp() {
-        connectServiceUpIsRunning();
-        
-        
enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
-            .from(MANAGEMENT_URL_UP)
-            .computing(Functionals.ifNotEquals(true).value("Management URL not 
reachable") )
-            .build());
+    /**
+     * @deprecated since 0.9.0; now a no-op; marked final to force anyone 
sub-classing + overriding it to update their code.
+     */
+    @Deprecated
+    protected final void connectServiceUp() {
     }
     
-    protected void disconnectServiceUp() {
-        disconnectServiceUpIsRunning();
+    /**
+     * @deprecated since 0.9.0; now a no-op; marked final to force anyone 
sub-classing + overriding it to update their code.
+     */
+    @Deprecated
+    protected final void disconnectServiceUp() {
     }
     
     @Override
@@ -143,7 +152,11 @@ public class JBoss7ServerImpl extends 
JavaWebAppSoftwareProcessImpl implements J
         super.disconnectSensors();
         
         if (httpFeed != null) httpFeed.stop();
-        disconnectServiceUp();
+        disconnectServiceUpIsRunning();
+    }
+    
+    protected boolean isHttpMonitoringEnabled() {
+        return Boolean.TRUE.equals(getConfig(USE_HTTP_MONITORING));
     }
     
     public int getManagementHttpsPort() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
 
b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
index 9f7b4e7..6a1cc4d 100644
--- 
a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
+++ 
b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
@@ -18,11 +18,14 @@
  */
 package org.apache.brooklyn.entity.webapp.jboss;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static org.testng.Assert.assertNotNull;
 
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.EntityAsserts;
+import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
+import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
 import org.apache.brooklyn.entity.AbstractEc2LiveTest;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.test.HttpTestUtils;
@@ -30,6 +33,7 @@ import 
org.apache.brooklyn.test.support.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 
 /**
  * A simple test of installing+running on AWS-EC2, using various OS distros 
and versions. 
@@ -70,6 +74,31 @@ public class JBoss7ServerAwsEc2LiveTest extends 
AbstractEc2LiveTest {
         super.test_CentOS_6_3();
     }
 
+    @Test(groups = {"Live"})
+    public void testWithOnlyPort22() throws Exception {
+        // 
CentOS-6.3-x86_64-GA-EBS-02-85586466-5b6c-4495-b580-14f72b4bcf51-ami-bb9af1d2.1
+        jcloudsLocation = mgmt.getLocationRegistry().resolve(LOCATION_SPEC, 
ImmutableMap.of(
+                "tags", ImmutableList.of(getClass().getName()),
+                "imageId", "us-east-1/ami-a96b01c0", 
+                "hardwareId", SMALL_HARDWARE_ID));
+
+        JBoss7Server server = 
app.createAndManageChild(EntitySpec.create(JBoss7Server.class)
+                
.configure(JBoss7Server.PROVISIONING_PROPERTIES.subKey(CloudLocationConfig.INBOUND_PORTS.getName()),
 ImmutableList.of(22))
+                .configure(JBoss7Server.USE_HTTP_MONITORING, false)
+                .configure(JBoss7Server.OPEN_IPTABLES, true)
+                .configure("war", getTestWar()));
+        
+        app.start(ImmutableList.of(jcloudsLocation));
+        
+        EntityAsserts.assertAttributeEqualsEventually(server, 
Attributes.SERVICE_UP, true);
+        EntityAsserts.assertAttributeEqualsEventually(server, 
Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        
+        String url = server.getAttribute(JBoss7Server.ROOT_URL);
+        assertNotNull(url);
+        
+        assertViaSshLocalUrlListeningEventually(server, url);
+    }
+    
     @Test(enabled=false)
     public void testDummy() {} // Convince testng IDE integration that this 
really does have test methods  
 }

Reply via email to