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

Composants Java Discussion :

Problème de rafraîchissement d'un JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de arafat877
    Inscrit en
    Septembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 46
    Par défaut Problème de rafraîchissement d'un JTable
    Salut tout le monde !

    J'ai développé une application Client/Serveur, basé sur Spring RMI, le client et le serveur s'interagissent parfaitement, seul deux problèmes se posent :

    1) Quand un utilisateur ajout/modifie/supprime une ligne, les autres(utilisateurs) ne voient pas les changements dans la JTable, je veux que ces changement se feront sans l'intervention explicite de la part des autres utilisateurs.

    2) ma base de données Apache Derby, est attaquée par iBatis, par le biais de la couche DAO, dont ses méthodes (la couche DAO), sont toutes synchronized, est-ce-que le fait de déclarer les méthodes par synchronized est suffisant afin d'éviter les accès concurrents, surtout lors de la modification ? c-à-d : lorsque deux utilisateurs essaient de modifier le même enregistrement dans la même table.

    Bien Cordialement !

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    1. Dans ton implémentation du modèle appelles tu bien les méthodes fireTableXXX de celui ci correspondant à l'action effectuée (insert,update,delete...)?
    2. Les modifications du TableModel se font elles bien dans l'EDT?

  3. #3
    Membre actif Avatar de arafat877
    Inscrit en
    Septembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 46
    Par défaut Repense
    Salut !

    Je vous donne mon model :

    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
    39
    40
    41
    42
    43
    44
    45
     
    class ArticleModel extends AbstractTableModel {
            private String[] columnNames = new String[]{"IDAR", "Référence", "Désignation"};
            private Object[][] data;
            private List<Article> p;
            public ArticleModel(List<Article> p) {
                this.p = p;
                data = new Object[p.size()][3];
                Article pp = null;
                for (int i = 0; i < p.size(); i++) {
                    pp = (Article) p.get(i);
                    data[i][0] = pp.getIdar();
                    data[i][1] = pp.getReference();
                    data[i][2] = pp.getDesignation();
                }
            }
     
            @Override
            public int getColumnCount() {
                // TODO Auto-generated method stub
                return columnNames.length;
            }
     
            @Override
            public int getRowCount() {
                // TODO Auto-generated method stub
                return p.size();
            }
     
            @Override
            public String getColumnName(int col) {
                return columnNames[col];
            }
     
            @Override
            public Object getValueAt(int row, int col) {
                // TODO Auto-generated method stub
                return data[row][col];
            }
     
            @Override
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }
        }
    Alors que faut t-il modifier, en tenant compte que mon application est en mode Client serveur ?

    Merci d'avance ?

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour ta première question, c'est une histoire d'architecture. En effet il faut que tu intègre à ton archi client/serveur un moyen de notifier aux clients qu'un changement s'est produit. L'idée est de faire en sorte que le serveur enregistre les clients à leur première connexion. Puis qu'à chaque modification qu'un client réalise, le serveur redispatche cette modification à tous les autres clients enregistré. Cela nécessite que chaque client mette à disposition un ensemble de services correspondant aux diverses actions. (normalement tout ceci est jouable via RMI ou des webservices).

    Ta seconde question tient de la gestion des transactions. La solution synchronized n'est pas forcément une très bonne idée pour un ensemble de raisons. Tu devrais plutôt aller regarder du coté des API de transactions. Spring en propose: http://static.springsource.org/sprin...ansaction.html.

    Toutefois, les SGBD fournissent déjà une gestion des transactions, et empêchent que deux modifications soient réalisés au même moment.

    Enfin pour finir, il va te falloir étudier les notions de gestion de l'EDT et par conséquent te pencher sur le SwingWorker

    Puis dans ton modèle il va falloir redéfinir la méthode setValueAt, ce que tu n'as pas fait pour le moment. En effet c'est la méthode destinée à la modification des données dans le modèle de la JTable. Elle est utilisée par la JTable, et est également le point d'entrée préférentiel pour toute modification des données du modèle depuis l'extérieur. Et de fait il va te falloir à apprendre à utiliser les méthode fireXXX fournies par l'AbstractTableModel, qui servent à notifier à la JTable les modifications survenues dans le modèle.

  5. #5
    Membre actif Avatar de arafat877
    Inscrit en
    Septembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 46
    Par défaut
    Salut et merci sur ta repense

    Je voudrais bien que tu me donne un exemple concret si t'as le suffisamment de temps bien sûr sur la gestion des notifications.

    puis à propos de ma deuxième question, je parle sur la gestion des accès concurrents, et non plus sur les transactions, car les transactions ont pour but l'exécution de plusieurs opérations en même temps, ex: insertion de plusieurs données dans diverses tables. ce que je veux c'est la gestion des accès concurrents, ex: plusieurs utilisateurs tentes de modifier la même ligne dans la même colonne, il y a le principe d'optimistic locking, qui à pour vocation l'ajout d'une colonne dans la table nommé version initialisée par la valeur 1..., mais en revanche ce principe à un faiblesse, c'est quand l'utilisateur qui a lancer la modification se déconnecte pour une raison donnée.

    cordialement

Discussions similaires

  1. Problème de rafraîchissement d'un JTable
    Par Ludw82 dans le forum Composants
    Réponses: 1
    Dernier message: 27/04/2013, 18h16
  2. Réponses: 2
    Dernier message: 27/02/2006, 13h27
  3. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 18h36
  4. [MFC] Problème de rafraîchissement
    Par nmarf dans le forum MFC
    Réponses: 5
    Dernier message: 16/09/2005, 10h55
  5. Problème de rafraîchissement de données...
    Par Alain Dionne dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 21h07

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