java background / daemon / service Cross platform meilleures pratiques

Je cherche la meilleure façon de faire fonctionner mon programme java de bureau en arrière-plan (daemon/service ?) sur la plupart des plates-formes (Windows, Mac OS, Linux [Ubuntu en particulier]).

Par "meilleur moyen", j'espère trouver un moyen qui:

  1. nécessite un Minimum quantité de code spécifique à la plate-forme.
  2. ne pas exiger que l'utilisateur fasse quoi que ce soit qu'un utilisateur d'ordinateur général ne puisse / ne ferait pas
  3. ne pas être un porc de ressources.

Je comprends ça mes exigences peuvent être irréalistes, mais j'espère qu'il existe une sorte de "meilleure pratique" pour ce type de situation.

Comment aller de l'avant?

26
demandé sur Cœur 2008-11-28 22:38:36

7 réponses

Vous pouvez utiliser les classes SystemTray et installer votre application comme toute autre dans la plate-forme par défaut.

Pour windows, il peut s'agir d'une tâche planifiée qui s'exécute au démarrage. Pour Linux et OSX Je ne sais pas (à part crontab qui est en quelque sorte trop technique) mais je suis sûr qu'ils ont tous deux un moyen de faire la même chose facilement.

Malheureusement (à ce jour) Apple n'a pas terminé le port 1.6.

Ce ne sera pas un vrai démon, mais une application comme Google Desktop.

J'ai le Quartz entendu est une bonne option. Mais je n'ai jamais utilisé.

7
répondu OscarRyz 2011-12-28 09:21:01

Vous pouvez exécuter une application Java en tant que service (Windows) ou un démon (Linux) en utilisant le code du démon Apache Commons.

Structure

Démon est fait de 2 parties. L'un écrit en C qui rend l'interface au système d'exploitation et L'autre en Java qui fournit L'API Daemon.

Plates-formes

Les plates-formes de Type Win32 et UNIX sont prises en charge. Pour les plates-formes Win32, utilisez procrun. Pour les plates-formes de type UNIX, utilisez jsvc.

Code Java

Vous devez ecrire une classe (MyClass) qui implémente les méthodes suivantes:

* 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()
15
répondu pro 2012-12-11 10:12:00

Vous pouvez transformer N'importe quel programme Java en un service/démon à l'aide de Java Service Wrapper. Il est utilisé par plusieurs projets OSS et est livré dans le cadre du Gestionnaire de référentiel Nexus Maven afin qu'il puisse être installé en tant que service prêt à l'emploi. Pour l'utiliser, vous, l'auteur, juste besoin de créer un fichier de configuration, puis exécuter un fichier de commandes pour créer le service sur Windows ou copier un script d'initialisation pour le bon niveau d'exécution sur Linux.

9
répondu Chris Lieb 2008-11-28 20:28:01

Si vous n'avez pas besoin de solution gratuite, vous pouvez utiliser Advanced Installer (www.advancedinstaller.com), il peut faire win-service ainsi que macOS installer à partir de votre pot, et plus encore..

1
répondu tomasb 2011-08-13 11:37:45

Consultez JDIC, le projet Java Desktop Integration Components. Il prend en charge l'intégration de bureau comme la barre d'état système (ou équivalent) avec une API multi-plateforme.

D'autres ont mentionné Quartz, qui est un planificateur de tâches d'entreprise. Il peut être léger, en fonction des tâches planifiées, mais il n'a pas de fonctionnalités intrinsèquement orientées bureau. Au contraire, beaucoup de ses fonctionnalités dépendent du support de l'entreprise comme une base de données relationnelle. Si votre l'application est principalement la planification des tâches, un service de Quartz sans tête exécutant des travaux, avec un client de bureau pour interagir avec le service est une approche raisonnable.

0
répondu erickson 2008-11-28 20:04:54

Le Projet Apache Directory Daemon semble être le meilleur moyen multiplateforme de le faire (avec des wrappers Java pour JSVC sous POSIX et procrun sous windows).

0
répondu ogrisel 2010-12-31 15:46:22

Les gens ont parfois des difficultés à trouver prunsrv.exe et / ou prunmgr.exe (composants de procrun), ce n'est pas bien documenté sur le site apache, Généralement il peut être trouvé dans les archives (note. ils disent que procrun est tomcat5.exe)

Pour windows, vous pouvez le trouver ici: http://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip (contient les versions 32 et 64 bits)

Vous n'avez pas besoin d'implémenter l'interface du démon ni de télécharger du tout, prunsrv peut être utilisé pour transformer n'importe quelle application en service windows

Parcourir cette archive pour d'autres plates -

0
répondu tomasb 2011-08-17 19:20:51