JAVA SE – Ressources
Ressources et Fichiers de Configuration
Le déploiement d'une application Java contient certes du code (des fichiers .class dans
des packages) mais aussi des fichiers contenant des données de ressource.
Notre application peut, par exemple, avoir besoin d'images ou de fichiers de
configuration en format texte.
Il existe même en standard des formats de fichier texte de configuration : voir la
documentation de la classe java.util.Properties méthodes load et loadFromXML.
Prenons le cas de tels fichiers de configuration et posons nous la question : où se
trouvent ces fichiers au déploiement?
On ne peut pas imaginer un code qui travaillerait sur la base de règles comme :
si on est sous un système Windows alors la ressource se trouve sous C:\Program
Files\MonApplicatif\config\fichier_config.properties
si on est sous UNIX ce sera : /opt/MonApplicatif/config/fichier_config.properties
etc.
Un tel fonctionnement serait une insulte aux principes de la portabilité en Java !
Les questions auxquelles il faut savoir répondre :
A quoi sont liées les données de configuration?
Une application utilise un ensemble de composants logiciels. Dans la plupart des cas
la configuration concerne donc un sous-ensemble de l'application et est donc liée à
une classe ou à un ensemble de classes d'un package.
Où se trouvent les données de configuration d'un package?
Avec l'application ! Pour comprendre cela prenons le cas où l'application s'exécute
sur un poste client en chargeant des codes qui sont déployés sur un serveur distant
… Où se trouve la configuration? Sur la machine client ou sur la machine serveur?
Bien entendu les configurations applicatives se trouvent sur la machine serveur!
Quel mécanisme va me permettre de retrouver les données associées au code
d'une application?
Le mécanisme qui a permis de "charger" le code de l'application saura naturellement
retrouver les données associées.
Il s'agit du ClassLoader qui aura su charger la classe qui a besoin de ces données de
configuration.
L'ouverture d'un Stream de lecture aura donc l'aspect suivant :
InputStream is = ClasseCourante.class.getResourceAsStream(
"config/fichier.properties") ;
Ce code appelle de nombreux commentaires :
ClasseCourante.class nous permet d'obtenir un objet de type java.lang.Class qui
représente la classe courante.
(Petit jeu de piste : pourquoi ne faut-il pas écrire this.getClass() qui aurait aussi
pour effet d'obtenir la classe de l'objet? Nous vous laissons donner libre cours à
votre sagacité…)
www.demos.fr/informatique