java background / daemon / service кроссплатформенные лучшие практики - PullRequest
26 голосов
/ 28 ноября 2008

Я ищу лучший способ заставить мою настольную Java-программу работать в фоновом режиме ( демон / служба ?) На большинстве платформ (Windows, Mac OS, Linux [в частности, Ubuntu]). 1003 *

«Лучшим способом» я надеюсь найти способ, который будет:

  1. требуется минимальное количество кода для конкретной платформы.
  2. не требует от пользователя делать что-либо, что обычный компьютерный пользователь не может / не будет делать
  3. не быть боровом ресурса.

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

Как идти вперед?

Ответы [ 7 ]

15 голосов
/ 30 декабря 2008

Вы можете запустить приложение Java как службу (Windows) или демон (Linux), используя код демона Apache Commons .

Структура

Демон состоит из 2 частей. Один написан на C, который создает интерфейс для операционной системы, а другой - на Java, который предоставляет API-интерфейс Daemon.

1009 * Платформа * Поддерживаются как Win32, так и UNIX-подобные платформы. Для платформ Win32 используйте procrun. Для UNIX-подобных платформ используйте jsvc. Java-код

Вы должны написать класс (MyClass), который реализует следующие методы:

* void load(String[] arguments): Here open the configuration files, create the trace file, create the ServerSockets, the Threads
* void start(): Start the Thread, accept incoming connections
* void stop(): Inform the Thread to live the run(), close the ServerSockets
* void destroy(): Destroy any object created in init()
9 голосов
/ 28 ноября 2008

Вы можете превратить любую Java-программу в службу / демон, используя Java Service Wrapper . Он используется несколькими проектами OSS и поставляется как часть Nexus Maven Repository Manager, так что его можно установить как сервис из коробки. Чтобы использовать его, вам, автору, нужно просто создать файл конфигурации, а затем запустить простой пакетный файл для создания службы в Windows или скопировать сценарий инициализации на правильный уровень выполнения в Linux.

7 голосов
/ 28 ноября 2008

Вы можете использовать классы SystemTray и установить свое приложение как любое другое на платформе по умолчанию.

Для окон это может быть запланированное задание, запускаемое при запуске. Что касается Linux и OSX, я не знаю (кроме того, что crontab слишком техничен), но я уверен, что у них обоих есть способ легко сделать то же самое.

К сожалению (на сегодняшний день) Apple не закончила порт 1.6.

Это будет не настоящий демон, а приложение, подобное Google Desktop.

Я слышал, Кварц - хороший вариант. Но я никогда не использовал его.

1 голос
/ 13 августа 2011

Если вам не нужно бесплатное решение, вы можете использовать Advanced Installer (www.advancedinstaller.com), он может сделать win-service, а также установщик MacOS из вашего JAR и многое другое ..

0 голосов
/ 15 августа 2011

Люди иногда испытывают трудности с поиском prunsrv.exe и / или prunmgr.exe (компоненты procrun), которые плохо документированы на сайте apache, как правило, его можно найти в архивах (заметьте, они говорят, что procrun - это tomcat5. ехе)

для окон вы можете найти здесь: http://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip (содержит 32- и 64-разрядные версии)

вам не нужно ни реализовывать интерфейс демона, ни загружать его вообще, prunsrv можно использовать для превращения любого приложения в службу Windows

просмотреть этот архив для других платформ

0 голосов
/ 31 декабря 2010

Проект Apache Directory Daemon звучит как лучший кроссплатформенный способ сделать это (с обертками Java для JSVC под POSIX и прокручивать под windows).

0 голосов
/ 28 ноября 2008

Проверьте JDIC, ​​ проект Компоненты интеграции с рабочим столом Java. Он поддерживает настольную интеграцию, такую ​​как системный трей (или эквивалентный) с кроссплатформенным API.

Другие упоминают Quartz, который является планировщиком заданий предприятия. Он может быть легковесным, в зависимости от запланированных заданий, но у него нет функций, ориентированных на рабочий стол. Напротив, многие из его функций зависят от поддержки предприятия, такой как реляционная база данных. Если ваше приложение в первую очередь планирует задачи, разумным подходом является безголовая служба Quartz, выполняющая задания, с клиентом для настольного компьютера для взаимодействия со службой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...