ProcessBuilder ne fonctionne pas à partir d'un serveur weeb [Fermé]

Signaler
Messages postés
14
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
29 juin 2016
-
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
-
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

Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
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 ?
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Rien ça veut dire quoi ? Tu as une exception ? Que disent les logs ?
Est-ce que tu as essayés mon code ?
Messages postés
14
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
29 juin 2016
1
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...
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Si tu as "exit : 0", le programme commence et termine, c'est déjà mieux que rien.

Il est censé faire quoi ton programme ?
Messages postés
14
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
29 juin 2016
1
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.
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Et tu écris des logs de temps en temps pour suivre l'avancement du programme ?
Quand tu l'exécutes en local tu as plus que "exit : 0" ? Qu'est-ce qu'il te manque ?

J'avoue qu'exécuter un .exe sur un serveur Java c'est super bizarre, je ne sais pas trop quelles sont les limitations notamment en terme d'accès aux répertoires.

Tu essayes de sauvegarder le fichier en chemin absolu ou relatif ?

Remarque : on peut faire du Word directement en Java.
http://poi.apache.org/document
http://www.tutorialspoint.com/apache_poi_word/apache_poi_word_document.htm