IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème sur l'execution d'un Jar par un Exe


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 31
    Par défaut Problème sur l'execution d'un Jar par un Exe
    Bonjour à tous,
    D'abord milles excuses, je suis sur que mon problème est déjà apparu sur ce forum car c'est plutôt classique mais impossible de mettre la main dessus.

    Voici mon problème :
    - j'ai une application qui fonctionne correctement, appelons la A. C'est une application qui s’exécute en arrière plan.
    - sous certaines conditions, A peut lancer un Jar via la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    process = Runtime.getRuntime().exec(JAR_PATH + jarName);
    freeProcess();
     
    private void freeProcess() {
            // Consommation de la sortie standard de l'application externe dans un Thread separe
            new Thread() {
                public void run() {
                    try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                        String line = "";
                        try {
                            while ((line = reader.readLine()) != null) {
                            }
                        } finally {
                            reader.close();
                        }
                    } catch (IOException ioe) {
                    }
                }
            }.start();
     
            // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
            new Thread() {
                public void run() {
                    try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                        String line;
                        try {
                            while ((line = reader.readLine()) != null) {
                            }
                        } finally {
                            reader.close();
                        }
                    } catch (IOException ioe) {
                    }
                }
            }.start();
        }
    Appelons la seconde application B. C'est un micro-service SpringBoot qui est censé être autonome et continuer même si A s’arrête (ce qui n'est pas censé arriver).
    je précise que l’exécution se passe à merveille.

    Jusqu'ici, tout va pour le mieux dans le meilleur des mondes. Les problèmes interviennent si l'utilisateur s'amuse à stopper A alors que B tourne encore.
    Dans ce cas là, il est impossible de relancer A. Je clique sur l'icone et rien ne se passe.
    Si je quitte B, A se relance sans problème.

    Je suis ouvert à toutes les suggestions car je galère depuis hier et ça me rend

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Là comme ça je soupçonnerais que A commence par lancer B sans se soucier de savoir si "B est déjà lancé", et que s'il l'est, il est impossible de lancer deux instances de B à la fois, parce que B étant du Spring Boot, il monopolise un port d'écoute HTTP.

    Et que du coup, d'une manière ou d'une autre, l'échec à lancer une nouvelle instance de B, empêche A de faire quelque chose d'intéressant.

    Mais sans voir le principe de fonctionnement de A et B, il n'est pas exactement possible de faire mieux qu'un jeu de devinettes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 31
    Par défaut
    En fait, A lance B mais fait un traitement avant, or il ne le fait même pas au second appel. Je soupçonne donc que java considère que, comme B a été créé par A, A est toujours lancé tant B est toujours up. Le problème ne se pose que sous windows (B n'est pas prévue pour un environnement autre même si rien ne l’empêcherait). J'ai vérifié les PID, ils sont différents. J'ai également tenté de lancer B via java à la place de javaw mais même problème.

    Pour répondre à ta question, A est un processus se lançant au démarrage du poste et qui n'a pas d'interface. Il remonte les stats d'utilisation d'un logiciel, il descend les mises à jour et transfert différentes informations spécifiques pour des utilisateurs ciblés au besoin. C'est un EXE généré via launch4j (il est possible que ce soit ce dernier qui soit mal configuré).
    B est une application qui expose des web-service. Elle fournit des informations (logique pour un WS) et appel au besoin d'autres web-service sur un serveur. B n'attaque jamais une base de données directement.
    Les deux applications sont en Java.

    Petite précision amusante bien que rageante : je suis sous Netbeans et mon problème ne se reproduit pas si je lance A depuis l'IDE. Le problème ne survient que quand j'utilise le JAR en dehors de l'IDE.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 31
    Par défaut
    J'ai enfin trouvé ma solution.

    En fait, cela venait du paramétrage de Launch4J. L'option SingleInstance était mise et il considérait B en tant que "fille" de A et donc bloquait le lancement d'une seconde instance.
    J'ai viré ce paramétrage de %*!^$&@ et c'est bien passé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2018, 12h10
  2. [SP-2007] Job - Problème sur méthode Execute
    Par binouzzz19 dans le forum Développement Sharepoint
    Réponses: 5
    Dernier message: 11/01/2011, 12h01
  3. Réponses: 2
    Dernier message: 13/09/2010, 16h37
  4. Réponses: 8
    Dernier message: 05/12/2006, 15h44
  5. [Librairies] Exécution d'un .JAR sur un serveur distant via PHP
    Par kaboume dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/10/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo