Я хочу запустить веб-сервис через исполняемый jar, который я создаю (чтобы в конечном итоге я мог использовать procrun, чтобы он запускался как служба Windows). В настоящее время веб-сервис запускается через командную строку, вызывая основной метод в классе.Java, как сохранить ссылку на процесс, чтобы я мог запускать process.destroy()
Вот мой код до сих пор:
public class test
{
private static boolean stop = false;
private static Process process;
public static void start(String[] args)
{
String classpath = "my\\classpath\\test.jar";
ProcessBuilder processBuilder = new ProcessBuilder("C:\\java\\jdk1.6.0_43\\bin\\java",
"-cp", classpath,
"com.test.theJavaWebServiceWithAMainMethod");
try
{
process = processBuilder.start();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void stop(String[] args)
{
stop = true;
process.destroy();
}
public static void main(String[] args)
{
if (args != null && args.length > 0)
{
String command = args[0];
if ("start".equals(command))
{
start(args);
}
else if ("stop".equals(command))
{
stop(args);
}
}
else
{
throw new IllegalArgumentException("command missing");
}
}
}
Запуск работает отлично. Я вижу, что процесс запускается в диспетчере задач, и теперь я могу подтянуть WSDL. Однако, когда я иду, чтобы убить процесс через process.destroy()
(вызывая основной метод с аргументом stop
), я получаю исключение нулевого указателя, которое я предполагаю, потому что это новый экземпляр jvm, поэтому он не знает процесс с того момента, когда я start
. Каков наилучший способ сохранить этот объект процесса или pid или что-то еще, поэтому, когда я перехожу к вызову stop, я могу найти и убить запущенный веб-сервис (java-процесс)?
Вы правы, думая, что это другой процесс java (и JVM). –