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));
+            }});
+    }
+}