Использование Runtime
в предположительно пожизненном веб-приложении Java EE - плохая идея.
Прежде всего, новый процесс, созданный с помощью Runtime
, будет выделять столько новой динамической памяти, сколько и текущая среда Java. Это не обязательно может нанести вред внутри простого Java-приложения, которое использует по умолчанию 64 МБ или чего-то еще, но в веб-приложении Java EE, которое обычно выделяет память в гигабайтах, это будет пустой тратой памяти.
Во-вторых, вы просто не хотите, чтобы порождалось неуправляемых процессов / потоков внутри веб-приложения Java EE. Что если процесс / поток останавливается и / или работает вечно, что может привести к невозможности завершить работу / перезапустить веб-приложение Java EE, когда это необходимо (вам нужно сначала полностью его убить)? Что если процесс завершится сбоем и завершит работу всей среды выполнения Java EE?
Наконец, вы не можете изменить пользователя, выполняющего процесс. Это всегда будет тот же пользователь, который выполнил текущую среду выполнения Java.
У вас есть в основном 2 варианта:
Не используйте Java для этого вообще. Например, просто выполняйте работу, используя предоставленный платформой менеджер фоновых заданий, такой как Cron на платформах на основе Unix и планировщик задач на платформах на базе Windows.
Сделайте это на 100% Java. Выполните ту же цель, используя чистую Java, без необходимости порождать процесс. При необходимости вы можете управлять фоновыми заданиями, используя ExecutorService
API или стороннюю библиотеку, такую как Quartz. Обратите внимание, что даже для этих заданий все еще требуется выполнение 100% чистого кода Java.