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

Servlets/JSP Java Discussion :

Problème avec InputStreamReader


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 42
    Par défaut Problème avec InputStreamReader
    Bonjour,

    J'ai un petit soucis pendant la migration d'une application de Solaris/Jrun vers RH5/Tomcat :

    En fait il s'agit d'un servlet qui lance un script shell qui lui-meme execute une requete SQL ( à travers sqplus ) . Le resultat est censé être affiché via un JSP ! Tous cela marche bien sous Solaris mais pas dans la nouvelle config.

    J'ai tracké le problème et le soucis se situe au niveau du InputStreamReader ( dans le servlet ) qui ne récupère rien en RH5 . Le bout de code concerné est plus bas.

    Je ne suis pas très à l'aise avec ces notions et je ne sais pas par quel bout continuer mes recherches .

    Merci d'avance à ceux qui voudront bien m'aider à comprendre.

    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
     
    Process processus = java.lang.Runtime.getRuntime().exec(cmd); // cmd est la ligne de commande qui lance le script  
    BufferedReader in = new BufferedReader(new InputStreamReader(processus.getInputStream()));
    String inputline;
    while ((inputline = in.readLine()) != null) {
      if (inputline.startsWith("-"))
    	inputline = "<p align='center'><img src='" + rootPath + "/images/separateur.gif' width='100%' height='20'></p>";
      else if (format.equals("CSV") || format.equals("TXT"))
    	inputline = inputline + "<BR>";
     
    if (inputline.startsWith("Connected."))
    	inputline = " ";
    	resultlist.add(inputline);
    }
    in.close();
    processus.destroy();

  2. #2
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    parmi le code que tu n'as pas montré, y a t'il un traitement de ton inputline ?

    puisqu'il a l'air de manquer plusieurs éléments, voici un exemple de comment je traite les inputstreams de mes process:
    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
    BufferedReader br = null;
    StringBuffer content = new StringBuffer();
    try{
    	br = new BufferedReader(new InputStreamReader(processus.getInputStream()));
    	String line = null;
    	String endline = "\n";
    	while ( (line = br.readLine()) != null ){
    		content.append(line).append(endline);
    	}
    } catch (IOException ioe){
    	// Log exception
    } finally {
    	if (br != null){
    		try {
    			br.close();
    		} catch (IOException ioe) {
    			//Log exception
    		}
    	}
    	if (processus.getInputStream() != null){
    		try {
    			stream.close();
    		} catch (IOException ioe) {
    			//Log exception
    		}
    	}
    }
    // Tout l'output du process est contenu dans content
    System.out.println(content.toString());

  3. #3
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Bonjour,

    et la commande de script qui est lancée, elle est disponible ?
    Quelle est cette commande ?
    Est-ce que la JVM (sous-entendu, le process owner de la JVM) peut-elle lancer ce processus ?

    Car je pense plutôt que c'est la commande qui ne se lance pas et pas le traitement de sa réponse.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 42
    Par défaut
    Oui je penche aussi pour un pb au lancement de la commande.

    C'est ce que je suis en train de vérifier . Mais comment ?

    Je récupère dans le log la ligne de commande cmd utilisée ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process processus = java.lang.Runtime.getRuntime().exec(cmd);
    je lance cette commande dans une fenetre avec le user utilisé par Tomcat et ca marche bien .

    Par contre je ne sais pas vérifier si, via le servlet la commande est bien lancée ( je pense que non ...)

  5. #5
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    de la même manière que tu récupères l'output, tu peux récupérer l'ErrorStream de ton process, ainsi que l'exitValue (cf doc)

    en les loggant tu devrais avoir quelques indices de plus...

  6. #6
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Légère digression toutefois, depuis JAVA 5 il existe ProcessBuilder et Process qui sont bien plus pratiques pour exécuter les commandes externes ... :

    http://javasearch.developpez.com/j2s...ssBuilder.html

    http://blog.bensmann.com/executing-o...ystem-commands

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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