package nebulachain.core;
import java.util.List;
public class Startup {
public static void main(String[] args) {
try {
CmdParams cmdParams = new CmdParams(args);
attach(cmdParams);
System.out.println("==========END==========");
} catch (Throwable t) {
System.err.println("Failed : " + t);
System.exit(-1);
}
}
private static void attach(CmdParams cmdParams) throws Exception {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final Class<?> vmdClass = loader.loadClass("com.sun.tools.attach.VirtualMachineDescriptor");
final Class<?> vmClass = loader.loadClass("com.sun.tools.attach.VirtualMachine");
Object attachVmdObj = null;
for (Object obj : (List<?>) vmClass.getMethod("list", (Class<?>[]) null).invoke(null, (Object[]) null)) {
if ((vmdClass.getMethod("id", (Class<?>[]) null).invoke(obj, (Object[]) null)).equals(Integer.toString(cmdParams.getPid()))) {
attachVmdObj = obj;
}
}
Object vmObj = null;
try {
if (null == attachVmdObj) {
vmObj = vmClass.getMethod("attach", String.class).invoke(null, Integer.toString(cmdParams.getPid()));
} else {
vmObj = vmClass.getMethod("attach", vmdClass).invoke(null, attachVmdObj);
}
vmClass.getMethod("loadAgent", String.class, String.class).invoke(vmObj, cmdParams.getAgentPath(), cmdParams.getCorePath());
} finally {
if (null != vmObj) {
vmClass.getMethod("detach", (Class<?>[]) null).invoke(vmObj, (Object[]) null);
}
}
}
}