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:47:14 UTC
[44/50] brooklyn-library git commit: Fix jboss6: use correct jmx-port
or pid-file
Fix jboss6: use correct jmx-port or pid-file
- twiddle.sh needs configured with the correct rmi-registry port
- if using jmxmp, then can't use twiddle; instead use pid file
(and rely on JmxFeed to get the service-up)
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/2b5afd16
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/2b5afd16
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/2b5afd16
Branch: refs/heads/0.6.0
Commit: 2b5afd16cfc499bd5bcced2f9357c9510c2c88fc
Parents: e4b5835
Author: Aled Sage <al...@gmail.com>
Authored: Fri Nov 15 13:15:06 2013 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Nov 15 14:56:46 2013 +0000
----------------------------------------------------------------------
.../entity/webapp/jboss/JBoss6Server.java | 5 ++
.../entity/webapp/jboss/JBoss6SshDriver.java | 78 ++++++++++-------
.../jboss/Jboss6ServerIntegrationTest.java | 88 ++++++++++++++++++++
3 files changed, 140 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/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 ae82371..7c10af8 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
@@ -15,6 +15,11 @@ import brooklyn.util.flags.SetFromFlag;
@ImplementedBy(JBoss6ServerImpl.class)
public interface JBoss6Server extends JavaWebAppSoftwareProcess, JavaWebAppService, UsesJmx {
+ // TODO Instead of using portIncrement, would prefer to use http_port as "8080+" etc.
+ // 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");
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/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 4855c4f..be8c585 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
@@ -11,8 +11,11 @@ import java.util.Map;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.java.UsesJmx.JmxAgentModes;
import brooklyn.entity.webapp.JavaWebAppSshDriver;
import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.collections.MutableMap;
import brooklyn.util.net.Networking;
import brooklyn.util.ssh.BashCommands;
@@ -115,8 +118,8 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
String clusterArg = isEmpty(getClusterName()) ? "":"-g "+getClusterName();
// run.sh must be backgrounded otherwise the script will never return.
- Map<String,Object> flags = new HashMap<String, Object>();
- flags.put("usePidFile",false);
+ // Don't automatically create pid; instead set JBOSS_PIDFILE to create the pid file we need
+ Map<String,?> flags = MutableMap.of("usePidFile", false);
// We wait for evidence of tomcat running because, using
// brooklyn.ssh.config.tool.class=brooklyn.util.internal.ssh.cli.SshCliTool,
@@ -125,6 +128,7 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
newScript(flags, LAUNCHING).
body.append(
format("export JBOSS_CLASSPATH=%s/lib/jboss-logmanager.jar",getExpandedInstallDir()),
+ format("export JBOSS_PIDFILE=%s/%s", getRunDir(), PID_FILENAME),
format("%s/bin/run.sh -Djboss.service.binding.set=%s -Djboss.server.base.dir=$RUN_DIR/server ",getExpandedInstallDir(),PORT_GROUP_NAME) +
format("-Djboss.server.base.url=file://$RUN_DIR/server -Djboss.messaging.ServerPeerID=%s ",entity.getId())+
format("-Djboss.boot.server.log.dir=%s/server/%s/log ",getRunDir(),SERVER_TYPE) +
@@ -141,39 +145,51 @@ public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver
@Override
public boolean isRunning() {
- String host = entity.getAttribute(Attributes.HOSTNAME);
- Integer port = entity.getAttribute(Attributes.JMX_PORT);
-
- List<String> checkRunningScript = new LinkedList<String>();
- checkRunningScript.add(
- format("%s/bin/twiddle.sh --host %s --port %s get \"jboss.system:type=Server\" Started | grep true || exit 1",
- getExpandedInstallDir(), host, port));
-
- //have to override the CLI/JMX options
-
- Map<String, Object> flags = new LinkedHashMap<String, Object>();
- flags.put("env", new LinkedHashMap<String, String>());
-
- int result = execute(flags, checkRunningScript, "checkRunning " + entity + " on " + getMachine());
- if (result == 0) return true;
- if (result == 1) return false;
- throw new IllegalStateException(format("%s running check gave result code %s",getEntity(),result));
+ JmxAgentModes jmxMode = entity.getConfig(UsesJmx.JMX_AGENT_MODE);
+ if (jmxMode == JmxAgentModes.JMX_RMI_CUSTOM_AGENT) {
+ String host = entity.getAttribute(Attributes.HOSTNAME);
+ Integer port = entity.getAttribute(UsesJmx.RMI_REGISTRY_PORT);
+
+ List<String> checkRunningScript = new LinkedList<String>();
+ checkRunningScript.add(
+ format("%s/bin/twiddle.sh --host %s --port %s get \"jboss.system:type=Server\" Started | grep true || exit 1",
+ getExpandedInstallDir(), host, port));
+
+ //have to override the CLI/JMX options
+
+ Map<String, Object> flags = new LinkedHashMap<String, Object>();
+ flags.put("env", new LinkedHashMap<String, String>());
+
+ int result = execute(flags, checkRunningScript, "checkRunning " + entity + " on " + getMachine());
+ if (result == 0) return true;
+ if (result == 1) return false;
+ throw new IllegalStateException(format("%s running check gave result code %s",getEntity(),result));
+ } else {
+ Map<String,?> flags = MutableMap.of("usePidFile", true);
+ return newScript(flags, CHECK_RUNNING).execute() == 0;
+ }
}
@Override
public void stop() {
- String host = entity.getAttribute(Attributes.HOSTNAME);
- Integer port = entity.getAttribute(Attributes.JMX_PORT);
- List<String> shutdownScript = new LinkedList<String>();
- shutdownScript.add(format("%s/bin/shutdown.sh --host %s --port %s -S", getExpandedInstallDir(), host, port));
-
- //again, messy copy of parent; but new driver scheme could allow script-helper to customise parameters
- log.debug("invoking shutdown script for {}: {}", entity, shutdownScript);
- Map<String, Object> flags = new LinkedHashMap<String, Object>();
- flags.put("env", new LinkedHashMap<String, String>());
- int result = execute(flags, shutdownScript, "shutdown " + entity + " on " + getMachine());
- if (result != 0) log.warn("non-zero result code terminating {}: {}", entity, result);
- log.debug("done invoking shutdown script for {}", entity);
+ JmxAgentModes jmxMode = entity.getConfig(UsesJmx.JMX_AGENT_MODE);
+ if (jmxMode == JmxAgentModes.JMX_RMI_CUSTOM_AGENT) {
+ String host = entity.getAttribute(Attributes.HOSTNAME);
+ Integer port = entity.getAttribute(UsesJmx.RMI_REGISTRY_PORT);
+ List<String> shutdownScript = new LinkedList<String>();
+ shutdownScript.add(format("%s/bin/shutdown.sh --host %s --port %s -S", getExpandedInstallDir(), host, port));
+
+ //again, messy copy of parent; but new driver scheme could allow script-helper to customise parameters
+ log.debug("invoking shutdown script for {}: {}", entity, shutdownScript);
+ Map<String, Object> flags = new LinkedHashMap<String, Object>();
+ flags.put("env", new LinkedHashMap<String, String>());
+ int result = execute(flags, shutdownScript, "shutdown " + entity + " on " + getMachine());
+ if (result != 0) log.warn("non-zero result code terminating {}: {}", entity, result);
+ log.debug("done invoking shutdown script for {}", entity);
+ } else {
+ Map<String,?> flags = MutableMap.of("usePidFile", true);
+ newScript(flags, STOPPING).execute();
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/2b5afd16/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
new file mode 100644
index 0000000..b7f261f
--- /dev/null
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss6ServerIntegrationTest.java
@@ -0,0 +1,88 @@
+package brooklyn.entity.webapp.jboss;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.net.URL;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.java.UsesJmx;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.test.Asserts;
+import brooklyn.test.HttpTestUtils;
+import brooklyn.test.entity.TestApplication;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * TODO re-write this like WebAppIntegrationTest, rather than being jboss6 specific.
+ */
+public class Jboss6ServerIntegrationTest {
+
+ // Port increment for JBoss 6.
+ public static final int PORT_INCREMENT = 400;
+
+ private URL warUrl;
+ private LocalhostMachineProvisioningLocation localhostProvisioningLocation;
+ private TestApplication app;
+
+ @BeforeMethod(alwaysRun=true)
+ public void setUp() throws Exception {
+ String warPath = "hello-world.war";
+ warUrl = getClass().getClassLoader().getResource(warPath);
+
+ localhostProvisioningLocation = new LocalhostMachineProvisioningLocation();
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void tearDown() throws Exception {
+ if (app != null) Entities.destroyAll(app.getManagementContext());
+ }
+
+ @Test(groups = "Integration")
+ public void testJmxmp() throws Exception {
+ runTest(UsesJmx.JmxAgentModes.JMXMP);
+ }
+
+ @Test(groups = "Integration")
+ public void testJmxRmi() throws Exception {
+ runTest(UsesJmx.JmxAgentModes.JMX_RMI_CUSTOM_AGENT);
+ }
+
+ @Test(groups = "Integration")
+ public void testJmxAutodetect() throws Exception {
+ runTest(UsesJmx.JmxAgentModes.AUTODETECT);
+ }
+
+ protected void runTest(UsesJmx.JmxAgentModes jmxAgentMode) throws Exception {
+ final JBoss6Server server = app.createAndManageChild(EntitySpec.create(JBoss6Server.class)
+ .configure(JBoss6Server.PORT_INCREMENT, PORT_INCREMENT)
+ .configure(UsesJmx.JMX_AGENT_MODE, jmxAgentMode)
+ .configure("war", warUrl.toString()));
+
+ app.start(ImmutableList.of(localhostProvisioningLocation));
+
+ String httpUrl = "http://"+server.getAttribute(JBoss6Server.HOSTNAME)+":"+server.getAttribute(JBoss6Server.HTTP_PORT)+"/";
+
+ assertEquals(server.getAttribute(JBoss6Server.ROOT_URL).toLowerCase(), httpUrl.toLowerCase());
+
+ HttpTestUtils.assertHttpStatusCodeEventuallyEquals(httpUrl, 200);
+ HttpTestUtils.assertContentContainsText(httpUrl, "Hello");
+
+
+ Asserts.succeedsEventually(new Runnable() {
+ @Override public void run() {
+ // TODO Could test other attributes as well; see jboss7 test
+ assertNotNull(server.getAttribute(JBoss6Server.REQUEST_COUNT));
+ assertNotNull(server.getAttribute(JBoss6Server.ERROR_COUNT));
+ assertNotNull(server.getAttribute(JBoss6Server.TOTAL_PROCESSING_TIME));
+ }});
+ }
+}