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

com.alibaba.jvm.sandbox.module.mgr.ControlModule Maven / Gradle / Ivy

package com.alibaba.jvm.sandbox.module.mgr;

import com.alibaba.jvm.sandbox.api.Information;
import com.alibaba.jvm.sandbox.api.Module;
import com.alibaba.jvm.sandbox.api.annotation.Command;
import com.alibaba.jvm.sandbox.api.resource.ConfigInfo;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.kohsuke.MetaInfServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Resource;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;

@MetaInfServices(Module.class)
@Information(id = "sandbox-control", version = "0.0.3", author = "[email protected]")
public class ControlModule implements Module {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Resource
    private ConfigInfo configInfo;

    // 卸载jvm-sandbox
    private void uninstall() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        final Class classOfAgentLauncher = getClass().getClassLoader()
                .loadClass("com.alibaba.jvm.sandbox.agent.AgentLauncher");

        MethodUtils.invokeStaticMethod(
                classOfAgentLauncher,
                "uninstall",
                configInfo.getNamespace()
        );
    }

    // @Http("/shutdown")
    @Command("shutdown")
    public void shutdown(final PrintWriter writer) {

        logger.info("prepare to shutdown jvm-sandbox[{}].", configInfo.getNamespace());

        // 关闭HTTP服务器
        final Thread shutdownJvmSandboxHook = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    uninstall();
                } catch (Throwable cause) {
                    logger.warn("shutdown jvm-sandbox[{}] failed.", configInfo.getNamespace(), cause);
                }
            }
        }, String.format("shutdown-jvm-sandbox-%s-hook", configInfo.getNamespace()));
        shutdownJvmSandboxHook.setDaemon(true);

        // 在卸载自己之前,先向这个世界发出最后的呐喊吧!
        writer.println(String.format("jvm-sandbox[%s] shutdown finished.", configInfo.getNamespace()));
        writer.flush();
        writer.close();

        shutdownJvmSandboxHook.start();

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy