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 :

[rechargement properties] rechargement à chaud


Sujet :

Langage Java

  1. #1
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut [rechargement properties] rechargement à chaud
    Bonjour

    j'ai une webapp qui contient une classe qui permet de lire un fichier properties
    Cette classe n'a pas été construite comme un singleton avec des getters sur les différentes propriétés mais plutôt de la façon suivante :
    1) on déclare des membres public static final
    2) on a un bloc static qui appelle une méthode private qui charge le fichier
    3) et le reste du bloc static initialise les membres static avec les valeurs du fichier properties

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static final String maPropriete;
     
    ....
    static{
     
    Properties prop = loadProperties();//methode qui charge le fichier //config           et    retourne un objet properties 
     
    maPropriete = prop.getProperty("ma_propriete");
    }
    //constructeur
    Mon objectif est de proposé une fonctionnalité qui en cliquant sur un lien recharge le fichier properties pour que l'application prenne en compte mes nouvelles valeurs du fichier properties sans avoir à redémarrer mon tomcat .
    Mon problème est sur la partie rechargement du fichier.

    Ma première question est, est-ce que c'est possible étant donné que les properties sont chargés dans le bloc static et que celui-ci est donc chargé qu'une fois ?
    J'ai pensé à utilisé un classloader en forçant le rechargement de la classe mais je ne maîtrise pas la fonctionnalité et j'ai une exception ClassNotFoundException en faisant dans une méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void myMethod(){
    ClassLoader.getSystemClassLoader().loadClass("package.to.myPropertiesClass");
    }
    .
    j'
    Est-ce que quelqu'un a une idée svp ?

    merci

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    tu met le code de ton bloc static dans une méthode static et tu l'appel à partir du bloc static. voila pour l'initialisation

    vu que tu disposes maintenant d'une méthode static, tu peux l'appeler quand tu veux et ou tu veux !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static final String maPropriete;
     
    ....
    static{
    initProp();
    }
    //constructeur 
     .....
    public static void initProp() {
    Properties prop = loadProperties();//methode qui charge le fichier //config           et    retourne un objet properties 
     
    maPropriete = prop.getProperty("ma_propriete");
    }

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    et le "final" doit disparaitre sur les champs. Puisqu'ils peuvent changer maintenant.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    petite précision sur le chargement de classe :

    une classe n'est chargé dans un loader qu'une et une seule fois, tu ne peux pas la recharger. Le seul moyen de recharger une classe est d'instancer un classLoader sur lequel tu gardes une référence, et lorsque tu veux recharger une ou des classes tu créés une nouvelle instance du classLoader (ou seront loader les nouvelles versions des classes) et l'ancien est purement et simplement garbagé.

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    et le "final" doit disparaitre sur les champs. Puisqu'ils peuvent changer maintenant.
    euh oui j'ai oublié de l'enlever

  6. #6
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    merci pour votre aide ça fonctionne
    effectivement j'avais déjà supprimé le final.
    et en plus je comprends mieux le classloader

    PS: que c'est bien le refactor sous eclipse

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2011, 21h38
  2. [Framework] recharger un fichier properties dans le context Spring
    Par lionel84 dans le forum Spring
    Réponses: 1
    Dernier message: 07/12/2010, 16h19
  3. Réponses: 2
    Dernier message: 25/08/2009, 16h34
  4. [Stratégie] Rechargement de properties à chaud
    Par Dripple dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 09/07/2007, 11h15
  5. [LOMBOZ] Rechargement de WebApp à chaud
    Par BuLma dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/08/2004, 13h59

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