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

Langage Java Discussion :

Process et Runtime dans un jar


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut Process et Runtime dans un jar
    Bonjour à tous,

    Après avoir diagnostiqué des fuites mémoires avec le Java Outlook Connector, j'ai décidé de repenser mon code et de rassembler les morceaux de mon appli qui utilisaient cette librairie dans des programmes indépendants.

    Ainsi, le projet fonctionne maintenant de la sorte :

    Mon appli effectue tous ces traitements, lorsque l'on veut récupérer des mails d'une boite Outlook -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Process proc = Runtime.getRuntime().exec("java plateforme.ReceiveMail param1 param2 ...");
    De même, lorsque que l'on veut envoyer des mails avec une boite Outlook -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process proc = Runtime.getRuntime().exec("java plateforme.SendMail param1 param2 ...");
    Enfin lorsqu'une manip avec un autre protocole (ftp, SMTP/pop3, mapping réseau) échoue, on envoie un mail d'alerte avec Outlook -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process proc = Runtime.getRuntime().exec("java plateforme.Alert param1 param2 ...");

    Les classes appelantes et appellées sont toutes dans le package "plateforme" d'où la nécessité d'indiquer : nom_du_package.nom_de_la_classe.

    Tout ce petit schéma d'exécution fonctionne à merveille. Je lis les flux des commandes lancées (in, erreur), je les ferme ainsi que le flux out, aucune exception les mails sont bien reçus et envoyés.

    En revanche, une fois que j'ai créé mon jar (fatJar d'éclipse) impossible d'obtenir un déroulement correct. Toujours aucune exception relevée mais aucun traitement effectué, le code de retour est 1 pourtant je n'ai même pas l'impression que la commande lance les prog java.

    Est-ce une erreur de chemin dans le exec ou y-a-t'il une autre raison ?


    Merci d'avance pour vos remarques et bonne continuation...

    @++

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Et tu n'as rien dans les flux de retour de ton process ???

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    abosolument rien, je lance mon jar en ligne de commande, je ne retrouve aucun des affichages de mes progs externes ni d'exceptions...

    et le waitfor() me parait exceptionnellement rapide...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    En fait, je viens de voir que mes commandes se lançaient bien (un java.exe supplémentaire trè bref à chaque fois)... Par contre je ne comprend pas pourquoi cela ne marche pas... j'ai construit mon jar avec les lib externes, est-ce que mes progs indépendants ne trouvent plus ces librairies ???

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    en effet tu devrais indiquer les différents jar dans ta commande !!!

    Tu es vraiment sûr de ne pas avoir une erreur de java.exe ????

    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    bah écoute, je ne suis plus sur de rien. Au départ, je fermais juste mes flux puis pour essayer de débugger un peu je les ais affichés. C'est peut être pas très beau mais il me semble que il m'est arrivé d'avoir des messages d'erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Process proc = Runtime.getRuntime().exec(exec);
    			out=new BufferedInputStream(proc.getInputStream());
    		    byte[] b=new byte[1024];
    		    int n=out.read(b);
    		    for(int i=0;i<n;i++) System.out.print((char)b[i]);
    			err=new BufferedInputStream(proc.getErrorStream());
    			byte[] b2=new byte[1024];
    		    int n2=out.read(b);
    		    for(int i=0;i<n2;i++) System.out.print((char)b2[i]);
    Maintenant, je lis peut être mal mon flux d'erreur...

    Sinon en ce qui concerne la commande avec les librairies, pourrais tu me montrer à quoi cela ressemble ???

    Mais alors, fatjar me fais un fichier .classpath avec les chemins des jars des libs que j'utilise. Tu es d'accord que les chemins sont de la forme : y:\...\...
    \edtftpj...jar. Mais alors pourquoi, lorsque je copie le jar de ma machine vers la machine de production (ormis les problèmes de Process) l'appli tourne normalement ???

    Je serais indisponible pendant une 1h45 (pause déjeuner), mais j'attends encore d'autres de tes remarques car je suis vraiment perdu...

    Merci d'avance !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    attends grosse erreur dans ma lecture de flux d'erreur... je laisse read(b) au lieu de read(b2)...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    Ba non ... tjrs pas d'exceptions...

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Il serait préférable de lire les flux depuis des Thread différents (sinon tu as des risque d'inter-blocages...

    De plus tu ne lis pas les flux en entiers, ceci serait mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            out=new BufferedInputStream(proc.getInputStream());
            try {
                byte[] b=new byte[1024];
                int n;
                while( (n=out.read(b)) > 0) {
                    System.out.write(b, 0, n);
                }
            } finally {
                out.close();
            }


    Citation Envoyé par winnux
    Sinon en ce qui concerne la commande avec les librairies, pourrais tu me montrer à quoi cela ressemble ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath=__chemin_vers_ton_jar__  plateforme.SendMail param1 param2 ...
    Le mieux serait d'abord de vérifier si cela fonctionne en ligne de commande...

    a++

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    ok, tu avais raison, maintenant que je lis les erreurs, je constate que le programme lancé ne trouve pas la librairie Java Outlook Connector...

    J'essaie donc d'utiliser l'option -classpath pour préciser le chemin de mon jar. Lorsque je le précise, il ne trouve plus la classe SendMail.

    Bref, je parviens à avoir l'un ou l'autre mais pas les deux ...
    Voici l'arborescence de mon projet :

    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
     
     
    PlateformeCommunicationEDI.jar
               l
               l
               l _ _ _ plateforme
                               l
                               l
                               l _ _ _ SendMail
                               l _ _ _ ReceiveMail
                               l _ _ _ Alert
                               l _ _ _ appli qui lance les trois autres progs
               l
               l
               l _ _ _ joc-v1.2.6.jar
    On considère donc que le classpath pointe sur Plateforme Communication EDI.
    j'ai donc essayé: java -classpath joc-v1.2.6.jar plateforme.ReceiveMailJob
    Dans ce cas, il ne trouve pas la classe plateforme.ReceiveMailJob...

    j'ai donc essayé: java plateforme.ReceiveMailJob
    Dans ce cas, il ne trouve pas les classes de la librairie du joc

    Je ne comprends pas car la première commande est pourtant bonne à mes yeux...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Par défaut
    super désolé pour cette discussion à rallonge...
    Tu avais raison sur toute la ligne avec les classpath...
    J'étais tellement concentré sur ce Java Outlook Connector que j'en avais complètement oublié le connector MySQL !!!

    Ca marche super... merci pour tes remarques

    @++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2009, 02h43
  2. Réponses: 3
    Dernier message: 24/11/2006, 12h12
  3. [Jar][Classpath]Pb chargement resource classpath dans un jar
    Par Pill_S dans le forum Général Java
    Réponses: 20
    Dernier message: 01/10/2004, 21h12
  4. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 14h00
  5. [jar] BufferedImage issue d'un .jpeg dans un jar
    Par tit_henry dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/05/2004, 11h09

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