RE: Dialoge Process
Erik Mazoyer <[email protected]> Tue, 22 Feb 2011 16:58:31 +0100
| Newsgroups | gmane.comp.java.french.general |
|---|---|
| Message-ID | <750A0A783BB5794B8938CF493365CB4C513C6A4DE1@BE-BRU-MX01.uni-learning.local> |
Salut Jérome, Et tu aurais une architecture de test à proposer coté Java et C++ ? Je ne suis pas contre cette solution, mais j’ai peur qu’elle soit chronophage :). Erik De : jerome moliere [mailto:[email protected]] Envoyé : mardi 22 février 2011 16:54 À : Erik Mazoyer Cc : java Objet : Re: Dialoge Process Salut erik, moi à ta place (mais je n'y suis pas) je ferai du CORBA sur un bus même local et cela serait plus clean architecturalement et t'aurais pas de galères du type de celle rencontrée My 2 cents jerome PS: en plus t'as tout ce qu'il faut côté Java dans une JVM récente Le 22 février 2011 16:45, Erik Mazoyer <[email protected]<mailto:[email protected]>> a écrit : Bonjour à tous, Dans nos développements nous avons besoin de transformer un Flash en image sous Java. Pour cela nous avons écrit une passerelle JNI pour shooter l'animation en C++ et la récupérer en Java. Malheureusement l'ActiveX Flash n'est pas stable dans le temps et quand il plante, il plante aussi la JVM. Pour éviter cela, nous envisageons d'écrire un application C++ et de la lancer depuis Java. De ce fait, si l'application plante, la JVM n'est pas perturbée. Mais (car il y a toujours un mais) il faut mettre en place une communication entre l'application et la JVM (lancer l'application pour chaque rendu est trop consommateur de temps). Les solutions de dialogue basées sur ip sont proscrites car l'application doit pouvoir fonctionner sur tout ordinateur avec ou sans Firewall sans que l'utilisateur n'est à modifier sa configuration (souvent il n'en a pas le droit). J'avais bêtement pensé à utiliser les InpuStream et OutputStream du Process lancé par Java. Pour tester cela j'ai écrit une appli C++ qui fait un écho, elle lit en permanence sur std::cin et écrit ce qu'elle lit sur std::cout. Je l'ai testée sur l'invite de commande avec succès. Du coté Java : Process process = new ProcessBuilder(processFile.getCanonicalPath()).start(); OutputStream outputStream = process.getOutputStream(); InputStream inputStream = process.getInputStream(); Ensuite je délègue à des threads le remplissage de l'outputStream et la lecture de l'inputStream. Seulement voila, je reçois bien le message de l'appli comme quoi elle s'est lancée mais j'ai beau envoyer des caractères sur l'outputStream, je ne reçois rien sur l'inputstream. J'ai essayé la lib Shell d'adiGuba (com.developpez.adiguba.shell) sans que ça ne change quoi que ce soit. Ave- vous déjà réalisé cela ? Avez-vous des pistes de réflexions. Merci d'avoir lu jusqu'ici :) Erik -- [http://www.eclipsecon.org/2011/static/image/friends/100x100_speaking.gif]J.MOLIERE - Mentor/J auteur Eyrolles