2011-06-23 3 views
3

Je dois lire un fichier de propriétés contenant des données de configuration dans une application Web JSF.Est-ce que getResourceAsStream() est sûr pour les threads?

En ce moment, le code ressemble à ceci

private Properties getConfig() { 
    Properties properties = new Properties(); 

    InputStream inputStream = null; 
    try { 
     inputStream = this.getClass().getResourceAsStream("/config.properties"); 

     try { 
     properties.load(inputStream); 
     } catch (IOException e) { 
     logger.error("Error while reading config properties", e); 
     } 

    } finally { 
     if (inputStream != null) { 
     try { 
      inputStream.close(); 
     } catch (IOException e) { 
      logger.error(e.getMessage(), e); 
     } 
     } 
    } 

    return properties; 
} 

Est-il sûr de le faire de cette façon ou puis-je rencontrer des problèmes de concurrence lorsque plusieurs threads appellent getConfig()?

+2

Je ne suis pas sûr que ce soit thread-safe ou pas, mais normalement dans un tel cas, j'utilise une seule classe de configuration de ton dans laquelle je charge le fichier de propriétés une fois et y accéder où je veux . C'est possible dans le cas où personne ne va changer le fichier de propriétés après le déploiement. –

+0

Oui, j'ai utilisé une approche Singleton pour cela en premier lieu. Mais l'exigence est que le fichier peut être modifié à tout moment. – Sylar

+0

et pourquoi j'ai mentionné dans mon commentaire que * Ceci est possible dans le cas où personne ne va changer le fichier de propriété après le déploiement. * –

Répondre

4

Non, cela devrait être parfaitement sûr. Je ne vois aucun problème de concurrence.

Cependant, la gestion des exceptions n'est peut-être pas idéale - est-il valide de renvoyer un objet de propriétés vide si vous ne parvenez pas à charger la configuration ou devez-vous propager l'exception sur getConfig()? Jusqu'à vous, vraiment ....

Questions connexes