IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Changer une variable d'environnement


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut Changer une variable d'environnement
    Bonjour,

    Je travaille sur une application qui génère des docx. Elle fonctionne parfaitement sur le serveur de développement. Le problème c'est que cela ne marche absolument pas sur le serveur en production au niveau des caractères accentués (le docx refuse de s'ouvrir). Tout ça a cause d'une petite variable d'environnement : LANG=fr_FR au lieu de LANG=fr_FR.UTF-8 (Vérifié en lançant mon application dans un telnet en changeant la variable d'environnement pour la session)

    Ne pouvant pas changer cette variable sur le serveur de production, j'aimerais dans mon application la "changer".

    J'ai essayé :
    String cmd = "set LANG=fr_FR.UTF-8 ; export LANG";
    Runtime run = Runtime.getRuntime();
    run.exec(cmd);
    Mais j'ai une erreur "not found"

    Puis :
    System.setProperty("LANG","fr_FR.UTF-8") ;
    Qui ne fait pas d'erreur mais qui ne change rien : l'application n'est toujours pas fonctionnelle.

    Alors j'aimerais savoir si quelqu'un a une petite idée pour me sortir de mon problème :euh:
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu ne peux pas changer une variable d'environnement au sein de ton programme.


    Citation Envoyé par grignette Voir le message
    J'ai essayé :
    String cmd = "set LANG=fr_FR.UTF-8 ; export LANG";
    Runtime run = Runtime.getRuntime();
    run.exec(cmd);
    Mais j'ai une erreur "not found"
    Deux remarques :
    • Runtime.exec() lance un nouveau processus séparé, qui n'aura aucun impact sur ton processus...
    • set est une commande interne du shell, qui ne peut pas être appelée directement par Runtime.exec() (il faudrait appeler le shell système)


    Citation Envoyé par grignette Voir le message
    System.setProperty("LANG","fr_FR.UTF-8") ;
    Qui ne fait pas d'erreur mais qui ne change rien : l'application n'est toujours pas fonctionnelle.
    Les propriétés Java ne correspondent pas aux variables d'environnements (même si certaines peuvent être lié).


    Dans ton cas je suppose qu'il s'agit de la propriété Java "file.encoding"... mais il veut mieux éviter de la modifier.

    A la place il serait plutôt préférable de définir l'encodage dans ton code, lorsque tu génères ton fichier.


    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Tout d'abord, merci de m'avoir répondu.

    Citation Envoyé par adiGuba Voir le message
    A la place il serait plutôt préférable de définir l'encodage dans ton code, lorsque tu génères ton fichier.
    J'ai déjà essayé cette solution et cela ne change rien à mon problème. J'avais fait ceci dans une première version de mon programme :

    OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(urlDoc),"UTF-8");

    Et ceci avec une deuxième version utilisant la librairie vélocity :

    template = engine.getTemplate(templateURL, "UTF-8");

    Comment procéder pour appeler le shell système ? Enfin si c'est possible... Faut il utiliser une librairie ou bien il existe déjà des commandes java ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par grignette Voir le message
    J'ai déjà essayé cette solution et cela ne change rien à mon problème.
    Cela signifie surement que tu doit spécifier l'encodage également autre part...

    Citation Envoyé par grignette Voir le message
    Comment procéder pour appeler le shell système ? Enfin si c'est possible... Faut il utiliser une librairie ou bien il existe déjà des commandes java ?
    Heu... Tu n'as pas tout lu : cela ne servirait à rien puisque cela changerait l'encodage du nouveau processus... mais pas du tiens !



    Soit tu défini la propriété système "file.encoding" (mais c'est pas top), soit tu défini correctement l'encodage partout où il le faut...


    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    OK. Je vais voir ce que je peux faire en fonction de tes réponses.
    Merci pour ces éclaircissements.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    J'ai finalement trouvé une toute autre solution :

    J'ai créé un .sh avec ceci :

    #!/bin/bash
    export LANG="fr_FR.UTF-8"
    echo $LANG


    Dans mon programme je fais ceci :

    String cmd = "sh /../changeLang.sh";
    Runtime run = Runtime.getRuntime();
    run.exec(cmd);


    Et c'est bingo !

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et ça marche réellement ? Ton fichier est bien généré ???

    Cela me semble impossible !

    a++

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Oui oui cela marche parfaitement !

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Sans rire c'est impossible que ceci règle ton problème...

    Ton fichier changeLang.sh contient uniquement ceci ?
    Tu es sûr que tu n'as pas défini le export AVANT de lancer ton application Java ???

    a++

    PS : Au passage je ne comprend pas pourquoi tu t’enquiquine avec Runtime. Si c'est pour faire un truc sale autant modifier directement la propriété "file.encoding".

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Sans rire c'est impossible que ceci règle ton
    PS : Au passage je ne comprend pas pourquoi tu t’enquiquine avec Runtime. Si c'est pour faire un truc sale autant modifier directement la propriété "file.encoding".
    Peux tu développer ceci ? En quoi est ce que c'est sale ? Comment être plus propre ?

    Sinon oui, mon fichier changeLang.sh contient uniquement cela et je n'ai rien défini avant. Je ne comprends pas pourquoi ça te semble aussi invraisemblable

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par grignette Voir le message
    Peux tu développer ceci ? En quoi est ce que c'est sale ?
    Tu changes la configuration par défaut de l'encodage des fichiers pour corriger ton problème. Mais cela n'impacte pas uniquement ton bout de code mais toute ton application. Si elle ne fait que cela cela peut paraitre anodin, mais si elle est plus complexe cela pourrait avoir des effets indésirables (mauvais encodage/lecture d'autres fichiers, etc.)

    Citation Envoyé par grignette Voir le message
    Comment être plus propre ?
    Je l'ai déjà dit : en spécifiant l'encodage dans ton code qui génère le document, partout où cela est nécessaire... Mais cela dépend de ton code.

    Citation Envoyé par grignette Voir le message
    Sinon oui, mon fichier changeLang.sh contient uniquement cela et je n'ai rien défini avant. Je ne comprends pas pourquoi ça te semble aussi invraisemblable
    Je l'ai déjà dit aussi : tu lances un nouveau programme (un shell en l'occurrence) qui modifie une de ses variables et se termine. Cela ne devrait avoir aucun impact sur le programme Java (qui comme tout programme possède ses propres variables d'environnement).


    a++

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par grignette Voir le message
    Peux tu développer ceci ? En quoi est ce que c'est sale ? Comment être plus propre ?
    Parce que la méthode propre, c'est de définir clairement l'encodage lorsqu'on ouvre ses writer. Les seuls cas ou file.encoding est utilisé (donc indirectement, l'environnement) c'est quand on ne précise pas l'encodage.
    Sinon oui, mon fichier changeLang.sh contient uniquement cela et je n'ai rien défini avant. Je ne comprends pas pourquoi ça te semble aussi invraisemblable
    Voyons, dans l'ordre

    1) ca ne change la variable d'environnement QUE dans l'application lancée, ca n'a AUCUNE influence sur le programme appelant, car chaque process à son propre environnement, environnement en général hérité dans les processus enfant (bref, c'est un transfert d'information à sens unique)
    2) Même si on envisageait, par un curieux phénomène cosmique, qu'il soit possibile de changer l'environnement de l'application java depuis ce shell invoqué, ca n'aurait a nouveau aucune influence. Java initialise System.property à son démarrage, et c'est la dessus que se basent les Writer quand on "oublie" de leur préciser explicitement l'encodage à utiliser.
    3) la commande "sh /../changeLang.sh" ne peux pas marche, il n'y a pas de répertoire ".." à la racine ("/") du système sous linux.

  13. #13
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    il n'y a pas de répertoire ".." à la racine ("/") du système sous linux.
    Je n'avais pas fait attention à cela dans son code... mais il y a bien un répertoire ".." à la racine (qui est équivalent à ".").

    Donc le script devrait bien s'exécuter (s'il est à la racine), mais son intérêt reste plus que limité...


    a++

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    1) ca ne change la variable d'environnement QUE dans l'application lancée, ca n'a AUCUNE influence sur le programme appelant, car chaque process à son propre environnement, environnement en général hérité dans les processus enfant (bref, c'est un transfert d'information à sens unique)
    C'est bien ce que je voulais.

    Citation Envoyé par tchize_ Voir le message
    2) Même si on envisageait, par un curieux phénomène cosmique, qu'il soit possibile de changer l'environnement de l'application java depuis ce shell invoqué, ca n'aurait a nouveau aucune influence. Java initialise System.property à son démarrage, et c'est la dessus que se basent les Writer quand on "oublie" de leur préciser explicitement l'encodage à utiliser.
    Lorsque je les définissais, mes caractères spéciaux se transformaient en "?".

    Citation Envoyé par tchize_ Voir le message
    3) la commande "sh /../changeLang.sh" ne peux pas marche, il n'y a pas de répertoire ".." à la racine ("/") du système sous linux.
    Le /../ c'est juste pour vous éviter ma longue liste de répertoire avant d'arriver au .sh

  15. #15
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par grignette Voir le message
    C'est bien ce que je voulais.
    Cela ne change la variable QUE dans le script shell, et pas dans l'application Java !? C'est cela que tu voulais ?


    Enfin si ton problème est résolu tant mieux, mais pour moi ce script est inutile et la résolution de ton problème est bien mystérieuse... On dira que c'est Noël !

    a++

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Cela ne change la variable QUE dans le script shell, et pas dans l'application Java !? C'est cela que tu voulais ?
    Faux. "Export" permet de transmettre la variable aux processus enfants. De ce fait, comme l'a expliqué tchiz, cela n'a certes aucun impact que le programme appelant mais tous les processus fils récupère cette nouvelle variable.

    Citation Envoyé par adiGuba Voir le message
    Enfin si ton problème est résolu tant mieux, mais pour moi ce script est inutile et la résolution de ton problème est bien mystérieuse... On dira que c'est Noël !
    Joyeux Noël

  17. #17
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par grignette Voir le message
    Faux. "Export" permet de transmettre la variable aux processus enfants.
    Je n'ai jamais dit le contraire... mais le code du script que tu as donné ne crée aucun processus fils.

    a++

  18. #18
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu avais précisé dès le départ que tu voulais changer cela "avant" de lancer ton application, on aurait évité toute cette conversation stérile. Depuis les début du thread tu nous dit le contraire, je cite
    Ne pouvant pas changer cette variable sur le serveur de production, j'aimerais dans mon application la "changer".

    J'ai essayé :
    String cmd = "set LANG=fr_FR.UTF-8 ; export LANG";
    Runtime run = Runtime.getRuntime();
    run.exec(cmd);

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 9
    Par défaut
    Ne pouvant modifier a variable d'environnement de mon serveur, je voulais le faire juste pour mon application. Donc le faire "avant" de la lancer me semblait logique.

    Je me suis peut être mal faite comprendre en effet. Désolée.

  20. #20
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    J'avais pourtant demandé cela :
    Citation Envoyé par adiGuba Voir le message
    Tu es sûr que tu n'as pas défini le export AVANT de lancer ton application Java ???
    Bref : tu n'appelles pas le script depuis le programme java, mais tu appelles ce dernier depuis le script (ce n'est pas du tout la même chose )

    a++

    PS : M'enfin la solution la plus propre reste toujours de spécifier l'encodage lorsque tu en as besoin, et non pas globalement comme ceci..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. changer une variable d'environnement a partir d'un script
    Par doomxl dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 28/06/2007, 13h08
  2. [C#] Récupération d'une variable d'environnement
    Par jamy79 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/08/2005, 14h03
  3. NASM Tester une variable d'environnement à la "compilat
    Par Pierre Maurette dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/06/2005, 13h27
  4. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo