Какое решение лучше всего подходит для выполнения запланированных задач в Java независимо от ОС?

Я хочу генерировать сигналы тревоги в своем настольном Java-приложении:

  • будильники, установленные с определенной датой/временем, которые могут быть через 5 минут или 5 месяцев
  • Мне нужно иметь возможность создать SWT-приложение при срабатывании тревоги
  • Мне нужно это, чтобы иметь возможность работать на любой ОС. Пользователи программного обеспечения, скорее всего, будут иметь Windows (, 90% из них ), а остальные Mac OS (, включая меня )
  • . лицензия на программное обеспечение должна позволять мне использовать его в коммерческой программе, не требуя открытого исходного кода (, следовательно, никакой GPL)
  • Я не могу требовать от пользователей установки Cygwin, поэтому реализация должна быть нативной для Windows и Unix

. Я разрабатываю с использованием Java, Eclipse, SWT, и мое приложение развертывается с моего сервера с помощью Java Web Start. Я использую Mac OS X.6 для разработки.


Думаю, у меня есть несколько вариантов:

  1. Запускать мое приложение при запуске и обрабатывать все самому;
  2. Воспользуйтесь системной службой.
  3. Используйте таблицу cron в Unix и запланированные задачи в Windows

Запускать при запуске

Мне не очень нравится это решение, я надеюсь на что-то более элегантное.
Ссылки:Я хотел бы запустить свою программу Java при запуске системы в Mac OS/Windows. Как я могу это сделать?

Системная служба

Если я запускаю его как системную службу, я могу извлечь из этого пользу, потому что ОС гарантирует, что мое программное обеспечение:

  • всегда работает
  • не имеет/не нуждается в графическом интерфейсе
  • перезапуск при сбое

Я изучил некоторые ресурсы, которые могу использовать:

  • run4j — CPL — работает только в Windows, кажется подходящим кандидатом
  • jsvc — Apache 2.0 — только Unix,кажется подходящим кандидатом
  • Java Service Wrapper — Разное — я не могу позволить себе платные лицензии, а бесплатная — GPL. Следовательно, я не хочу/не могу использовать это

Мои вопросы в системных сервисных опциях:

  1. Есть ли другие варианты?
  2. Верна ли моя запланированная реализация:

    • при запуске приложения проверять наличие службы
    • если он не установлен:
      • попросите пользователя установить службу (root в Unix, UAC в Windows)
      • если основной ОС является Windows, используйте run4j для регистрации службы
      • если основной ОС является Unix, используйте jsvc для регистрации службы
    • если он не запущен, запустите его

Таким образом, при первом запуске приложение установит сервис и запустит его. Когда приложение закрывается, служба все еще работает, и приложение больше не понадобится, за исключением случаев, когда оно не зарегистрировано.
Тем не менее, я думаю, что мне все еще не хватает функции «запуск при запуске».

Я прав? Я что-то упускаю?

cron / планировщик заданий

В Unix я могу легко использовать таблицу cron, не нуждаясь в приложении для эскалации пользователя до root. Мне не нужно обрабатывать перезапуски, изменения системной даты и т. д. Кажется приятным.

В Windows я могу использовать планировщик заданий , даже в командной строке -, используя At или SchTasks . Это кажется хорошим, но мне нужно, чтобы это было совместимо с XP до 7, и я не могу легко это проверить.


Так что бы вы сделали? Я что-то пропустил? Есть ли у вас какие-либо советы, которые могли бы помочь мне выбрать лучшее и самое элегантное решение?

8
задан Community 23 May 2017 в 12:33
поделиться