Eclipse Anwendungen als Windows Service


Coding , , ,



RCP Anwendungen mit Eclipse bauen ist schön und gut. Manchmal braucht man aber wirklich einen Windows Service, da die Anwendung z.B. immer laufen muss und nur einen TrayIcon hat. Das ganze Unterfangen schien auf den ersten Blick gar nicht einfach. Zumal ich von Windows Interna, wie z.B. den Services keine Ahnung habe, da ich eigentlich aus der Unix Welt komme. Zum Glück habe ich ein Projekt, den Java Service Wrapper, gefunden, mit welchem es trivial ist, eine vorhandene Java Anwendung als Service laufen zu lassen.

Die Konfiguration es relativ einfach, es muss nur eine Konfigurationsdatei angelegt werden und einige Bibliotheken bzw. Batch Dateien kopiert werden. Nach dem das ganze RCP Produkt exportiert wurde, müssen folgende Dateien aus der Wrapper Distribution kopiert werden.

  • wrapper.dll und wrapper.jar, einfach in das Unterverzeichnis lib (muss neu angelegt werden) kopieren.

  • wrapper.exe und die 2 Install- bzw. Uninstal Batch Skripte in den Hauptordner legen.

  • wrapper.conf habe ich in den configuration Ordner gelegt.

Nachdem alle Dateien in dem entsprechendem Ort liegen, muss die Datei wrapper.conf angepasst werden:

wrapper.java.command=java
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
 
# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=lib/wrapper.jar
wrapper.java.classpath.2=plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=lib
 
wrapper.java.additional.1=
wrapper.app.parameter.1=org.eclipse.equinox.launcher.Main
wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=wrapper.log
wrapper.logfile.format=LPTM
wrapper.logfile.loglevel=INFO
wrapper.logfile.maxsize=0
wrapper.logfile.maxfiles=0
wrapper.syslog.loglevel=NONE
 
wrapper.console.title=Meine Eclipse Anwendungen
 
wrapper.ntservice.name=EclipseAnwendung
wrapper.ntservice.displayname=EclipseAnwendung
wrapper.ntservice.description=Test Eclipse Anwendung
wrapper.ntservice.dependency.1=
wrapper.ntservice.starttype=AUTO_START
wrapper.ntservice.interactive=true

In der Konfiguration wird angegeben, dass die DLL und JAR Dateien in dem Unterordner lib befinden. Da es sich hierbei im eine Eclipse Anwendung handelt muss im Classpath org.eclipse.equinox.launcher eingetragen sein. Der wrapper.app.parameter.1 muss für Eclipse 3.4 auf org.eclipse.equinox.launcher.Main gesetzt werden. Sobald die Anwendung auf den Desktop zugreifen muss, um z.B. Fenster darzustellen, muss die Option wrapper.ntservice.interactive auf true gesetzt werden.

Der Wrapper erwartet eigentlich, dass die Konfiguration an einem anderen Ort liegt, als im Ordner coniguration, aber warum sollte man dafür einen neuen Ordner anlegen? Damit da wieder alles passt, müssen noch kurz die 2 Batch Skripte angepasst werden. In beiden Dateien wird der Pfad zur wrapper.conf gesetzt, dies muss wie folgt abgeändert werden:

set _WRAPPER_CONF="%_REALPATH%/configuration/wrapper.conf"

Sobald das alles erlegt ist, reicht ein Doppelklick auf das Install Batch Skript, und der Service wird eingetragen :-)



Kommentar hinzufügen