JBoss6: support disabling direct connection - If !isJmxEnabled then donât do imx polling
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b70a5565 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b70a5565 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b70a5565 Branch: refs/heads/master Commit: b70a556540b794563895bfcb23080318def301ca Parents: ec76f12 Author: Aled Sage <[email protected]> Authored: Wed Nov 18 15:36:24 2015 +0000 Committer: Aled Sage <[email protected]> Committed: Tue Nov 24 13:53:45 2015 +0000 ---------------------------------------------------------------------- .../entity/webapp/jboss/JBoss6ServerImpl.java | 62 ++++++++++++-------- .../entity/webapp/jboss/JBoss6SshDriver.java | 2 +- .../jboss/JBoss6ServerAwsEc2LiveTest.java | 31 +++++++++- 3 files changed, 67 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b70a5565/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerImpl.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerImpl.java index 2d8bc54..c977a80 100644 --- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerImpl.java +++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerImpl.java @@ -23,8 +23,7 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.core.entity.Attributes; -import org.apache.brooklyn.enricher.stock.Enrichers; +import org.apache.brooklyn.entity.java.UsesJmx; import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcessImpl; import org.apache.brooklyn.feed.jmx.JmxAttributePollConfig; import org.apache.brooklyn.feed.jmx.JmxFeed; @@ -63,40 +62,51 @@ public class JBoss6ServerImpl extends JavaWebAppSoftwareProcessImpl implements J String serverMbeanName = "jboss.system:type=Server"; boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS); - jmxFeed = JmxFeed.builder() - .entity(this) - .period(500, TimeUnit.MILLISECONDS) - .pollAttribute(new JmxAttributePollConfig<Boolean>(SERVICE_UP) - // TODO instead of setting SERVICE_UP directly, want to use equivalent of - // addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS).key("serverMBean")... - // but not supported in feed? - .objectName(serverMbeanName) - .attributeName("Started") - .onException(Functions.constant(false)) - .suppressDuplicates(true)) - .pollAttribute(new JmxAttributePollConfig<Integer>(ERROR_COUNT) - .objectName(requestProcessorMbeanName) - .attributeName("errorCount") - .enabled(retrieveUsageMetrics)) - .pollAttribute(new JmxAttributePollConfig<Integer>(REQUEST_COUNT) - .objectName(requestProcessorMbeanName) - .attributeName("requestCount") - .enabled(retrieveUsageMetrics)) - .pollAttribute(new JmxAttributePollConfig<Integer>(TOTAL_PROCESSING_TIME) - .objectName(requestProcessorMbeanName) - .attributeName("processingTime") - .enabled(retrieveUsageMetrics)) - .build(); + if (isJmxEnabled()) { + jmxFeed = JmxFeed.builder() + .entity(this) + .period(500, TimeUnit.MILLISECONDS) + .pollAttribute(new JmxAttributePollConfig<Boolean>(SERVICE_UP) + // TODO instead of setting SERVICE_UP directly, want to use equivalent of + // addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS).key("serverMBean")... + // but not supported in feed? + .objectName(serverMbeanName) + .attributeName("Started") + .onException(Functions.constant(false)) + .suppressDuplicates(true)) + .pollAttribute(new JmxAttributePollConfig<Integer>(ERROR_COUNT) + .objectName(requestProcessorMbeanName) + .attributeName("errorCount") + .enabled(retrieveUsageMetrics)) + .pollAttribute(new JmxAttributePollConfig<Integer>(REQUEST_COUNT) + .objectName(requestProcessorMbeanName) + .attributeName("requestCount") + .enabled(retrieveUsageMetrics)) + .pollAttribute(new JmxAttributePollConfig<Integer>(TOTAL_PROCESSING_TIME) + .objectName(requestProcessorMbeanName) + .attributeName("processingTime") + .enabled(retrieveUsageMetrics)) + .build(); + } else { + // if not using JMX + log.warn(this+" running without JMX monitoring; limited visibility of service available"); + connectServiceUpIsRunning(); + } } @Override public void disconnectSensors() { super.disconnectSensors(); if (jmxFeed != null) jmxFeed.stop(); + disconnectServiceUpIsRunning(); } @Override public Class<JBoss6Driver> getDriverInterface() { return JBoss6Driver.class; } + + protected boolean isJmxEnabled() { + return (this instanceof UsesJmx) && Boolean.TRUE.equals(getConfig(UsesJmx.USE_JMX)); + } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b70a5565/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 30509a9..704fa2a 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 @@ -134,7 +134,7 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver public void launch() { Map<String,Integer> ports = new HashMap<String, Integer>(); ports.put("httpPort",getHttpPort()); - ports.put("jmxPort",getJmxPort()); + if (isJmxEnabled()) ports.put("jmxPort",getJmxPort()); Networking.checkPortsValid(ports); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b70a5565/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java index 8d77679..8da350c 100644 --- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java +++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.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. @@ -64,6 +68,31 @@ public class JBoss6ServerAwsEc2LiveTest extends AbstractEc2LiveTest { }}); } + @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)); + + final JBoss6Server server = app.createAndManageChild(EntitySpec.create(JBoss6Server.class) + .configure(JBoss6Server.PROVISIONING_PROPERTIES.subKey(CloudLocationConfig.INBOUND_PORTS.getName()), ImmutableList.of(22)) + .configure(JBoss6Server.USE_JMX, false) + .configure(JBoss6Server.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(JBoss6Server.ROOT_URL); + assertNotNull(url); + + assertViaSshLocalUrlListeningEventually(server, url); + } + @Test(enabled=false) public void testDummy() {} // Convince testng IDE integration that this really does have test methods }
