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 :

[Méthode] Non traitement de données


Sujet :

Langage Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut [Méthode] Non traitement de données
    Bonjour

    Voici mon problème. Dans une servlet, je rassemble des nombres correspondant au préfixe de fichiers à partir d'un SGBD dans un ArrayList.
    Puis, je parcours cet ArrayList et j'effectue les opérations nécessaires de concaténations pour avoir mes noms de fichiers. En même temps, lorsque j'ai le nom d'un fichier, j'appelle une méthode qui va lancer un processus externe qui traitera ce fichier (Blast, pour ceux qui connaissent).
    Seulement, Blast ne traite pas les 4 premiers fichiers de ma liste Le programme m'envoit cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [blastall] FATAL ERROR: blast: Unable to open input file /home/gldavid/Blaster/7167fb7ba4806e855959d04f94048092/7167fb7ba4806e855959d04f940480921155290747/3058.txt
    Or, ce fichier existe et ses droits ne sont pas différents des autres.

    Voici la partie "main" de ma servlet:
    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
     
    		String cluster = "/home/gldavid/Blaster/"+id_user+"/";
    		java.util.Iterator i = numamplicons.iterator();
    		int retour=0;
    		while(i.hasNext()){
    			Long l = (Long)i.next();
    			java.io.File clusterfile = new java.io.File(cluster+id_job+"/"+l.longValue()+".txt");
    			retour = blast(clusterfile);
    			if(retour==1){
    				pw.print("<br /><font color=\"#FF0000\"><b>Oops ! Mistakes !</b></font>");
    				break;
    			}
    		}
    		if(retour==0)
    			pw.print("Finished !");
    Et la méthode blast():
    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
     
    	public int blast(java.io.File file){
    		String tmp = file.getAbsolutePath();
    		String xml = file.getAbsolutePath().replace(".txt", ".html");
    		String cmd = "ssh gldavid@mycluster blastall -p blastn -d nt -i "+tmp+" -o "+xml+"";
    		try{
    			java.lang.Process process = Runtime.getRuntime().exec(cmd);
    			process.waitFor();
    			java.io.BufferedReader error = new java.io.BufferedReader(new java.io.InputStreamReader(process.getErrorStream()));
    			String s = "";
    			if(error.ready()){
    				while((s=error.readLine())!=null){
    					pw.print("<font color=\"#FF0000\"><b>"+s+"</b></font><br />");
    				}
    			return 1;
    			}
    		}
    		catch(IOException ioe){
    			Blaster.this.pw.print("<font color=\"#FF0000\"><b>7 : "+ioe.getMessage()+"</b></font><br />");
    			Blaster.this.destroy();
    		}
    		catch(InterruptedException ie){
    			Blaster.this.pw.print("<font color=\"#FF0000\"><b>8 : "+ie.getMessage()+"</b></font><br />");
    			Blaster.this.destroy();
    		}
    		return 0;
    	}
    Je précise que manuellement, Blast fonctionne avec ce fichier.
    Merci d'avance de vos réponses !

    @++

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Bon, alors, quelques avancées.
    Mais toujours pas de résultats.
    J'ai décidé cette fois-ci d'appeler un script shell pour lancer les blasts sur ma pléthore de fichiers. Voici le code de script :
    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
     
    #!/bin/bash
     
    if [ ! -d $1 ]
    then
            echo 2> "$1 does not exist !"
            exit 1
    fi
     
    path=$1
    for txt in `ls $1 | grep txt`
    do
            html=$1/`echo $txt | cut -f1 -d "."`.html
            blastall -p blastn -d refseq_Homo_sapiens_rna -i $1/$txt -o $html
    done
    Et j'ai remodelé ma fonction pour qu'elle appelle ce script :
    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
     
    	public int blast(String file){
    		String cmd = "ssh gldavid@mycluster /home/gldavid/blast.sh "+file;
    		try{
    			java.lang.Process process = Runtime.getRuntime().exec(cmd);
    			process.waitFor();
    			java.io.BufferedReader error = new java.io.BufferedReader(new java.io.InputStreamReader(process.getErrorStream()));
    			String s = "";
    			if(error.ready()){
    				while((s=error.readLine())!=null){
    					pw.print("<font color=\"#FF0000\"><b>"+s+"</b></font><br />");
    				}
    			return 1;
    			}
    		}
    		catch(IOException ioe){
    			Blaster.this.pw.print("<font color=\"#FF0000\"><b>7 : "+ioe.getMessage()+"</b></font><br />");
    			Blaster.this.destroy();
    		}
    		catch(InterruptedException ie){
    			Blaster.this.pw.print("<font color=\"#FF0000\"><b>8 : "+ie.getMessage()+"</b></font><br />");
    			Blaster.this.destroy();
    		}
    		return 0;
    	}
    Et voici l'erreur, apparemment renvoyé par le script shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/gldavid/blast.sh: line 5: /home/gldavid/Blaster/7167fb7ba4806e855959d04f94048092/7167fb7ba4806e855959d04f940480921155302699/ does not exist !: No such file or directory
    Oui, mais, j'ai cette erreur quand je lance le script via la servlet. Or quand je lance le script avec le même paramètre dans un shell, il tourne sans problème !
    Je commence à croire que faire interagir une servlet et un shell Unix n'est pas simple
    Merci d'avance de vos réponses.

    @++

  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    Salut,

    c'est ton application multi-thread ?
    ce serait pas un conflit d'acces ?
    Pas fini de créer les fichier alors que tu essaye d'y acceder ?

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Je pense que tu as raison BainE.
    Mais dans ce cas là, comment faire pour éviter de tels cas ?

    @++

  5. #5
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    si comme tu dis c'est que les 4 premiers fichiers qui passe pas, une petites tempo de quelques secondes, histoire qu'il finisse ?

    Sinon comme c'est les 4 premiers tu peux essayé le meme traitement mais en commencant par la fin de la liste, avec un espece de reverse_iterator...

  6. #6
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Salut BainE

    Je commence par la fin (c'est le cas de le dire). Que je prenne ma file dans un sens comme dans l'autre, c'est pareil, les premiers éléments ne passent pas.
    Par contre, peux-tu m'expliquer comment tu ferais la tempo de quelques secondes ? Quelles méthodes me conseilles-tu ?

    @++

  7. #7
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    sinon tu n'ajoute dans ta liste ton fichier qu'un fois sont traitement terminé.
    Et tu traite ta liste tant que tu a des elements et que le traitement precedant n'est pas fini.

    Par contre attention aux acces consurentiels

    [edit] tu pourrais commencer la méthode qui traite la liste par un sleep( 5000 ), si t'es dans un thread

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    BainE, peux-tu m'expliquer ton affaire de sleep. Je dois avouer que je ne sais pas bien y faire avec les threads

    @++

  9. #9
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    avec sleep tu demande a ton thread de s'arrete un nombre de millisecondes.
    Les autres continuent tranquillement
    La methode est statique, dans la surcharge de la methode run tu pose (en debut surement) :

    Thread.sleep( long millisecondes )

    [EDIT] Bon j'ai fini la journée, la semaine
    Bon courage et bon week end

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Merci à toi BainE pour tes renseignements même si, hélas, mon problème est loin d'être résolu

    @++

  11. #11
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Quoi que
    J'attends la fin de (tout mon ?) Blast.

    @++

  12. #12
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Yeess !!!
    Il suffisait effectivement de faire dormir mon thread principal après le scp.
    Et le tour est joué

    @++ et un gros à BainE.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2009, 14h18
  2. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  3. traitement des données avant envoie dans MySQL
    Par italiasky dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 07/02/2006, 22h50
  4. Programmation pour traitement de données
    Par benbois dans le forum Langages de programmation
    Réponses: 16
    Dernier message: 19/10/2005, 17h01
  5. Meilleur méthode pour stocker mes données
    Par cyberlewis dans le forum Windows
    Réponses: 6
    Dernier message: 03/07/2004, 11h53

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