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 :

Chargement des données (Singletons) au démarrage de l'appli


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Chargement des données (Singletons) au démarrage de l'appli
    Bonjour,

    Afin d'éviter de créer plusieurs instances d'objets ne le nécessitant pas (par exemple des communes) (Singleton?), je souhaiterais les charger au lancement de mon application.
    J'ai codé quelque chose qui fonctionne mais je ne suis pas sûr que c'est la meilleure des solutions. Je vous demande donc votre avis
    Le but ici est de charger des objets de type Commune.

    Pour cela j'ai créé:
    .une classe Commune (possédant id,libelle etc etc)
    .une interface SingletonCtrl contenant la définition d'une méthode nommée LoadData().
    .une interface CommuneCtrl héritant de l'interface SingletonCtrl et contenant les définitions de méthodes propres aux objets Commune.
    .une classe CommuneCtrlImpl implémentant donc l'interface CommuneCtrl et surchargeant donc les méthodes de CommuneCtrl et de SingletonCtrl.
    .et enfin une classe Singleton possédant une méthode statiques loadSingletons() dans laquelle je renseigne les classes héritant de SingletonCtrl (à voir si cela peut être fait automatiquement) et j'appelle les méthodes loadData() de ces différentes classes.

    La méthode en question
    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
     
     public static void loadSingletons() throws ControleurException{
    	Class classeEnCours = null;
     
    	listeClassCtrlSingleton = new ArrayList<Class>();
    	listeClassCtrlSingleton.add(CommuneCtrlImpl.class);
    	listeClassCtrlSingleton.add(VarieteCtrlImpl.class);
     
    	try {
    	    for (Class classe:listeClassCtrlSingleton){
    		classeEnCours = classe;
    		Method[] tablMethode = classe.getMethods();
    		for (int i=0;i<tablMethode.length;i++){	
    		    if (tablMethode[i].getName().contains("loadData")){
    			tablMethode[i].invoke(classe.newInstance());
    		    }
    		}
    	    }
    	} catch (IllegalArgumentException e) {
    	    gestionErreur(e,classeEnCours);
    	} catch (IllegalAccessException e) {
    	    gestionErreur(e,classeEnCours);
    	} catch (InvocationTargetException e) {
    	    gestionErreur(e,classeEnCours); 
    	} catch (InstantiationException e) {
    	    gestionErreur(e,classeEnCours);
    	}
        }
    Ainsi, pour charger toutes mes données, je fais un Singleton.loadSingletons(); dans ma classe Main.

    Comme expliqué précédemment, le code fonctionne mais j'ai un gros doute concernant sa simplicité, son respect des normes etc etc.

    Merci d'avance à ceux qui s'attarderont sur mon problème

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Uuuergh ... compliqué.
    est-ce que tu sais utiliser des blocs static dans des classes?
    chaque classe aurait son bloc static qui sera executé au chargement.
    serait-ce pas plus simple?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Salut professeur shadoko,

    Je souhaiterais faire en sorte d'obliger la déclaration d'une méthode de chargement de données pour les classes concernées donc, sauf erreur de ma part, je suis obligé de passer par une interface commune, et il n'est pas possible de déclarer des classes statiques dans les interfaces.

    Ou alors n'ai-je pas bien compris ton idée?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    et il n'est pas possible de déclarer des classes statiques dans les interface
    Effectivement


    Je souhaiterais faire en sorte d'obliger la déclaration d'une méthode de chargement de données pour les classes concernées donc, sauf erreur de ma part, je suis obligé de passer par une interface commune,
    Pourquoi passer par une méthode ? Quelle en est l'utilité ?
    Je pense qu'un bout de code présentant l'appel de ces données, pourrait éclairer ta demande.

    La solution "bloc static" est des plus élégantes pour ton besoin, la jvm se charge d’exécuter le code lors de la première utilisation de la classe, tu es ainsi assuré :
    - unicité de l’exécution du code
    - le code aura toujours été joué avant que tu en ais besoin

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par LittleBean Voir le message
    La solution "bloc static" est des plus élégantes pour ton besoin, la jvm se charge d’exécuter le code lors de la première utilisation de la classe, tu es ainsi assuré :
    - unicité de l’exécution du code
    - le code aura toujours été joué avant que tu en ais besoin
    Arrêtez-moi si je me trompe, mais cela n'est pas vrai tout le temps, non ?

    Par exemple, si la classe possède des méthodes statiques et que l'on commence par appeler une de celles-ci, l'appel à la méthode se fera avant l'appel au bloc static (qui ne se fera pas du tout en fait). C'est particulièrement gênant dans le cas de classes utilitaires ne comprenant que des méthodes statiques.

    Mako.

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Tu te trompes, avec ce petit exemple, quoiqu'il arrive, tu va voir "block static", puis "turlututu" apparaitre si tu utilises quoi que ce soit de la classe eee;

    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
    public class eee
    {
    	static double V = 0;
    	static
    	{
    		System.err.println("block static");
    		V = 3;
    	}
    	public static void main(String[] args)
    	{
                          // eee.V = 15; marche aussi
    		eee.test();
    	}
     
    	public static void test()
    	{
    		System.err.println("Turlututu");
    	}
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Arrêtez-moi si je me trompe, mais cela n'est pas vrai tout le temps, non ?
    Tu te trompes

    http://docs.oracle.com/javase/tutori...O/initial.html

    To provide the same capability for class variables, the Java programming language includes static initialization blocks
    En gros les blocs statics sont définis (fonctionnellement) comme des constructeurs pour les variables de classe.

  8. #8
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par LittleBean Voir le message
    Effectivement
    Si: il est possible de déclarer une classe statique dans une interface.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Si: il est possible de déclarer une classe statique dans une interface.
    Hum il y quelque chose qui m’échappe... c'est quoi : "une classe statique dans une interface"

    Pour moi dans une interface :
    - champs static ok
    - bloc static ko
    - méthodes static ko

Discussions similaires

  1. Chargement des données sur mysql
    Par ecom_adil dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 25/02/2008, 18h08
  2. chargement des données d'un datawarehouse syntaxe oracle
    Par Invité dans le forum Administration
    Réponses: 3
    Dernier message: 01/05/2007, 12h23
  3. Processus de chargement des données (avec talend)
    Par szoubir dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 27/04/2007, 13h17
  4. Chargement des données d'une classe vers une autre
    Par nosdev dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2007, 15h44
  5. Réponses: 2
    Dernier message: 20/11/2006, 15h35

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