ResourceBundle basé sur un fichier situé à une url spécifique - Java - Programmation
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 ?
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...
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 ...
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 .. |
Oula... c'est pas un peu crado de faire ça !?
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 ...
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...
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 .
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
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
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. |
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...
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
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...
Marsh Posté le 21-07-2003 à 15:46:00
phnatomass a écrit : |
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 ???
edit : ok, il a parlé de web-app, j'avais pas vu, désolaid !
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 ?
edit : ha ben ouais ...
désolé phnatomass ...
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 ...
Marsh Posté le 21-07-2003 à 15:50:11
Mais tout ça, c'est bien gentil, mais ça règle pas mon problème !
Et phnatomass, toi aussi tu penses que si je rajoute le chemin de mes fichiers de description de langue au classpath, ça passera ?
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 !
Marsh Posté le 21-07-2003 à 15:57:21
benou a écrit : |
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.
Marsh Posté le 21-07-2003 à 15:59:13
El_gringo a écrit : |
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 :
|
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 ..
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 ...
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 ? |
Exactement, c'est une web-app que je distribue.
Le classpath système est interprété par Tomcat, j'en suis sur.
Marsh Posté le 21-07-2003 à 16:13:55
El_gringo a écrit : |
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 ...
Marsh Posté le 21-07-2003 à 16:15:56
benou 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)
Marsh Posté le 21-07-2003 à 16:17:17
El_gringo a écrit : |
bha, dans ce cas, je crois que tu vas pas échaper au codage du ClassLoader
remarque : tu peux peut-être trouver ce machin là tout fait, c'est pas rare comme besoin ...
Marsh Posté le 21-07-2003 à 16:17:43
El_gringo a écrit : |
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 ?
Marsh Posté le 21-07-2003 à 16:19:27
El_gringo a écrit : |
si j'avais du temps si ... j'ai jamais codé de classloader ...
déjà, il se trouve où ton rep conf/lang ?
Marsh Posté le 21-07-2003 à 16:29:07
benou a écrit : |
à la racine de ma web-app, pourquoi ?
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 ?
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 ...
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.
Marsh Posté le 21-07-2003 à 16:47:02
El_gringo a écrit : |
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 ?
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
Marsh Posté le 21-07-2003 à 16:56:43
lorill a écrit : |
bha oui ... c'est vrai que ca existe ca
Marsh Posté le 21-07-2003 à 16:59:01
phnatomass a écrit : |
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...
Marsh Posté le 21-07-2003 à 17:00:09
un peu plus haut, El_gringo a écrit : |
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 ?
Marsh Posté le 21-07-2003 à 17:03:08
lorill 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 ?
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 ? |
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 !
Pour l'instant, ça n'a dérangé aucun client.
C'est simple de l'interdire d'accès ?
Marsh Posté le 21-07-2003 à 17:05:50
El_gringo a écrit : |
dans ton cas, tu peux indiquer au RessourceBundle d'utiliser le ClassLoader que tu veux ...
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 !