В нашем веб-приложении мы используем Launcher для вызова некоторых функций командной строки (не моя идея) и видим результат.Это более или менее то, что мы делаем:
ClassWorld classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
Launcher launch = new Launcher();
launch.setWorld(classWorld);
result = launch.mainWithExitCode(sArguments);
Ну, я недавно узнал, что, поскольку mainWithExitCode
является статической функцией, она, вероятно, не выполняет то, что я думал, что сделал.Поэтому следующая версия, вероятно, будет просто:
Launcher launch = new Launcher();
result = launch.mainWithExitCode(sArguments);
Итак, мы тестировали наше приложение, и кажется, что оно течет из-за множества вещей, которые я не совсем понимаю.Итак, один старший из здесь (но не из нашего проекта) сказал нам, что это, вероятно, из-за CommandLineUtils
, использующего addShoutDownHook
, который «переносит» (что, вероятно, не самое подходящее слово) объект в java.lang.ApplicationShutdownHooks
, и это нене уничтожать объект, пока сервер работает (в основном все время).Таким образом, каждая командная строка, которую выбрасывает наше веб-приложение, застревает в памяти на сервере, никогда не очищаясь.
Итак, мне сказали, что я должен найти свой процесс в waitFor и выйти из ShutdownHook.Видя мой код, кажется, наконец-то сложно это сделать, поскольку я не вызываю CommandLineUtils
напрямую (полагаю, он вызывается внутри метода запуска).
Кто-нибудь знает, где яможете найти информацию для разработки этого?Я не прошу вас публиковать какой-то код, который решает проблему (хотя это было бы здорово), но чтобы указать мне на какую-то страницу или руководство, где я могу найти информацию, чтобы решить эту проблему.Время еще не является большой проблемой (у меня, вероятно, есть неделя или около того, чтобы выяснить и решить эту проблему), поэтому я могу потратить некоторое время на чтение руководств и тому подобного (и узнать, как это сделать в следующий раз).
Любая помощь будет оценена.Спасибо!