# Java Programm als Dienst auf Server



## pascal1131 (17. Nov 2009)

Hallo Zusammen!
Ich beschreibe erstmal die Ausgangssituation:

Ich habe 2 Server Server1(Win2000 Server) und Server2 (Win2003 Server) und eine Oracle Datenbank.
Der Windows 2000 Server ist außerdem noch über einen UC4 Connector an ein Unix System angeschlossen.

Über diese Struktur laufen verschiedenste Prozesse.
Nun kommt es ab und an mal vor , dass zB ein Dienst nicht läuft oder eine Verbindung von Server1 zu Server2 nicht besteht etc.

Ich würde daher gerne ein Programm schreiben schreiben(das selbst als Dienst läuft) , dass die einzelnen Schnittstellen abfragt und auch den Status der Dienste abfragt und bei negativem Ergebnis eine Email an mich schickt.

Nun zu der Frage... geht sowas eigentlich? Kann ich Java als Dienst auf einem Windows Server laufen lassen? Und Abfragen ob Dienste laufen bzw. Verbindungen zu anderen Windows Servern bestehen?

Über hilfreiche Informationsquellen würde ich mich sehr freuen! 

MfG Pascal


----------



## Jay_030 (17. Nov 2009)

Es gibt ein (schon etwas angestaubtes) Apache Projekt, womit man Java-Programm nativ als Daemon oder Dienst ausführen lassen kann. Ich habe es zwar noch nie benutzt, aber ist sicherlich ganz hilfreich für dich: Daemon - Daemon : Java based daemons or services

Das Probleme dürfte viel mehr sein, den Status der Dienste durch das OS abfragen zu lassen. Eine simple Abfrage über Ping (also nicht der ICMP Ping sondern einer, der übers Anwendungsprotokoll geht) oder eine Status-Nachricht (wenn es sowas im jeweiligen Netzwerkprotokoll gibt) geht natürlich mit Java problemlos.


----------



## Geeeee (17. Nov 2009)

Ich hab gute Erfahrung mit Java Service Wrapper - Download Java Service Wrapper gemacht. Die Einrichtung hört sich etwas kompliziert an, aber wenn man es einmal genutzt hat, ist es recht angenehm.
Es gibt auch einen Weg mit Windows-Boardmitteln einen Service anzulegen (cmd und regedit). Hab ich nur ein-, zweimal gemacht und auch den Link verloren, in dem das mal erklärt war.


----------



## pascal1131 (17. Nov 2009)

Danke für die Antworten! 
Ich werde mir die Vorschläge mal bei gelegenheit anschauen.
Also siehts momentan so aus:

- Es ist Möglich Java als Dienst/Daemon laufen zu lassen.
- Es ist möglich zu Überprüfen ob die anderen Server erreichbar sind(per Ping?) 

Das Problem ist also das Abfragen der Dienste... richtig?
Gruß Pascal


----------



## Jay_030 (17. Nov 2009)

Japp, so schaut's aus.

Wenn die Dienste die Statusabfrage auch über die Netzwerkschnittstelle machen, wäre das Problem auch gelöst. Dann könntest du dich einfach über eine einfache Socketverbindung mit dem Dienst in Kontakt setzen, ein "Abfrage-Paket" schicken und die Antwort entsprechend interpretieren.


----------



## Gast2 (17. Nov 2009)

pascal1131 hat gesagt.:


> - Es ist möglich zu Überprüfen ob die anderen Server erreichbar sind(per Ping?)


macht keinen Sinn ... da Du damit nur prüfst ob der Rechner im Netzwerk erreichbar ist



> Das Problem ist also das Abfragen der Dienste... richtig?


nein ... Du musst nur eine Socketverbindung öffnen ... wird die Verbindung hergestellt, dann ist der Dienst erreichbar ... Du musst in dem Moment noch nicht mal interna des Kommunikationsprotokolls für den Server kennen

hand, mogel


----------



## Jay_030 (17. Nov 2009)

@ mogel
Und wie verhält es sich dann mit dem jeweiligen Status des Dienstes? Es gibt ja mehr, als an und aus. Das interessiert mich jetzt auch. *g*


----------



## Gast2 (17. Nov 2009)

dann wirst du wohl oder übel die entsprechende API bemühen dürfen ... Java hat null Ahnung von Diensten


----------



## Jay_030 (17. Nov 2009)

Tjo, das weiß ich, danke. Die Frage, die sich der Threadersteller stellen sollte, ist, ob die Windows-Dienste ne Möglichkeit anbieten, Informationen (die über An/Aus hinausgehen) abfragen zu lassen.


----------



## pascal1131 (18. Nov 2009)

hmm ok das ganze gestaltet sich also schwieriger als ich dachte.

Macht es vom Aufwand her vielleicht mehr Sinn das ganze mit C++ zu versuchen? bzw. mich nochmal in C++ einzuarbeiten?

Denn wenn es mit Java keine Möglichkeit gibt einen Dienst der "aus" ist zu starten dann macht es keinen Sinn was ich vor habe.

Gruß Pascal


----------



## Gast2 (18. Nov 2009)

mit Java geht das über JNI ... musst Dich also wohl oder über mit der Windows-API auseinander setzen ... Du kannst Dir aber die C#-Express Edition ziehen ... und dann ServiceController-Klasse (System.ServiceProcess) ... da werden sie geholfen -> C/C++ Forum :: C# und .NET


----------



## pascal1131 (24. Nov 2009)

So, hab noch mal ein wenig recherchiert und bin zu dem Entschluss gekommen, dass ich das ganze mit C# mache...
Vielen dank für die Hilfe! 
Gruß Pascal


----------

