package com.orctom.mojo.was; import com.orctom.was.model.Command; import com.orctom.was.model.WebSphereModel; import com.orctom.was.model.WebSphereServiceException; import com.orctom.was.service.impl.AbstractWebSphereServiceImpl; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.cli.*; import java.io.File; /** * Service to execute WAS tasks * Created by hao on 11/11/15. */ public class WebSphereServiceImpl extends AbstractWebSphereServiceImpl { public WebSphereServiceImpl(WebSphereModel model, String targetDir) { super(model, targetDir); } @Override protected void executeCommand(Command command) { try { Commandline commandLine = new Commandline(); commandLine.setExecutable(command.getExecutable()); commandLine.setWorkingDirectory(command.getWorkingDir()); for (String arg : command.getArgEntriesAsList()) { commandLine.createArg().setLine(arg); } StringStreamConsumer outConsumer = new StringStreamConsumer(); StringStreamConsumer errConsumer = new StringStreamConsumer(); executeCommand(commandLine, outConsumer, errConsumer, model.isVerbose()); String out = outConsumer.getOutput(); FileUtils.fileWrite(new File(command.getBuildScriptPath() + ".log"), out); if (model.isFailOnError() && ( out.contains("com.ibm.ws.scripting.ScriptingException") || out.contains("com.ibm.bsf.BSFException"))) { throw new WebSphereServiceException("Failed to execute the task, Please see the log for more details"); } String error = errConsumer.getOutput(); if (StringUtils.isNotEmpty(error)) { System.err.println(error); } } catch (CommandLineTimeOutException e) { throw new WebSphereServiceException("Failed to execute the task." + "Please ensure remote WAS or Deployment Manager is running. " + e.getMessage(), e); } catch (Exception e) { throw new WebSphereServiceException(e.getMessage(), e); } } public static void executeCommand(Commandline commandline, StreamConsumer outConsumer, StreamConsumer errorConsumer, boolean isVerbose) throws CommandLineException { if (isVerbose) { System.out.println("Executing command:\n" + StringUtils.join(commandline.getShellCommandline(), " ")); } int returnCode = CommandLineUtils.executeCommandLine(commandline, outConsumer, errorConsumer, 1800); if (returnCode != 0) { String msg = "Failed to deploy, return code: " + returnCode + ". Please make sure target WAS is alive and reachable."; throw new WebSphereServiceException(msg); } else { System.out.println("Return code: " + returnCode); } } class StringStreamConsumer implements StreamConsumer { private String ls = System.getProperty("line.separator"); private StringBuffer string = new StringBuffer(); public void consumeLine(String line) { string.append(line).append(ls); System.out.println(line); } public String getOutput() { return string.toString(); } } }