All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cloud.piranha.maven.plugin.StopMojo Maven / Gradle / Ivy

Go to download

The Piranha Maven Plugin delivers you with a Maven plugin you can use to deploy your web application to any of our Piranha distributions facilitating an inner-loop development experience.

The newest version!
/*
 * Copyright (c) 2002-2024 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.maven.plugin;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.concurrent.TimeUnit;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import static org.apache.maven.plugins.annotations.LifecyclePhase.NONE;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

/**
 * This goal will stop the Piranha runtime that was started with the
 * start goal.
 *
 * @author Manfred Riem ([email protected])
 */
@Mojo(name = "stop", defaultPhase = NONE)
public class StopMojo extends AbstractMojo {

    /**
     * Stores the runtime directory.
     */
    @Parameter(defaultValue = "${project.build.directory}/piranha", required = true)
    private String runtimeDirectory;

    /**
     * Stores the skip property.
     */
    @Parameter(defaultValue = "false", property = "piranha.skip")
    private boolean skip;

    /**
     * Constructor.
     */
    public StopMojo() {
    }

    @Override
    public void execute() throws MojoExecutionException {
        if (!skip) {
            try {
                /*
                 * Get the PID from the PID file.
                 */
                File pidFile = new File(runtimeDirectory, "tmp/piranha.pid");
                String pid = "";

                if (pidFile.exists()) {
                    pid = Files.readString(pidFile.toPath());
                }

                /*
                 * Delete the PID file.
                 */
                if (!Files.deleteIfExists(pidFile.toPath())) {
                    try {
                        TimeUnit.SECONDS.sleep(5);
                    } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
                    }
                    if (Files.deleteIfExists(new File(
                            runtimeDirectory, "tmp/piranha.pid").toPath())) {
                        System.err.println("Unable to delete PID file");
                    }
                }

                if (!pid.trim().equals("")) {
                    /*
                     * If the process is still active destroy it forcibly.
                     */
                    ProcessHandle.of(Long.parseLong(pid.trim())).ifPresent(p -> {
                        int count = 0;
                        System.out.print("Waiting for Piranha to stop ");
                        while (p.isAlive()) {
                            try {
                                Thread.sleep(1000);
                                count++;
                                System.out.print(".");
                            } catch (InterruptedException ie) {
                            }
                            if (count == 60) {
                                break;
                            }
                        }
                        System.out.println();

                        if (p.isAlive()) {
                            System.err.println("Process still alive, destroying forcibly");
                            p.destroyForcibly();
                        }
                    });
                }
            } catch (IOException ioe) {
                throw new MojoExecutionException(ioe);
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy