ResourceBundle basé sur un fichier situé à une url spécifique

ResourceBundle basé sur un fichier situé à une url spécifique - Java - Programmation

Marsh Posté le 21-07-2003 à 14:04:46    

C'est possible de faire ça, non ?
C'est à dire que, dans une web-app, j'ai un répertoire "config", dans celui-ci, je voudrais faire une répertoire "lang" qui contiendrait tous les .properties de traduction de l'appli. C'est possible d'utiliser un ResourceBundle pour faire ça ? Et, si oui, vous avez une idée de comment ?
J'aurais été tenté d'utiliser PropertyResourceBundle, mais à priori, il vaut mieux utiliser ResourceBundle.getBundle, non ? enfin, j'en sais rien, j'suis un peu perdu là. heeeeeelp !

Reply

Marsh Posté le 21-07-2003 à 14:04:46   

Reply

Marsh Posté le 21-07-2003 à 14:44:18    

je connais pas bien les ressources bundle, mais si tu mets tno rep conf/lang dans le classpath, ca devrait marcher, non ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 14:55:10    

benou a écrit :

je connais pas bien les ressources bundle, mais si tu mets tno rep conf/lang dans le classpath, ca devrait marcher, non ?


 
J'connais pas tellement non plus. C chiant, à chaque fois que j'dois modifier le classpath, il faut faire un nouvelle procédure pr tous les clients qui utilisent mon truc. Si j'peux éviter, j'préfère...

Reply

Marsh Posté le 21-07-2003 à 15:01:00    

bon, je connais pas, mais comme ca, en regardant l'interface du bazard, a part en recodant un Classloader qui va aller chercher les fichiers dans le rep que tu veux, je vois pas trop comment tu peux faire .si tu dois pas modifier le classpath .. :/
 
remarque, ca doit pas être hors de portée de réécrire un classloader qui fait juste ca ...


Message édité par benou le 21-07-2003 à 15:01:42

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:09:41    

benou a écrit :

bon, je connais pas, mais comme ca, en regardant l'interface du bazard, a part en recodant un Classloader qui va aller chercher les fichiers dans le rep que tu veux, je vois pas trop comment tu peux faire .si tu dois pas modifier le classpath .. :/
 
remarque, ca doit pas être hors de portée de réécrire un classloader qui fait juste ca ...


 
Oula... c'est pas un peu crado de faire ça !?

Reply

Marsh Posté le 21-07-2003 à 15:12:44    

bha si tu fais ca bien nan : un ClassLoader qui prend en chemin une liste de File à ajouter au classpath c'est plutot sympa comme objet ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:18:28    

benou a écrit :

bha si tu fais ca bien nan : un ClassLoader qui prend en chemin une liste de File à ajouter au classpath c'est plutot sympa comme objet ...


 
Ben, tellement sympa que s'en est très très étonnant que ça n'existe pas déja. s'en est même louche... :heink:

Reply

Marsh Posté le 21-07-2003 à 15:19:53    

Pour faire dans l'elegance et les best practices il est judicieux de placer tes .properties dans  des sous repertoires de ton web-inf\classes correspondant au nom de package.
Ainsi dans ton code tu recupere ton fichier en faisant un ResourceBundle.getBundle("tonpackage.taresource" );  
De toute façon si tu utilises ANT par exemple tes fichiers properties peuvent être externalisé dans un rep quelconques mais quand tu créeras ton (war ou ear) il sera placé dans le bon rep.
Ainsi lors de la compilation ou de l'archivage ça va le faire .

Reply

Marsh Posté le 21-07-2003 à 15:22:17    

qu'est ce qui te fais dire que c'est une appli web qu'il fait  :??:
 
edit : quoiqu'il en soit, merci pour les best practices :jap:
edit2: mais en fait, j'aime pas mettre mes fichiers de conf dans classes... je trouve qeu c'est aps leur place ... sans parler du fait que eclipse fait le ménage dans le rep de compilation quand il fait refresh :/


Message édité par benou le 21-07-2003 à 15:23:54

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:32:12    

phnatomass a écrit :

Pour faire dans l'elegance et les best practices il est judicieux de placer tes .properties dans  des sous repertoires de ton web-inf\classes correspondant au nom de package.
Ainsi dans ton code tu recupere ton fichier en faisant un ResourceBundle.getBundle("tonpackage.taresource" );  
De toute façon si tu utilises ANT par exemple tes fichiers properties peuvent être externalisé dans un rep quelconques mais quand tu créeras ton (war ou ear) il sera placé dans le bon rep.
Ainsi lors de la compilation ou de l'archivage ça va le faire .


 
Je sais que normalement ça se fait comme ça, mais ça ne me va pas. J'ai besoin que les fichier de description de langage soient isolés avec le reste de la config, pour la raison suivante : chaque client peut modifier ses ressources de traduction comme il le souhaite, et ma web app est mise à jour régulièrement. L'intéret du répertoire "conf" est de regrouper tout ce qui doit être conservé à chaque nouvelle livraison, pour ne rien oublier, ne rien risquer d'écraser...

Reply

Marsh Posté le 21-07-2003 à 15:32:12   

Reply

Marsh Posté le 21-07-2003 à 15:43:03    

benou a écrit :

qu'est ce qui te fais dire que c'est une appli web qu'il fait  :??:


Ou ai je parlé de WEB ?.
Si il utilise TOMCAT donc il fait du J2EE. (et pas du SWING par exemple).
J'ai donné un tuyeaux. J2EE ;)
Les WAR ne sont pas spécifiques au WEB mais à une app J2EE WEB ou pas


Message édité par phnatomass le 21-07-2003 à 15:43:53
Reply

Marsh Posté le 21-07-2003 à 15:44:20    

Et puis, dans mon premier post, je dis que c'est une web-app.
Mais revenons en à mon problème...

Reply

Marsh Posté le 21-07-2003 à 15:46:00    

phnatomass a écrit :


Ou ai je parlé de WEB ?.


 

Citation :

il est judicieux de placer tes .properties dans  des sous repertoires de ton web-inf\classes


 
 

phnatomass a écrit :

Si il utilise TOMCAT donc il fait du J2EE.  


où a t il parlé de tomcat ???
 :heink:
 
edit : ok, il a parlé de web-app, j'avais pas vu, désolaid ! :/


Message édité par benou le 21-07-2003 à 15:48:09

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:46:57    

El_gringo a écrit :

Et puis, dans mon premier post, je dis que c'est une web-app.


bordel, je suis bigleux ?  :??:  :sweat:
 
edit : ha ben ouais ... :/  :( :'(
désolé phnatomass ...


Message édité par benou le 21-07-2003 à 15:47:44

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:50:02    

El_gringo a écrit :

Mais revenons en à mon problème...


bha, je sais pas quoi te proposer à part le coup du classpath ou du classloader ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:50:11    

Mais tout ça, c'est bien gentil, mais ça règle pas mon problème ! :D
Et phnatomass, toi aussi tu penses que si je rajoute le chemin de mes fichiers de description de langue au classpath, ça passera ?

Reply

Marsh Posté le 21-07-2003 à 15:50:50    

El_gringo a écrit :

Et phnatomass, toi aussi tu penses que si je rajoute le chemin de mes fichiers de description de langue au classpath, ça passera ?


ca j'en suis sûr ! :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 15:57:21    

benou a écrit :


ca j'en suis sûr ! :o


 
ha, désolé, j'avais pas compris ça comme ça. Ben, j'crois que j'vais faire comme ça alors. Vu que j'ai pas l'choix ! :(  
Merci.

Reply

Marsh Posté le 21-07-2003 à 15:59:13    

El_gringo a écrit :


la raison suivante : chaque client peut modifier ses ressources de traduction comme il le souhaite, et ma web app est mise à jour régulièrement. L'intéret du répertoire "conf" est de regrouper tout ce qui doit être conservé à chaque nouvelle livraison, pour ne rien oublier, ne rien risquer d'écraser...


De manière pratique comment les clients seront censé mettre à jour la conf.
Ils auront accès à un rep (distant) pour pouvoir éditer manuellement les fichier properties du ResourceBundle?
Tes clients sont des hommes ou un appli ?
 
Sinon tu peux faire des fichiers .properties normaux et pas des resourcesBundle et programmer à la main (ca se fait en 2 lignes) la gestion de la langue.

Code :
  1. // chargement de la lagnue française
  2. Poperties props_fr = new Poperties();
  3. props_fr.load(new FileInputStream("le rep\\"NOM_PROPRIETE+"_FR"+".properties" ));


Bien sur gestion d'exceptions, de File.separator, valeur de certaine proprietes (comme le repertoire des fichiers  properties) declaré dans un autre fichier de configuration général par exemple etc ..


Message édité par phnatomass le 21-07-2003 à 16:02:25
Reply

Marsh Posté le 21-07-2003 à 16:00:07    

benou a écrit :


ca j'en suis sûr ! :o


+1  :jap:

Reply

Marsh Posté le 21-07-2003 à 16:00:29    

mais en même temps, je comprend plus bien : c'est une web-app que tu distribues ?
 
le classpath tu le gère de quel façon ? parce que tomcat gère son propre classpath. je veux dire qu'il ne se sert pas du classpath système ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:09:51    

benou a écrit :

mais en même temps, je comprend plus bien : c'est une web-app que tu distribues ?
 
le classpath tu le gère de quel façon ? parce que tomcat gère son propre classpath. je veux dire qu'il ne se sert pas du classpath système ...


 
Exactement, c'est une web-app que je distribue.
Le classpath système est interprété par Tomcat, j'en suis sur.

Reply

Marsh Posté le 21-07-2003 à 16:13:55    

El_gringo a écrit :


Le classpath système est interprété par Tomcat, j'en suis sur.


 :heink:  
 
pas chez moi ...
 
t'es vraiment sûr de toi ?
parce que quand tu regardes la commande quand il est lancé en tant que service, y a aucune référecne au classpath ... :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:15:56    

benou a écrit :


 :heink:  
 
pas chez moi ...
 
t'es vraiment sûr de toi ?
parce que quand tu regardes la commande quand il est lancé en tant que service, y a aucune référecne au classpath ... :/


 
Ha, non non en fait, j'suis pas sur du tout, j'me plantais. J'ai confondu classpath, et "path" (variable d'environnement windows) :D

Reply

Marsh Posté le 21-07-2003 à 16:17:17    

El_gringo a écrit :


Ha, non non en fait, j'suis pas sur du tout, j'me plantais. J'ai confondu classpath, et "path" (variable d'environnement windows) :D


 :o  
 
bha, dans ce cas, je crois que tu vas pas échaper au codage du ClassLoader :o
 
remarque : tu peux peut-être trouver ce machin là tout fait, c'est pas rare comme besoin ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:17:43    

El_gringo a écrit :


 
Ha, non non en fait, j'suis pas sur du tout, j'me plantais. J'ai confondu classpath, et "path" (variable d'environnement windows) :D


 
Et du coup je peux faire comment pour que mon répertoire "conf/lang" soit dans la classpath ? La seule colution que tu vois, c'est d'écrire ce fameux classloader ?
J'm'en sent pas trop capable...
ça t'interresserai de faire ça... non ?  :whistle:

Reply

Marsh Posté le 21-07-2003 à 16:19:27    

El_gringo a écrit :


ça t'interresserai de faire ça... non ?  :whistle:  


si j'avais du temps si ... j'ai jamais codé de classloader ...
 
déjà, il se trouve où ton rep conf/lang ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:29:07    

benou a écrit :


si j'avais du temps si ... j'ai jamais codé de classloader ...
 
déjà, il se trouve où ton rep conf/lang ?


 
à la racine de ma web-app, pourquoi ?

Reply

Marsh Posté le 21-07-2003 à 16:37:33    

Mais, j'y pense : tomcat à forcément ce genre de classloader, puisqu'il gère son propre classpath, non ?

Reply

Marsh Posté le 21-07-2003 à 16:46:12    

El_gringo a écrit :

Mais, j'y pense : tomcat à forcément ce genre de classloader, puisqu'il gère son propre classpath, non ?


ouais, il a ses propres ClassLoader, mais ils doivent être un poil pluscompliqué parce qu'il gère le crechargement de classes en dynamique ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:46:56    

Pour info. Tout les moteurs de servlet/JSP ont un ClassLoader "maison".
Chez moi j'utilise tomcat 4.1.18 et il inclut le classpath de l'environnement de l'OS dans son claspath.
A tester : Faire un ResourceBundle La ou que tu le souhaites et modifier la variable d'environnement classpath et regarde si ça fonctionne.
ps : Au fait pourquoi ne pas utilisaer la méthode que j'ai proposé plus haut. Les ClassLoader "maison" sont sympa mais ça fait presque usine à gaz dans ton cas.

Reply

Marsh Posté le 21-07-2003 à 16:47:02    

El_gringo a écrit :


à la racine de ma web-app, pourquoi ?


ben parce que dans ce cas, tu dois livrer ce truc là en même tant que ta web-app => ca revient au même que si tu le mettais dans WEB-INF/classes, non ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:52:20    

benou a écrit :

bha si tu fais ca bien nan : un ClassLoader qui prend en chemin une liste de File à ajouter au classpath c'est plutot sympa comme objet ...


URLClassLoader

Reply

Marsh Posté le 21-07-2003 à 16:56:43    

lorill a écrit :


URLClassLoader


bha oui ... c'est vrai que ca existe ca [:meganne]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 16:59:01    

phnatomass a écrit :


A tester : Faire un ResourceBundle La ou que tu le souhaites et modifier la variable d'environnement classpath et regarde si ça fonctionne.
ps : Au fait pourquoi ne pas utilisaer la méthode que j'ai proposé plus haut. Les ClassLoader "maison" sont sympa mais ça fait presque usine à gaz dans ton cas.


 
Si ça fait pas partie de specs, c'est pas top. J'veux pas limiter ma web-app à 1 seul moteur de servlet...
Et, pr ta solution, tu veux dire de mettre les fichiers de ressources au milieu des classes ? J't'ai expliqué pourquoi j'pouvais pas me permettre de faire ça...

Reply

Marsh Posté le 21-07-2003 à 17:00:09    

un peu plus haut, El_gringo a écrit :


 
Je sais que normalement ça se fait comme ça, mais ça ne me va pas. J'ai besoin que les fichier de description de langage soient isolés avec le reste de la config, pour la raison suivante : chaque client peut modifier ses ressources de traduction comme il le souhaite, et ma web app est mise à jour régulièrement. L'intéret du répertoire "conf" est de regrouper tout ce qui doit être conservé à chaque nouvelle livraison, pour ne rien oublier, ne rien risquer d'écraser...

Reply

Marsh Posté le 21-07-2003 à 17:02:02    

quand tu dis que tu relivre ta web-app, tu relivres pas toute la web-app ? juste le rep WEB-INF ou un truc dans le genre ?
 
ca te dérange pas que le rep conf soit accessible ? :/


Message édité par benou le 21-07-2003 à 17:02:12

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 17:03:08    

lorill a écrit :


URLClassLoader


 
Mais, ça me parait génial ça, merci beaucoup
Par contre j'ai jamais fouillé dans les classLoader, j'y connais pas grand chose. comme "dire" à la JVM d'utiliser tel ou tel classLoader ?

Reply

Marsh Posté le 21-07-2003 à 17:04:57    

benou a écrit :

quand tu dis que tu relivre ta web-app, tu relivres pas toute la web-app ? juste le rep WEB-INF ou un truc dans le genre ?
 
ca te dérange pas que le rep conf soit accessible ? :/


 
Je livre un .war qui contient toute l'appli (avec un répertoire conf "standard" ).
 
que le rep soit accessible, moi j'm'en tape ! :D
Pour l'instant, ça n'a dérangé aucun client.
C'est simple de l'interdire d'accès ?

Reply

Marsh Posté le 21-07-2003 à 17:05:50    

El_gringo a écrit :


 
Mais, ça me parait génial ça, merci beaucoup
Par contre j'ai jamais fouillé dans les classLoader, j'y connais pas grand chose. comme "dire" à la JVM d'utiliser tel ou tel classLoader ?


dans ton cas, tu peux indiquer au RessourceBundle d'utiliser le ClassLoader que tu veux ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed