package org.jboss.jbossts.txbridge.tests.extension;
import java.util.logging.Logger;
/**
* JBoss Server kill processor for Linux/Unix machines.
* @author <a href="mailto:hhovsepy@redhat.com">Hayk Hovsepyan</a>
*/
public class JBossTSAS7ServerKillProcessor extends JBossTSBaseServerKillProcessor {
private static final Logger logger = Logger.getLogger(JBossTSAS7ServerKillProcessor.class.getName());
private static final String PROCESSES_CMD = JBossTSServerExtension.OSType.getOSType().getPSCommand();
private static final String PS_AUX_CMD = JBossTSServerExtension.isSolaris() ? "/usr/ucb/ps aux" : "ps aux";
private static final String CHECK_JBOSS_ALIVE_CMD = "if [ \"x`" + PROCESSES_CMD + " | grep 'jboss-module[s]'`\" = \"x\" ]; then exit 1; fi";
private static final String SHUTDOWN_JBOSS_CMD = PROCESSES_CMD + " | grep jboss-module[s] | awk '" + JBossTSServerExtension.OSType.getOSType().getPSIDIndex() + "' | xargs kill";
private static final String CHECK_FOR_DEFUNCT_JAVA_CMD = "if [ \"x`" + PS_AUX_CMD + " | grep '\\[java\\] <defunct>'`\" = \"x\" ]; then exit 1; fi";
@Override
protected boolean jbossIsAlive() throws Exception {
//Command will 'exit 1' if jboss is not running and 'exit 0' if it is.
return runShellCommandExitCode(getJBossAliveCmd()) == 0;
}
@Override
protected boolean isDefunctJavaProcess() throws Exception {
//Command will 'exit 1' if a defunct java process is not running and 'exit 0' if there is.
return runShellCommandExitCode(getDefunctJavaCmd()) == 0;
}
@Override
protected void shutdownJBoss() throws Exception {
runShellCommand(getShutdownJBossCmd());
// wait 5 * 60 second for jboss-as shutdown complete
for (int i = 0; i < numChecks; i++) {
if (jbossIsAlive()) {
Thread.sleep(5000);
} else {
getLogger().info("jboss-as shutdown after sending shutdown command");
return;
}
}
}
private int runShellCommandExitCode(String cmd) throws Exception {
getLogger().info("Executing shell command: '" + cmd + "'");
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", cmd);
Process p = pb.start();
dumpStream("std out", p.getInputStream());
dumpStream("std error", p.getErrorStream());
p.waitFor();
p.destroy();
return p.exitValue();
}
@Override
protected String runShellCommand(String cmd) throws Exception {
getLogger().info("Executing shell command: '" + cmd + "'");
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", cmd);
Process p = pb.start();
String res = dumpStream("std out", p.getInputStream());
dumpStream("std error", p.getErrorStream());
p.waitFor();
p.destroy();
return res;
}
@Override
protected Logger getLogger() {
return logger;
}
@Override
protected String getJBossAliveCmd() {
return CHECK_JBOSS_ALIVE_CMD;
}
@Override
protected String getDefunctJavaCmd() {
return CHECK_FOR_DEFUNCT_JAVA_CMD;
}
@Override
protected String getShutdownJBossCmd() {
return SHUTDOWN_JBOSS_CMD;
}
@Override
protected String getProcessesCmd() {
return PS_AUX_CMD;
}
}