ProcessBuilder ne fonctionne pas à partir d'un serveur weeb

Fermé
DeadPool33 Messages postés 14 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 29 juin 2016 - 28 juin 2016 à 17:57
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 29 juin 2016 à 22:42
Bonjour,

J'essai d'exécuté un .EXE externe à partir de mon server web.

mon code fonctionne super bien lorsque je roule mon code en local ,mais
lorsque je le déploie sur mon server, l'exécutable ne fonctonne pas.

J'ai tenter de mondifier les variables d'environnement du ProcessBuilder mais sans succes.

Je suis à court d'idée..

Merci de bien vouloir m'aider

voici le code que j'utilise et qui fonctionne en local :


try{
ProcessBuilder processBuilder = new ProcessBuilder("pathtoExe\\executable.exe");
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput();
processBuilder.redirectInput();
Process process = processBuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
String s;
System.out.printf("Output of running is:");
while ((line = br.readLine()) != null) {
System.out.print("ligne out: ");
System.out.println(line);
}
BufferedReader stdError = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
process.waitFor();
System.out.println(process.exitValue());
}
catch (IOException | InterruptedException e) {
e.printStackTrace();
}

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 juin 2016 à 23:53
Bonjour,

Ton code fonctionne cependant je le trouve maladroit notamment sur la consommation des flux. Voici une alternative :

private static Thread consume(InputStream in, Consumer<String> out) {
    Thread t = new Thread(() -> {
        try (Scanner sc = new Scanner(in)) {
            while (sc.hasNextLine())
                out.accept(sc.nextLine());
        }
    });
    t.setDaemon(true);
    t.start();
    return t;
}

Process process = new ProcessBuilder("pathtoExe/executable.exe").start();
Thread out = consume(process.getInputStream(),
    line -> System.out.println("STDOUT: " + line));
Thread err = consume(process.getErrorStream(),
    line -> System.err.println("STDERR: " + line));
if (process.waitFor(5, TimeUnit.SECONDS)) {
    System.out.println("EXIT: " + process.exitValue());
    out.join();
    err.join();
} else {
    System.err.println("TIMEOUT !");
}

Quant à ton problème, de quel serveur on parle ?
Où est le fichier .exe sur le serveur ?
0
DeadPool33 Messages postés 14 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 29 juin 2016 1
29 juin 2016 à 14:36
j'ai un serveur glassfish qui roule sur windows server 2008 et c'est le code du serveur web qui appel l'exécutable. Quand je déploie et localhost, le exe s'exécute mais quand je le déploie sur glassfish, rien
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
29 juin 2016 à 21:02
Rien ça veut dire quoi ? Tu as une exception ? Que disent les logs ?
Est-ce que tu as essayés mon code ?
0
DeadPool33 Messages postés 14 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 29 juin 2016 1
Modifié par DeadPool33 le 29/06/2016 à 21:54
J'ai essayer ton code et il fonctionne en localhost mais pas sur mon server glassfish..
Quand je dit rien, et bien avec ton code par exemple, je reçois" exit : 0" comme message et c'est tout...aucun autre message ou erreur...
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
29 juin 2016 à 22:01
Si tu as "exit : 0", le programme commence et termine, c'est déjà mieux que rien.

Il est censé faire quoi ton programme ?
0
DeadPool33 Messages postés 14 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 29 juin 2016 1
29 juin 2016 à 22:27
mon programme créer un fichier word et le sauvegarde sur le serveur et par la suite est envoyé au client pour qu'il puisse le télécharger.
0