Bonjour à tous,


Dans le code de mon client, j'ai défini une classe MyPropertyLoader afin de pouvoir utiliser (lecture, écriture, modification) un fichier .properties contenant des entrées classiques type CLEF=VALEUR :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public class MyPropertyLoader {
 
    private static final String CONF_FILE = "config/core.properties";
    private static Properties coreProperties = null;
 
 
    public static String getProperty(String key) {
        if (coreProperties == null) {
            loadCoreProperties();
        }
 
        return coreProperties != null ? coreProperties.getProperty(key) : null;
    }
 
 
    public static void setProperty(String key, String value) {
        if (coreProperties == null) {
            loadCoreProperties();
        }
 
        coreProperties.setProperty(key, value);
    }
 
 
    public static void savePropertiesFile() {
        FileOutputStream fos = null;
 
        try {
            fos = new FileOutputStream(CONF_FILE);
 
            coreProperties.store(fos, null);
        } catch (FileNotFoundException fnfe) {
            ... ;
        } catch (IOException ioe) {
            ... ;
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    ... ;
                }
            }
        }
    }
 
 
    private static synchronized void loadCoreProperties() {
        if (coreProperties == null) {
            InputStream propsIs = null;
 
            try {
                File file = new File(CONF_FILE);
 
                if (file.exists()) {
                    propsIs = new FileInputStream(CONF_FILE);
                    coreProperties = new Properties();
                    coreProperties.load(propsIs);
                } else {
                    System.err.println(CONF_FILE.concat(" not found on your disk !!!"));
                }
            } catch (IOException ioe) {
                System.err.print("MyPropertyLoader initialization error : ".concat(ioe.getMessage()));
                ioe.printStackTrace();
            } finally {
                if (propsIs != null) {
                    try {
                        propsIs.close();
                    } catch (IOException ioe) {
                        System.err.print("MyPropertyLoader stream closing error : ".concat(ioe.getMessage()));
                        ioe.printStackTrace();
                    }
                }
            }
        }
    }
 
}
Admettons que, dans une autre classe appelée Toto, je définisse un attribut de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public class Toto {
 
    private static String valeur1 = MyPropertyLoader.getProperty("clef1");
 
    ...
 
}
Si pour une raison ou une autre, la valeur d'une des propriétés est modifiée (via des appels aux méthodes MyPropertyLoader.setProperty et MyPropertyLoader.savePropertiesFile), alors le fichier est correctement mis à jour mais la valeur de l'attribut dans la classe Toto n'est pas modifiée...

Est-ce qu'il y a moyen de forcer un genre de reload de l'attribut (sans redémarrer le client) ?

Merci,
Mildju