Java tutorial
/** * Copyright (C) 2015 Michael Schnell. All rights reserved. * <http://www.fuin.org/> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) any * later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see <http://www.gnu.org/licenses/>. */ package org.fuin.esmp; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.Executor; import org.apache.commons.exec.OS; import org.apache.commons.exec.PumpStreamHandler; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Stops the event store. * */ @Mojo(name = "stop", defaultPhase = LifecyclePhase.POST_INTEGRATION_TEST, requiresProject = false) public final class EventStoreStopMojo extends AbstractEventStoreMojo { private static final Logger LOG = LoggerFactory.getLogger(EventStoreStopMojo.class); /** * Name of the executable or shell script to stops the event store. Defaults * to the OS specific name for Windows, Linux and Mac OS families. Other OS * families will cause an error if this value is not set. * */ @Parameter(name = "command") private String command; @Override protected final void executeGoal() throws MojoExecutionException { init(); LOG.info("command={}", command); final CommandLine cmdLine = createCommandLine(); final Executor executor = new DefaultExecutor(); try { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final PumpStreamHandler psh = new PumpStreamHandler(bos); executor.setStreamHandler(psh); executor.setWorkingDirectory(getEventStoreDir()); final int result = executor.execute(cmdLine); if (result != 0) { throw new MojoExecutionException("Error stopping the event store: " + result); } final List<String> messages = asList(bos.toString()); logDebug(messages); deletePid(); LOG.info("Event store successfully stopped"); } catch (final IOException ex) { throw new MojoExecutionException("Error executing the command line: " + cmdLine, ex); } } private CommandLine createCommandLine() throws MojoExecutionException { final CommandLine cmdLine = new CommandLine(command); if (OS.isFamilyWindows()) { cmdLine.addArgument("/PID"); cmdLine.addArgument(readPid()); cmdLine.addArgument("/F"); } else if (OS.isFamilyUnix() || OS.isFamilyMac()) { cmdLine.addArgument("-SIGKILL"); cmdLine.addArgument(readPid()); } else { throw new MojoExecutionException("Unknown OS - Cannot kill the process"); } return cmdLine; } private void init() throws MojoExecutionException { // Supply variables that are OS dependent if (OS.isFamilyWindows()) { if (command == null) { command = "taskkill"; } } else if (OS.isFamilyUnix() || OS.isFamilyMac()) { if (command == null) { command = "kill"; } } else { if (command == null) { throw new MojoExecutionException("Unknown OS - You must use the 'command' parameter"); } } } /** * Returns the name of the executable or shell script to stop the event * store. * * @return Executable name. */ public final String getCommand() { return command; } /** * Sets the name of the executable or shell script to stop the event store. * * @param command * Executable name to set. */ public final void setCommand(final String command) { this.command = command; } }