JavaServiceWrapper: приложение не ожидает завершения работы - PullRequest
0 голосов
/ 22 октября 2009

У меня есть приложение, которое порождает рабочие потоки и обрабатывает файлы в рабочих потоках. По запросу на завершение работы приложения я хочу, чтобы приложение завершало работу, только когда рабочий поток завершил обработку текущего файла (если он обрабатывает файл). Я использую JavaServiceWarapper для управления своим приложением.

Я добавил перехватчики завершения работы, которые информируют рабочий поток не начинать обработку нового файла при получении запроса на отключение.

Обработка файла никогда не занимает более 30 секунд, и я установил тайм-ауты на 60 секунд, просто чтобы быть одной из надежных сторон.

По какой-то причине, когда я запускаю останов, мое приложение немедленно закрывается и не ждет завершения рабочих потоков. Рабочие потоки получают запрос на завершение работы, но приложение завершается немедленно (и не ждет 60 секунд)

Некоторые важные настройки, которые у меня есть: wrapper.java.mainclass = org.tanukisoftware.wrapper.WrapperSimpleApp wrapper.adviser = FALSE wrapper.debug = FALSE wrapper.disablerestarts = FALSE wrapper.jvmexit.timeout = 60 wrapper.shutdown.timeout = 60 wrapper.signal.mode.hup = FORWARD wrapper.startup.timeout = 300 wrapper.usesystemtime = FALSE wrapper.ping.timeout = 120

Может ли кто-нибудь помочь мне с ошибкой, которую я совершаю.

1 Ответ

0 голосов
/ 22 октября 2009

Вы случайно не запускали все свои рабочие потоки как демоны? если это так, виртуальная машина посчитает работу, которую они делают несущественной, и умрет, несмотря на то, что она все еще работает ..

из JavaDocs Thread.setDaemon (): «Виртуальная машина Java завершает работу, когда все запущенные потоки - все потоки демона.»

попробуйте setDaemon (false) перед запуском Thread и посмотрите, поможет ли это.

...