Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment lancer une application depuis une application web de Java

11 réponses
Avatar
phuchau007
bonjour,

Je suis en train developper une application web en Java. Et je voulais
pouvoir lancer une application (Excel, Visio ...) sur le poste client
dans un programme Java

j'ai essayé de lancer une application dans mon programme Java en
utilisant ce morceau de code :

try{
Runtime runtime = Runtime.getRuntime();
Process slave = runtime.exec("c:/path/app.exe");
slave.waitFor();
}
catch(Exception e){
e.printStackTrace();
}

Ca marché bien en local. Mais le probleme c'est que ce programme ne
fonctionne plus lorsque je le met sur le serveur. Au fait le processus
a été bien créé mais l'application qui devrait s'executer (sur poste
client) ne fait pas son boulot.

Avez vous une idée ?

Merci d'avance pour votre aide

NGUYEN

10 réponses

1 2
Avatar
Isammoc
Avez vous une idée ?


AMHA, ca doit etre un probleme de droit...
en effet, les spécifications de Java confine les programmes selon leur
provenance...

En local, généralement, le programme a les pleins pouvoirs sur la
machine...
Mais dès que l'on fait tourner le programme depuis un serveur, il est
considéré comme étranger, donc avec des droits limités...

oups, j'ai employé le mot droit à la place du terme permission...

Merci d'avance pour votre aide

NGUYEN


Isammoc

Avatar
Lionel
phuchau wrote:
bonjour,

Je suis en train developper une application web en Java. Et je voulais
pouvoir lancer une application (Excel, Visio ...) sur le poste client
dans un programme Java


Je ne comprends pas très bien le "dans un programme java".
Tu fais une application web ou une application classique ?
Tu veux lancer un programme java depuis une application web ?
Ou lancer une application depuis un programme java ?
Dans tous les cas, ton serveur web ne peut pas lancer d'appli sur les postes
clients.


try{
Runtime runtime = Runtime.getRuntime();
Process slave = runtime.exec("c:/path/app.exe");
slave.waitFor();
}
catch(Exception e){
e.printStackTrace();
}


Qui execute ce code ?

Avatar
Symon
En créant un nouveau process coté serveur, tu vas lancer l'application
sur le serveur !

Il est impossible de démarrer une application sur le poste du client en
HTML (puisque c'est ce que renvoie ton serveur au client). Si le
navigateur pouvait lancer des process sur le client, ça serait
impossible à gérer d'un point de vue sécurité.

Si tu déploies sur un intranet dont tu maitrises le parc, tu peux
éventuellement trouver un workaround en utilisant un applet avec un
SecurityManager correctement configuré... Mais vérifies bien ton besoin,
car c'est assez étrange de procéder ainsi !

Ne peux tu pas renvoyer directement le fichier à ouvrir à l'utilisateur
? Sous Windows, l'utilisateur peut choisir d'ouvrir ce fichier avec
l'application par défaut...

Symon

Lionel wrote:
phuchau wrote:

bonjour,

Je suis en train developper une application web en Java. Et je voulais
pouvoir lancer une application (Excel, Visio ...) sur le poste client
dans un programme Java



Je ne comprends pas très bien le "dans un programme java".
Tu fais une application web ou une application classique ?
Tu veux lancer un programme java depuis une application web ?
Ou lancer une application depuis un programme java ?
Dans tous les cas, ton serveur web ne peut pas lancer d'appli sur les postes
clients.


try{
Runtime runtime = Runtime.getRuntime();
Process slave = runtime.exec("c:/path/app.exe");
slave.waitFor();
}
catch(Exception e){
e.printStackTrace();
}



Qui execute ce code ?





Avatar
phuchau007
En créant un nouveau process coté serveur, tu vas lancer l'application
sur le serveur !


c'est ce que je voulais dans un premier temps (voir scenario
ci-dessous). Mais le probleme c'est que l'application n'est pas lancée
(le processus a été bien créé pourtant!)

Il est impossible de démarrer une application sur le poste du client en
HTML (puisque c'est ce que renvoie ton serveur au client). Si le
navigateur pouvait lancer des process sur le client, ça serait
impossible à gérer d'un point de vue sécurité.


Tout à fait d'accord

Si tu déploies sur un intranet dont tu maitrises le parc, tu peux
éventuellement trouver un workaround en utilisant un applet avec un
SecurityManager correctement configuré... Mais vérifies bien ton besoin,
car c'est assez étrange de procéder ainsi

Ne peux tu pas renvoyer directement le fichier à ouvrir à l'utilisateur
? Sous Windows, l'utilisateur peut choisir d'ouvrir ce fichier avec
l'application par défaut...


ce serait la derniere etape de mon application


Le scenario de mon application web est suivant :

un employé se connecte au portail de l'entreprise. Il consulte
l'organigramme de l'entreprise pour savoir ou il se situe. Cet
organigramme est construit de facon dynamique (une partie du vrai
organigramme). On doit dans un premier temps d'aller chercher des
infos dans la BD, puis créer un fichier .xls et un fichier .vds (visio
de microsoft qui permet de construire des organigrammes). Enfin,
l'utilisateur ouvre le fichier .vds pour voir l'organigramme.

Je comptais faire un programme en VB qui permet de créer le fichier
.xls et .vds à partir des données renvoyées de la BD. Et ce programme
sera appellé par mon application JAVA (d'ou mon probleme). C'est peut
etre pas la meilleure solution !!!

En tout cas merci m'avoir repondu.

NGUYEN

Avatar
Symon
Ok. Je comprend mieux ! ;o)

Jette un oeil au projet POI d'Apache, cette API te permettra
d'intégrer la génération de ton fichier Excel au traitement coté
serveur.

http://jakarta.apache.org/poi/hssf/

Il te suffira alors de renvoyer le contenu du fichier généré coté
serveur sur le navigateur (brancher un FileInputStream sur ton
response.getOutputStream()) en définissant le content type
correspondant.

Ta solution actuelle peut également fonctionner, mais en utilisant un
langage tel que VB, ta solution perd en portabilité (elle ne
fonctionnera plus que dans un environnement Windows).

Bonne chance !
Avatar
David Molinier
Jette un oeil au projet POI d'Apache, cette API te permettra
d'intégrer la génération de ton fichier Excel au traitement coté
serveur.


Pour Excel, ça marcherait, mais pour le fichier Visio, POI ne sait pas
faire AMHA.

Il te suffira alors de renvoyer le contenu du fichier généré coté
serveur sur le navigateur (brancher un FileInputStream sur ton
response.getOutputStream()) en définissant le content type
correspondant.


En utilisant une servlet je suppose ?

Ta solution actuelle peut également fonctionner, mais en utilisant un
langage tel que VB, ta solution perd en portabilité (elle ne
fonctionnera plus que dans un environnement Windows).


Si le but est de générer un fichier Excel et un fichier Visio, la
portabilité...

La solution ne serait-elle pas plutôt de mettre un oeuvre un bon vieux
CGI ? Auquel cas, le recours à VB pour générer l'organigramme Visio est
une bonne idée, à défaut d'être la meilleure.


Néanmoins, j'aurais 3 questions pour l'auteur du thread, et une
suggestion de solution plus dans l'esprit Web :

1. pourquoi faut-il, pour générer le "bout" d'organigramme en visio,
générer d'abord un fichier Excel ?
2. pourquoi faut-il que l'organigramme soit généré en visio, qui a peu
de chance d'être visualisable par le navigateur du poste consultant ?
3. l'organigramme est-il si compliqué et surtout si dynamique qu'il
faille le dessiner à la volée plutôt que de le dessiner une fois pour
toutes et en faire un gif/jpg ?

En tout état de cause, je suggérerais personnellement le recours à XML
et XSL. Ton scénario devient le suivant : ton utilisateur se connecte,
sélectionne le bout d'organigramme qu'il veut consulter -> appel d'une
servlet qui génère, à partir des données issues de ta BDD un flux XML
reproduisant la hiérarchie à afficher :

<?xml version="1.0" encoding="ISO-8859-1"?>
<ARBRE>
<RESPONSABLE nom="Durand" prenom="Francis">
<TELEPHONE>
xx.xx.xx.xx.xx
</TELEPHONE>
<BUREAU>
524
</BUREAU>
<ETAGE>
2
</ETAGE>
</RESPONSABLE>
<SECRETAIRE>
...
</SECRETAIRE>
<LISTE_COLLABORATEURS>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
...
</LISTE_COLLABORATEURS>
</ARBRE>

Il te reste à créer une feuille XSL (arbreEnHTML.xsl) qui va se charger
de générer une feuille HTML à partir de ton XML (phase de
transformation). Libre à toi de trouver la façon la plus adaptée en HTLM
pour décrire ton organigramme : recours à des tableaux, des images, etc...

2 solutions pour déclencher la transformation :

1. côté serveur : la servlet effectue la transformation à l'aide de
Xalan et renvoie le flux vers l'OutputStream de la servlet
2. côté client : la servlet renvoie directement le flux XML vers le
client, mais rajoute dans l'en-tête du document XML le nécessaire pour
le client, à savoir en 2ème ligne (avant la balise <ARBRE>) :

<?xml-stylesheet type="text/xsl" href="arbreEnHTML.xsl"?>

Dans ce cas, ton fichier xsl doit être adressable dans le document root
de ton serveur Web.

Tu trouveras des exemples de transformation sur le site de Xalan
(http://xml.apache.org/xalan-j/), et des explications sur XML/XSL sur le
site du W3C (http://www.w3schools.com/xml/xml_xsl.asp).

Solution pas si compliquée qu'elle en a l'air, portable, gratuite,
"Web", formatrice (tu toucheras aux servlets, à XML, aux XSL, au
transformateur Xalan, codage en Java).

Que demander de plus ? Un peu de support pour la suite ?

:-)

--
David Molinier <*>

Avatar
David Molinier

Jette un oeil au projet POI d'Apache, cette API te permettra
d'intégrer la génération de ton fichier Excel au traitement coté
serveur.



Pour Excel, ça marcherait, mais pour le fichier Visio, POI ne sait pas
faire AMHA.

Il te suffira alors de renvoyer le contenu du fichier généré coté
serveur sur le navigateur (brancher un FileInputStream sur ton
response.getOutputStream()) en définissant le content type
correspondant.



En utilisant une servlet je suppose ?

Ta solution actuelle peut également fonctionner, mais en utilisant un
langage tel que VB, ta solution perd en portabilité (elle ne
fonctionnera plus que dans un environnement Windows).



Si le but est de générer un fichier Excel et un fichier Visio, la
portabilité...

La solution ne serait-elle pas plutôt de mettre un oeuvre un bon vieux
CGI ? Auquel cas, le recours à VB pour générer l'organigramme Visio est
une bonne idée, à défaut d'être la meilleure.


Néanmoins, j'aurais 3 questions pour l'auteur du thread, et une
suggestion de solution plus dans l'esprit Web :

1. pourquoi faut-il, pour générer le "bout" d'organigramme en visio,
générer d'abord un fichier Excel ?
2. pourquoi faut-il que l'organigramme soit généré en visio, qui a peu
de chance d'être visualisable par le navigateur du poste consultant ?
3. l'organigramme est-il si compliqué et surtout si dynamique qu'il
faille le dessiner à la volée plutôt que de le dessiner une fois pour
toutes et en faire un gif/jpg ?

En tout état de cause, je suggérerais personnellement le recours à XML
et XSL. Ton scénario devient le suivant : ton utilisateur se connecte,
sélectionne le bout d'organigramme qu'il veut consulter -> appel d'une
servlet qui génère, à partir des données issues de ta BDD un flux XML
reproduisant la hiérarchie à afficher :

<?xml version="1.0" encoding="ISO-8859-1"?>
<ARBRE>
<RESPONSABLE nom="Durand" prenom="Francis">
<TELEPHONE>
xx.xx.xx.xx.xx
</TELEPHONE>
<BUREAU>
524
</BUREAU>
<ETAGE>
2
</ETAGE>
</RESPONSABLE>
<SECRETAIRE>
...
</SECRETAIRE>
<LISTE_COLLABORATEURS>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
...
</LISTE_COLLABORATEURS>
</ARBRE>

Il te reste à créer une feuille XSL (arbreEnHTML.xsl) qui va se charger
de générer une feuille HTML à partir de ton XML (phase de
transformation). Libre à toi de trouver la façon la plus adaptée en HTLM
pour décrire ton organigramme : recours à des tableaux, des images, etc...

2 solutions pour déclencher la transformation :

1. côté serveur : la servlet effectue la transformation à l'aide de
Xalan et renvoie le flux vers l'OutputStream de la servlet
2. côté client : la servlet renvoie directement le flux XML vers le
client, mais rajoute dans l'en-tête du document XML le nécessaire pour
le client, à savoir en 2ème ligne (avant la balise <ARBRE>) :

<?xml-stylesheet type="text/xsl" href="arbreEnHTML.xsl"?>

Dans ce cas, ton fichier xsl doit être adressable dans le document root
de ton serveur Web.

Tu trouveras des exemples de transformation sur le site de Xalan
(http://xml.apache.org/xalan-j/), et des explications sur XML/XSL sur le
site du W3C (http://www.w3schools.com/xml/xml_xsl.asp).

Solution pas si compliquée qu'elle en a l'air, portable, gratuite,
"Web", formatrice (tu toucheras aux servlets, à XML, aux XSL, au
transformateur Xalan, codage en Java).

Que demander de plus ? Un peu de support pour la suite ?

:-)

--
David Molinier <*>

Avatar
phuchau007

Jette un oeil au projet POI d'Apache, cette API te permettra
d'intégrer la génération de ton fichier Excel au traitement coté
serveur.

Il te suffira alors de renvoyer le contenu du fichier généré coté
serveur sur le navigateur (brancher un FileInputStream sur ton
response.getOutputStream()) en définissant le content type
correspondant.

Ta solution actuelle peut également fonctionner, mais en utilisant un
langage tel que VB, ta solution perd en portabilité (elle ne
fonctionnera plus que dans un environnement Windows).



Merci Symon, je tiendrai en compte tes conseils


Si le but est de générer un fichier Excel et un fichier Visio, la
portabilité...

La solution ne serait-elle pas plutôt de mettre un oeuvre un bon vieux
CGI ? Auquel cas, le recours à VB pour générer l'organigramme Visio est
une bonne idée, à défaut d'être la meilleure.


Néanmoins, j'aurais 3 questions pour l'auteur du thread, et une
suggestion de solution plus dans l'esprit Web :

1. pourquoi faut-il, pour générer le "bout" d'organigramme en visio,
générer d'abord un fichier Excel ?


Parce que je voulais garder la trace et puis le passage de .xls vers
.vds est assez facile à faire !

2. pourquoi faut-il que l'organigramme soit généré en visio, qui a peu
de chance d'être visualisable par le navigateur du poste consultant ?


Non le but c'est juste de créer un fichier visio puis pour visualiser
bah on doit avoir visio installé sur son PC koi !

3. l'organigramme est-il si compliqué et surtout si dynamique qu'il
faille le dessiner à la volée plutôt que de le dessiner une fois pour
toutes et en faire un gif/jpg ?


Cette application serait plutot pour des grandes boites, de qqs
miliers d'employés (et qui utilisent SAP). Et il est tres probable que
l'organigrammme de la boite change assez frequemment et puis tu vois
un peu la taille de ce qu'il peut etre ?


En tout état de cause, je suggérerais personnellement le recours à XML
et XSL. Ton scénario devient le suivant : ton utilisateur se connecte,
sélectionne le bout d'organigramme qu'il veut consulter -> appel d'une
servlet qui génère, à partir des données issues de ta BDD un flux XML
reproduisant la hiérarchie à afficher :

<?xml version="1.0" encoding="ISO-8859-1"?>
<ARBRE>
<RESPONSABLE nom="Durand" prenom="Francis">
<TELEPHONE>
xx.xx.xx.xx.xx
</TELEPHONE>
<BUREAU>
524
</BUREAU>
<ETAGE>
2
</ETAGE>
</RESPONSABLE>
<SECRETAIRE>
...
</SECRETAIRE>
<LISTE_COLLABORATEURS>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
<COLLABORATEUR nom="...>
</COLLABORATEUR>
...
</LISTE_COLLABORATEURS>
</ARBRE>

Il te reste à créer une feuille XSL (arbreEnHTML.xsl) qui va se charger
de générer une feuille HTML à partir de ton XML (phase de
transformation). Libre à toi de trouver la façon la plus adaptée en HTLM
pour décrire ton organigramme : recours à des tableaux, des images, etc...

2 solutions pour déclencher la transformation :

1. côté serveur : la servlet effectue la transformation à l'aide de
Xalan et renvoie le flux vers l'OutputStream de la servlet
2. côté client : la servlet renvoie directement le flux XML vers le
client, mais rajoute dans l'en-tête du document XML le nécessaire pour
le client, à savoir en 2ème ligne (avant la balise <ARBRE>) :

<?xml-stylesheet type="text/xsl" href="arbreEnHTML.xsl"?>

Dans ce cas, ton fichier xsl doit être adressable dans le document root
de ton serveur Web.

Tu trouveras des exemples de transformation sur le site de Xalan
(http://xml.apache.org/xalan-j/), et des explications sur XML/XSL sur le
site du W3C (http://www.w3schools.com/xml/xml_xsl.asp).

Solution pas si compliquée qu'elle en a l'air, portable, gratuite,
"Web", formatrice (tu toucheras aux servlets, à XML, aux XSL, au
transformateur Xalan, codage en Java).

Que demander de plus ? Un peu de support pour la suite ?

:-)


C'est une tres bonne idée. Comme on est encore en phase d'etude,
j'essayerai d'etudier tout cela.

Encore merci pour vos réponses.

NGUYEN


Avatar
Symon
Ouaip, l'utilisation de XML/XSL est indispensable pour la génération
de gros documents structurés fréquemment mis à jour (typiquement,
ton organigramme... ).

Par contre, si la cible est très large (grosse entreprise avec accès
pour une bonne partie des employés par exemple... ce qui doit être
ton cas), il me semble dommage d'obliger les utilisateurs à avoir
Visio pour consulter un document aussi banal qu'un organigramme (gros
coût de licence pour pas grand chose, au final)...

Une fois que tu auras ton XML, tu pourrais facilement implémenter un
export au format PDF (voir l'API FOP d'Apache - xml.apache.org/fop -),
ce sera mieux que du HTML, notamment pour l'impression... et plus
portable qu'une solution Excel/Visio.

Si le passage par Visio est "obligatoire", on oublie l'idée de la
portabilité, et dans ce cas tu peux utiliser un outil type Adobe
Distiller Server pour convertir à la volée et coté serveur ton
fichier Visio en PDF... Tu pourras alors proposer les deux versions du
document aux clients de ton appli.

Ca évite d'imposer Visio aux utilisateurs (et ça permet surtout
d'éviter ce paradoxe : développer une application destinée à un
large public dans l'entreprise, entreprise qui ne peut pas se permettre
d'offrir une rolls comme Visio à chacun de ses employés).

En partant d'une base XML, on peut facilement imaginer pousser le truc
pour qu'il soit multiformat (HTML, PDF, Excel et Visio par exemple),
dans ce cas, l'utilisation de Forrest (toujours d'Apache -
forrest.apache.org -) peut s'avérer très utile...

Mais bon, après, il faut s'avoir s'arrêter... Si le cahier des
charges mentionne uniquement un export au format Visio, c'est pas la
peine de pousser le truc autant (à moins que vous ayez vraiment
beaucoup de temps). ;o)

Bon courage pour votre étude, c'est un sujet intéressant en tout
cas...

Symon
Avatar
phuchau007
Pour l'instant on privilege la solution avec Visio pour la simple
raison c'est d'éviter de refaire un algo trop complexe permettant de
bien dessiner les diagrammes (Visio fait ce boulot pour nous). Mais on
n'ecarte pas non plus la solution XML/XSL, c'est peut etre pour
plutard si on a le temps.

J'ai d'ailleur essayé d'utiliser les packages du projet POI dont tu
m'as proposé pour créer qqs fichiers excel. Le resultat est plutot
satisfaisant, encore merci ;p

La transformation des fichier Visio resultat en format PDF me semble
raisonnable pour des raisons dont toi meme as evoqué.

En tout cas c'est tres interessant d'avoir discuté avec vous sur ce
sujet. Cela m'a beaucoup aidé.

NGUYEN
1 2