Yet Another Java Service Wrapper (YAJSW)
Auf dieser Seite gibt es einen kurzen Erfahrungsbericht über das Arbeiten mit YAJSW:

Was ist YAJSW?

Yet Another Java Service Wrapper (YAJSW) ermöglicht es unter anderem, Java Programme als Windows Service laufen zu lassen. Außerdem bietet YAJSW für mich noch folgende Dienste:
  • Wenn meine Applikation "abstürzt" oder "hängen bleibt", wird sie automatisch neu gestartet.
  • Console-Ausgaben werden direkt in einem Log-File erfasst. Wenn das Logfile zu groß wird, wird automatisch ein Log-Rotate durchgeführt.
  • Wenn das Service gestoppt wird, so kann eine E-Mail Benachrichtigung ausgeschickt werden.

Einrichtung eines Services

Folgende Schritte sind umzusetzen:
  • YAJSW runterladen.
    (Ich habe den letzten gültigen Stable Release 11.11 verwendet.)
  • Die Zip-Datei in das Applikationsverzeichnis kopiert und entpackt.
  • Den Task Manager geöffnet und unter dem Tab Processes die Spalte "PID (Process Identifier)" hinzugefügt. (View - Select Columns)
  • Die Applikation, die als Service gestartet werden soll, normal starten und aus dem Task Manager die PID notieren.
    (ACHTUNG: nicht mit einer bat-Datei starten sondern wirklich den Java-Befehl in der Konsole ausführen, ansonsten kommt die Fehlermeldung: creating image configuration file NOT YET IMPLEMENTED)
  • Danach die Command Line starten und in das bat Verzeichnis vom YAJSW wechseln.
  • Dort den Befehl genConfig.bat <PID> ausführen.
    Damit wird im conf Verzeichnis die Datei wrapper.conf erstellt.
    (An der Konfiguration waren für das reine Ausführen des Programms dann keine Änderungen mehr nötig. Man könnte allerdings unter den wrapper.ntservice.* Properties andere Namen, Titel und Beschreibungen für das Service eintragen.)
  • Nachdem die Konfiguration erstellt worden ist, muss man die Applikation schließen, damit sie in den nächsten Schritten vom Wrapper gestartet werden kann.
  • Danach habe ich mit dem Befehl runConsole.bat getestet, ob die Applikation erfolgreich gestartet wird.
    (Das Ergebnis sieht man, wenn man die Datei wrapper.log im log Verzeichnis öffnet.)
  • Wenn das Service erfolgreich auf der Konsole läuft, kann man es mit dem Befehl installService.bat als Service installieren.
    (ACHTUNG: Nimmt man Änderungen in der Konfiguration vor, dann muss man das Service mit uninstallService.bat deinstallieren und erneut installieren.
  • Dann kann man das Service über die service.msc wie gewohnt starten. (Alternativ kann man aber auch startService.bat von YAJSW verwenden.)
Einmal konnte ich das Service nicht einrichten, weil die Fehlermeldung "Error 2: The system cannot find the file specified." beim Starten des Services angezeigt wurde. In diesem Fall habe ich in der Konfiguration den vollständigen Pfad zur java.exe hinzugefügt mit folgender Einstellung:

wrapper.ntservice.java.command = "C:\\Program Files\\Java\\jdk1.8.0_60\\bin\\java"

Mehr Details zu diesem Problem habe ich hier gefunden.

Mailfunktionalität

Damit der Service Wrapper die Mails versendet, wenn das Service gestoppt wird, wurden in der wrapper.conf folgende Einträge hinzugefügt:

#******************************************************************
# EVENT HANDLING
#******************************************************************
wrapper.script.ABORT=scripts/sendMail.gv
wrapper.script.ABORT.args=juergen.platzer@xy.com,Betreff,Mailtext
wrapper.script.STOP=scripts/sendMail.gv
wrapper.script.STOP.args=juergen.platzer@xy.com,Betreff,Mailtext
wrapper.script.RESTART=scripts/sendMail.gv
wrapper.script.RESTART.args=juergen.platzer@xy.com,Betreff,Mailtext
wrapper.script.SHUTDOWN=scripts/sendMail.gv
wrapper.script.SHUTDOWN.args=juergen.platzer@xy.com,Betreff,Mailtext

(Weitere Hinweise über die Parameter habe ich hier gefunden.)

Damit wurden die Adressaten, der Betreff und der E-Mailtext festgelegt. Zusätzlich musste im Groovy Script sendMail.gv im Verzeichnis scripts noch der SMTP Server und die Absende-Adresse eingetragen werden:

mailHost='<SMTP-Server>' // set your mail provider
mailFrom='MeinTollesProgramm@xy.com' // set your mail from