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 :

[Info] variable d'une classe static


Sujet :

Langage Java

  1. #1
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut [Info] variable d'une classe static
    Bonjour
    J'utilises une classe static qui teste ma connexion, et je voudrais savoir si ce que je fais est correct.
    Je suis un peu perdu a force de reflechir à cela...
    Voici ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class DatabaseTest {
    	private static String dbName;
     
    	public static void testDatabase() {
    		//travail qui utilise le getter GETDBNAME()
    	}
    	...
    }
    Et voici l'appel de ma methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DatabaseTest.setDbName("TOTO");
    DatabaseTest.testDatabase();
    Est ce que le setter est correct? Est ce que si un autre utilisateur se connecte au meme moment au serveur et fais un SetDbName("TITI"), cela va modifier le test de l'utilisateur 1 avec TOTO comme DB?

    Sinon, est ce mieux de passer la dbName en parametre de ma methode : testDatabase("TOTO") et ne plus avoir d'attribut dbName? Ou est ce que cela est identique?
    En gros, Est ce que la valeur d'une variable statique est commune a tous les users ou seulement ou user de la session?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exemple bete, si moi je fais : 
    DatabaseTest.setDbName("TOTO"); 
    DatabaseTest.testDatabase();
     
    et que qq'1 fait juste pendant mon testDatabase() :
    DatabaseTest.setDbName("TITI"); 
    DatabaseTest.testDatabase();
    Est ce que MON DatabaseTest.testDatabase() utilisera TOTO ou TITI?
    Merci de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Oui un champs static est propre a une classe .
    Donc lorsqu'un utilisateur modifie ce champs il ne seras plus le meme pour l'autre .
    Donc si tu n'as pas besoins de stocker le nom dans un champs il vaut mieux passer le nom en parametres.

    Sinon utilise des champs non static et tu devras instancier un objet DatabaseTest afin de tester une connexion donc chaque test de base auras sa propre instance de la classe DatabaseTest !
    UML avec VIOLET

  3. #3
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    C'est ce que je pense.
    Mais je ne veux surtout pas créer une instance à chaque fois... (logique!)

    Donc je vais passer le nom de la DB en parametre.
    Merci encore

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,


    Synchronize l'acces à cette methode comme cela un seul utilisateur ne pourra l'utiliser à la fois
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par fabszn
    Hello,


    Synchronize l'acces à cette methode comme cela un seul utilisateur ne pourra l'utiliser à la fois
    En utilisant un singleton synchronized
    http://christophej.developpez.com/tu...n/multithread/

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  6. #6
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Peux tu me dire comment faire stp?
    Je ne l'ai jamais utilisé... Ou as tu un exemple peut etre?
    Dois je faire une methode avec une signature synchronized comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public synchronized String nameMethod() {
       //traitement
    }
    Ou alors synchroniser l'appel de la methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    synchronized (this)
       {
          copy = (String) nameMethod();
       }
    Ou bien les 2.... Ya t'il autre chose à faire (ma classe doit elle implementer une certaine interface, ou autre)?

    Merci pour tes precisions.

  7. #7
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    MILLES EXCUSES!!!!
    Je n'avais pas vu ton lien..... J'ai honte....

    J'etudie cela tout de suite.
    Merci de ton aide!

  8. #8
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public  class DatabaseTest {
       private static String dbName;
     
       public  synchronized static void testDatabase() {
          //travail qui utilise le getter GETDBNAME()
       }
       ...
    }
    Normalement tu n'as que ca à faire!

    Le reste est géré par la JVM.Par contre il faut que tu passes en parametre le nom de ta base.

    Si tu as d'autres questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  9. #9
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Citation Envoyé par fabszn
    Hello,


    Synchronize l'acces à cette methode comme cela un seul utilisateur ne pourra l'utiliser à la fois
    En utilisant un singleton synchronized
    http://christophej.developpez.com/tu...n/multithread/
    J'avais pensé au singleton... mais est ce que maintenir une instance, pour le test qu'il veut faire, est vraiment utile . Juste synchroniser la methode ca devait sufire ? non? Qu'en penses tu?
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  10. #10
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par fabszn
    Par contre il faut que tu passes en parametre le nom de ta base.
    Mais c'est cela ma question!
    Est ce que, si je synchronise l'appel a la methode, ainsi que le setter de dbName, mon test va marcher?

    Ma classe est deja faite (malheureusement, code récupéré ) et je ne veux pas la changer (trop utilisée).

    Est ce que ceci est propre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String value = ...;
    synchronized{
          DatabaseTest.setDbName(value); 
          DatabaseTest.testDatabase(); 
    }
    Et est ce que ca marchera?

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par fabszn
    Citation Envoyé par SEMPERE Benjamin
    Citation Envoyé par fabszn
    Hello,


    Synchronize l'acces à cette methode comme cela un seul utilisateur ne pourra l'utiliser à la fois
    En utilisant un singleton synchronized
    http://christophej.developpez.com/tu...n/multithread/
    J'avais pensé au singleton... mais est ce que maintenir une instance, pour le test qu'il veut faire, est vraiment utile . Juste synchroniser la methode ca devait sufire ? non? Qu'en penses tu?
    oui je suis d'accord avec toi néanmoins il faut initialiser le paramètre dbname dans ton exemple?? Ou comptes tu le faire?? Car si tu passes le paramètre à la méthode "testDatabase", tu n'as pas du tout besoin de maintenir la variable d'instance "dbName" non?

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  12. #12
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par romdelf
    Citation Envoyé par fabszn
    Par contre il faut que tu passes en parametre le nom de ta base.
    Mais c'est cela ma question!
    Est ce que, si je synchronise l'appel a la methode, ainsi que le setter de dbName, mon test va marcher?

    Ma classe est deja faite (malheureusement, code récupéré ) et je ne veux pas la changer (trop utilisée).

    Est ce que ceci est propre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String value = ...;
    synchronized{
          DatabaseTest.setDbName(value); 
          DatabaseTest.testDatabase(); 
    }
    Et est ce que ca marchera?
    J'ai peur que mon post soit passé inapercu...

  13. #13
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Citation Envoyé par fabszn
    Citation Envoyé par SEMPERE Benjamin
    Citation Envoyé par fabszn
    Hello,


    Synchronize l'acces à cette methode comme cela un seul utilisateur ne pourra l'utiliser à la fois
    En utilisant un singleton synchronized
    http://christophej.developpez.com/tu...n/multithread/
    J'avais pensé au singleton... mais est ce que maintenir une instance, pour le test qu'il veut faire, est vraiment utile . Juste synchroniser la methode ca devait sufire ? non? Qu'en penses tu?
    oui je suis d'accord avec toi néanmoins il faut initialiser le paramètre dbname dans ton exemple?? Ou comptes tu le faire?? Car si tu passes le paramètre à la méthode "testDatabase", tu n'as pas du tout besoin de maintenir la variable d'instance "dbName" non?

    Oui tu as raison.. en fait j'avais fait le copier/coller juste pour montrer ou placer le synchronized ... et j'avais oublié de modifier cette aspect de la methode,mais je suis entierement d'accord avec toi!! garder une reference static avec la variable n'aurait aucun sens!

    Voila ce que j'aurais du ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public  class DatabaseTest {
     
     
       public  synchronized static void testDatabase(String dbname) {
          //travail qui utilise le getter GETDBNAME()
       }
       ...
    }
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  14. #14
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par romdelf
    Citation Envoyé par romdelf
    Citation Envoyé par fabszn
    Par contre il faut que tu passes en parametre le nom de ta base.
    Mais c'est cela ma question!
    Est ce que, si je synchronise l'appel a la methode, ainsi que le setter de dbName, mon test va marcher?

    Ma classe est deja faite (malheureusement, code récupéré ) et je ne veux pas la changer (trop utilisée).

    Est ce que ceci est propre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String value = ...;
    synchronized{
          DatabaseTest.setDbName(value); 
          DatabaseTest.testDatabase(); 
    }
    Et est ce que ca marchera?
    J'ai peur que mon post soit passé inapercu...
    Oui je pense que cela marchera ... mais si d'autres personne veulent utiliser ta methode il ne penserons pas forcement à la synchroniser comme tu l'as fait... et ils pourront rencontrer des soucis sans forcement savoir pourquoi..

    Je pense que le plus rigoureux est de synchroniser ta methode, Cette synchro doit etre de la responsabilité de la methode..comme ca,Les autres utilisateurs n'auront pas de questions à se poser .. et ce test ne souffrira pas des acces concurents.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par fabszn
    Oui je pense que cela marchera ... mais si d'autres personne veulent utiliser ta methode il ne penserons pas forcement à la synchroniser comme tu l'as fait... et ils pourront rencontrer des soucis sans forcement savoir pourquoi..

    Je pense que le plus rigoureux est de synchroniser ta methode, Cette synchro doit etre de la responsabilité de la methode..comme ca,Les autres utilisateurs n'auront pas de questions à se poser .. et ce test ne souffrira pas des acces concurents.
    A ce niveau la il en découle que tu devrais créer une méthode de cohésion de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public synchronized static void testDb(String value)  {      
          setDbName(value); 
          testDatabase(); 
    }
    non??

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  16. #16
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Mais bien sur! C'est parfait comme solution....

    Merci Benjamin!

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par romdelf
    Mais bien sur! C'est parfait comme solution....

    Merci Benjamin!
    heu a confirmer...

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  18. #18
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Citation Envoyé par fabszn
    Oui je pense que cela marchera ... mais si d'autres personne veulent utiliser ta methode il ne penserons pas forcement à la synchroniser comme tu l'as fait... et ils pourront rencontrer des soucis sans forcement savoir pourquoi..

    Je pense que le plus rigoureux est de synchroniser ta methode, Cette synchro doit etre de la responsabilité de la methode..comme ca,Les autres utilisateurs n'auront pas de questions à se poser .. et ce test ne souffrira pas des acces concurents.
    A ce niveau la il en découle que tu devrais créer une méthode de cohésion de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public synchronized static void testDb(String value)  {      
          setDbName(value); 
          testDatabase(); 
    }
    non??
    Tu vas dire que je 'chipote'

    Mais est ce qu'il n'y a pas une redondance ?
    Est ce que l'introduction de cette methode ne reviendrai pas a faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public synchronized static void testDb(String value)  {      
          testDatabase(value); 
    }
    et par consequent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public synchronized static void testDatabase(String value)  {      
    //code permettant le test sur la base;
    }
    Est ce que le fait d'introduire trop d'imbrication (dans ce cas la ) risquerai peut etre de compliquer? La methode de Cohesion serai peut etre de trop dans ce cas la (je precise)
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par fabszn
    Tu vas dire que je 'chipote'
    Quel chipoteur ce fabszn!!!
    Oui en effet tu as raison mais romain a dit précédement:
    Citation Envoyé par romdelf
    Ma classe est deja faite (malheureusement, code récupéré ) et je ne veux pas la changer (trop utilisée).
    Donc je pense que dans son code la méthode testDatabase(); ne peut pas etre changée (au niveau de sa signature)... Enfin en espérant avoir compris

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  20. #20
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Donc je pense que dans son code la méthode testDatabase(); ne peut pas etre changée (au niveau de sa signature)... Enfin en espérant avoir compris
    C'est tou a fait cela!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Définir les variables d'une classe
    Par szdavid dans le forum Général Python
    Réponses: 6
    Dernier message: 20/01/2006, 19h15
  2. Réponses: 2
    Dernier message: 17/12/2005, 20h52
  3. Réponses: 3
    Dernier message: 02/11/2005, 18h03
  4. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  5. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24

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