Service Windows et application Java

Résolu
davidfdm2002
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006
- 22 avril 2005 à 17:53
davidfdm2002
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006
- 4 mai 2005 à 10:10
Je souhaite réalisé un service Windows mepermettant de lancer une application java (un serveur Web) au demarrage du Systeme .( NT/2000 server/XP)
Donc j'ai créé une application Delphi avec un objet de type 'TService'.
Je lance dans l'evenement OnExecute ( j'ai aussi essayé OnStart avec un thread...) mon programme java avec la fonction CreateProcess.
Je relance Windows, et O miracle mon programme se lance, sans que je me connecte....super...oui Mais...
Si je me connecte avec n'importe quel utililisateur puis me deconnecte, mon application java se ferme egalement, pourtant le service lui tourne encore (mon appli service tourne dans le vide mais elle tourne comme le dirai gallilée...).
Visiblement mon service lance le programme java, mais ce dernier devient independant, et reagi a la demande de fermeture des applications lors de la fermeture d'une session...
Ma question est simple, quelqu'un a t il une idée pour "ancré" mon appli Java a mon service...et ou empeché sa fermeture innopinée....
Un grand merci au maitre Delphi qui sera me repondre!!!!
Ci dessous mon code de test :

procedure TMyServiceThread.Execute;
Var StartInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
Fin : Boolean;
Fichier : String;
StdOutFile : THandle;
SecurityAttr : TSecurityAttributes;
Lus : Cardinal;
Bloc : PChar;
Long : Cardinal;
Programme : String;
Repertoire :String;
Result:String;


begin



repertoire:='C:\divers\java\serveurweb\jre150\bin\javaw.exe -cp';
programme:=' .\lib\webserver.jar;.\lib\servlet.jar;.\lib\tools.jar com.mediscs.test.Test';
}
FillChar (SecurityAttr, SizeOf(SecurityAttr), #0);
SecurityAttr.nLength := SizeOf (SecurityAttr);
SecurityAttr.lpSecurityDescriptor := Nil;
SecurityAttr.bInheritHandle := FALSE;



Try

FillChar(StartInfo,SizeOf(StartInfo),#0);
StartInfo.cb := SizeOf(StartInfo);
StartInfo.dwFlags := STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW;
StartInfo.wShowWindow := SW_HIDE;



chdir('C:\divers\java\serveurweb\');
If CreateProcess(Nil, PChar(repertoire+programme), Nil, nil, false,0, Nil, 'C:\divers\java\serveurweb\', StartInfo,ProcessInfo) Then
Begin
{ L'application est bien lancée, on va en attendre la fin }
{ ProcessInfo.hProcess contient le handle du process principal de l'application }
Fin:=False;
Repeat
{ On attend la fin de l'application }
Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
WAIT_TIMEOUT :; { elle n'est pas terminée, on continue d'attendre }
End;

......Vous devinez la suite

3 réponses

davidfdm2002
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

4 mai 2005 à 10:10
Je repond a ma question, comme j'ai trouvé la reponse.
Il suffit d 'executer le java.exe avec l'option -Xrs.
Cette option "court circuite" les messages de fermetures de windows.
Ne pas oublier de gerer la fermeture dans le programme JAVA.
3
vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006

22 avril 2005 à 21:52
Si la montagne ne va pas à toi ...

ne perce pas de tunnel. contourne la.



Je ne comprends pas pourquoi tu veux lancer un web serveur en tant que
service windows, écrit en java, via un service écrit en delphi.



Je n'y connais rien en java mais ne pourrais-tu pas lancer directement le java en tant que service ?



Si c'est un web serveur, ne dispose t'il pas d'options pour se lancer en tant que service ?


Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
0
davidfdm2002
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

23 avril 2005 à 01:11
La montagne ne vient pas a moi, donc j'essaye d'aller a la montagne.

Java est normalement independant de la plateforme, tout ce qui est specifique a un systeme est donc difficilement réalisable. Un service Windows Java est donc presque une absurdité puisque cela rend mon aplication non portable sur les autres systemes (mac et lynux).
Cependant mon application se connectant a mon serveur est fait en java , il est donc plus simple d'avoir le serveur en java.
Malheureusement pour lancer le serveur web il est necessaire de garder une session utilisateur ouverte, ce qui sur windows n'est pas tres pratique.
Il existe bien un outils java pour la realisation de services (utilisé par le serveur tomcat par exemple ), mais il est lourd et contraignant, et n'etant pas proprietaire du code, tout changement ou bug risque de rendre mon programme egalement buggé. Donc je prefererai etre proprietaire a 100% de l'ensemble du code. Delphi me permet de realiser facilement un service, mais voila, il me manque un petit quelque chose, un je ne sais quoi qui empeche l'appli java d'etre vu comme dependant du service.
Voila
Toute aide sera la bienvenue.
0