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

Collection et Stream Java Discussion :

[Observer - observable] pb lors de l'update


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut [Observer - observable] pb lors de l'update
    Bonjour,

    Au sein d'un programme je voudrais utiliser les classes Observable et Observer de Java afin de mettre à jour automatiquement des fichiers lorsque certains objets sont mis à jour (modifié donc).

    Le problème est que j'ai mis une trace (System.out.println) en début de fonction 'update' de l'observer, mais le prog tourne sans jamais passer dans cette méthode...

    Voici pour cela l'organisation de mes classes :

    - Une classe XmlParser : chargée de parser un fichier xml et de construire des objets XmlTag au fur et à mesure. Cette classe comporte notemment un object XmlTagsWriter chargé d'écrire un objet XmlTag dans un fichier lorsque ce dernier est créé ou modifié.

    - Une classe XmlTagsWriter qui implémente la classe Observer et qui possede donc une méthode 'update' qui appelle une méthode d'écriture pour sauvegarder les informations contenue dans un objet XmlTag

    - Une classe XmlTag qui étends la classe Observable. La méthode 'notifyObserver' est appelée dans chacun des setters de cet objet afin d'écrire les nouvelles informations dans un fichier chaque fois que l'instance de l'objet est modifiée.

    Lorsque je créé un nouvel objet XmlTag au sein de ma méthode de parsing de la classe XmlParser, je lui associe un objet (unique et instancié au début de la classe XmlParser) XmlTagsWriter (Observer donc) de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	XmlTag myXmlTag = new XmlTag();
    	myXmlTag.addObserver( getXmlTagsWriter() );
    Voici les appels à 'notifyObservers()' dans chacun de mes setters de la classe XmlTag :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class XmlTag extends Observable {
    
            ...
    
    	public void setParameterList(LinkedList theList) {
    		parameterList = theList;
    		notifyObservers();
    	}
    
    }
    Et pour finir ma méthode 'update' (simplifiée) de XmlTagsWriter :
    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
     
    public class XmlTagsWriter implements Observer {
     
            ...
     
    	public void update(Observable o, Object arg) {
     
    		System.out.println("Update");
     
    		if ( o instanceof XmlTag && isBigFileMode() ){
    			XmlTag myXmlTag = (XmlTag) o;
    			try{
    				writeObject(myXmlTag, myXmlTag.getFileName());
    			}
    			catch ( JpDvdException je ){
    			}
    		}
     
    	}
     
    }
    Je ne vois pas pourquoi la méthode 'update' de l'observer dans mon cas n'est jamais appelée !? J'ai déjà utilisé ce système pour un programme de statistique et ça marchait très bien je dois dire, mais dans ce cas là j'avais alors un seul objet Observable pour un Observer, tandis que dans le cas présent, j'ai environ 25000 objets Observable pour un seul Observer.
    Peut etre cela vient-il de là ? Je ne pense pas car le programme passerai au moins une première fois dans la méthode update lors de la création du premier tag xml.

    Je suis un peu perdu j'avoue, est-ce qu'un adepte du système Observer / Observable pourrait m'aider ?

    Merci à lui d'avance

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Salut,

    D'apres ce que j'ai pu voir de la javadoc, il faudrait faire un setChanged() sur ton objet avant de faire le notify.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void setParameterList(LinkedList theList) {
    		parameterList = theList;
                    setChanged();
    		notifyObservers();
    	}
    Plus rapide si c'est bien ca redefinis la methode notifyObservers pour faire d'abord le setChanged() et ensuite le notify:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void notifyObservers()
    {
      setChanged();
      super.motifyObservers()
    }
    Voila en esperant que ca t'aide,

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Bouh.... shame on me !!

    Merci de ton aide, je suis allé revoir la javadoc et me suis également aperçu de cette erreur ^^

    Merci pour ton aide précieuse bulbo

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

Discussions similaires

  1. Erreur lors d'un Update en SQlserver
    Par kedig dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2005, 08h22
  2. deadlock lors d'un update
    Par jacques trepp dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/06/2005, 16h46
  3. [ACCESS] [JET] [ADO] Erreur 3000 lors d'un update
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/08/2004, 21h16
  4. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  5. [DP] observer-observable
    Par schousso dans le forum Général Java
    Réponses: 4
    Dernier message: 15/05/2004, 00h45

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