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

Struts 1 Java Discussion :

accès et modifications d'un fichier se trouvant dans le war


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut accès et modifications d'un fichier se trouvant dans le war
    Je voudrais modifier un fichier image.svg se trouvant dans mon dossier WebCopntent/jsp/images de mon projet....

    Alors je tiens tout de même à préciser qu'il s'agit d'une modif en ligne, c'est à dire pendant que l'appli tourne, et en ajax bien sûr sinon c'est pas drôle....


    Savez vous si c'est possible?

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah un SVG c'est basiquement un fichier xml donc du texte donc tu peux le modifier.

    Par contre il va falloir te gérer les accès concurrents (une appli web étant par définition un appli multi user)... et là çà rique d'être un peu plu tendu

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    En fait le truc c'est que les acces en écriture se feront tous les x secondes par un thread unique...donc pas d'accès concurrent Ca c'est cool...

    Mais je ne vois pas du tout comment faire niveau code pour faire de la modif de fichier qui se trouve dans le war.....

    Je veux dire que mon thread va modifier des données directement dans le fichier svg qui est dans le war, pendant que mon appli est en train de tourner (un ou plusieurs clients connectés)....

    Tu aurais quelques pistes ou un exemple que je puisse adapter stp?

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,
    tu ne peux pas modifer le War directement, il faut prendre le svg dans le war, le modifier et l'écrire sur disque à un emplacement défini dans le classpath (avant le war pour surcharger le svg existant.)

    La transformation se foit soit avec un parser SAX basique, qui prend en entrée le fichier du War, et constitue directement le fichier de sortie dans le XMLHandler, soit avec un chargement du DOM, que tu modifie en mémoire, et que tu réécrit sur disque.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut


    Heu....Je veux bien mais là je ne vois pas trop....

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Citation Envoyé par deltree
    il faut prendre le svg dans le war, le modifier et l'écrire sur disque à un emplacement défini dans le classpath (avant le war pour surcharger le svg existant.)
    Heu... avant le war pour surcharger l'existant ???? je ne comprend pas trop là...
    En admettant que j'arrive à modifier le fichier xml en le chargeant et en l'ouvrant et en écrivant dedans avec des fonctions java d'acces aux fichiers.....comment je fais pour l'écrire je ne sais ou?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    si je ne me trompe pas, les serveurs d'application ne tourne pas avec l'application en War...

    tous autant qu'ils sont (toujour à ma connaissance...) déploient l'archive dans un répertoire donné... (c'est un peu de l'archéologie pour le trouver quelques fois, jel'accorde !)

    donc pour modifier ton fameux fichier en cours de fonctionnement et que celui ci soit applicable immédiatement, c'est le fichier déploiyer que tu dois modifier, et non celui du War !

    par contre, tu peux faire une copie de ce fichier (là je sais pas comment) pour conserver le parallèle entre ton war, et l'appli déployée !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Ah ouai, en me balladant une fois dans les répertoires de jboss, j'ai vu un fichier portant le nom de mon projet.... c'est peut être ca, je vais aller regarder

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Ok, j'ai trouvé ce répertoire..... C'est celui-ci :

    C:\Java\jboss-4.2.0.CR1\server\default\tmp\deploy\tmp38730WebIma-exp.war\jsp\images

    Là dedans j'ai toutes les images svg que je suis susceptible de devoir modifier.....
    Mais maintenant que j'ai cela, je dois faire quoi ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    si comme l'a dit sinok c'est un xml, ben tu l'ouvres tu le modifies et tu le fermes...
    et le tour est jouer !!!

    bon après pour le modifier il y a des chance que tu sois obligée de le parser, mais là je laisse d'autre t'apporter plus de précisions...

    PS : oublie pas la copie dans ton war si tu veux garder l'applie archive cohérante avec l'applie déployée ...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Citation Envoyé par Arcann
    si comme l'a dit sinok c'est un xml, ben tu l'ouvres tu le modifies et tu le fermes...
    Je ne suis pas très à l'aise avec les modifs de fichiers
    C'est possible de faire cela depuis une classe Action???

    Citation Envoyé par Arcann
    PS : oublie pas la copie dans ton war si tu veux garder l'applie archive cohérante avec l'applie déployée ...
    ???? Pas compris

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Citation Envoyé par AnneB
    Je ne suis pas très à l'aise avec les modifs de fichiers
    moi non plus...

    Citation Envoyé par AnneB
    C'est possible de faire cela depuis une classe Action???
    je ne vois pas trop comment le faire d'autre...

    Citation Envoyé par AnneB
    Pas compris
    on la refait...
    au redémarrage de ton applie / serveur JBoss risque de comparé ce qui est déployé avec ce qui est dans l'archive. il risque donc (sauf paramétarge éventuel, je ne connais pas JBoss !) de d'écraser les données de to appli (déployée) par celles de ton war et donc ton joli fichier que tu viens de modifier !

    2 solutions :
    - tu t'en contre fiches et tu n'as rien a faire !
    - tu souhaites garder tes modifs et tu devras copier le fichier, une fois modifié, à l'interieur de ton war pour qu'au redéploiement tes modifs soient prises en compte !

  13. #13
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Ce n'est pas trop un bonne idée de se greffer sur les répertoire de JBoss, c'est de la bidouille: ils peuvent changer, et on est complètement dépendant de l'installation du serveur d'appli (version, passage à WAS ou Jonas impossible...)

    Autant spécifier directement son propre chemin dans le classpath, c'est plus sûr, et ça marche aussi bien.
    (et évite au passage les problème d'écrasement évoqués précédemment)

    Heu... avant le war pour surcharger l'existant ???? je ne comprend pas trop là...
    En admettant que j'arrive à modifier le fichier xml en le chargeant et en l'ouvrant et en écrivant dedans avec des fonctions java d'acces aux fichiers.....comment je fais pour l'écrire je ne sais ou?
    avant le war: dans le classpath.
    - tu charge le fichier "toto.svg" en tant que ressource, donc diponible dans le war. le "ClassLoader" de la jvm va chercher dans tous les répertoires, les jar et les war du classpaht pour charge (comme le path système quoi) en cas de doublons, il faut bien un ordre pour déterminer qui prendre.

    - comment je fais pour l'écrire je ne sais ou?
    Je ne connait pas le détail, mais le XmlTransformer doit te donner un InputStream (ou prend un InputStream en paramètre) dans un cas comme dans l'autre, il faut créer un FileStream prenant en paramètre le chemin complet du fichier.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Et comment je peux spécifier mon propre chemin dans le classpath ?

    Ou alors peut être existe-t-il une fonction pertmettant de récupérer le fichier ou l'archive est déployée...?

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Citation Envoyé par Arcann
    on la refait...
    au redémarrage de ton applie / serveur JBoss risque de comparé ce qui est déployé avec ce qui est dans l'archive. il risque donc (sauf paramétarge éventuel, je ne connais pas JBoss !) de d'écraser les données de to appli (déployée) par celles de ton war et donc ton joli fichier que tu viens de modifier !
    Merci je vois mieux....
    Je prend la solution 1

    En fait j'ai décidé de faire un thread singleton qui ouvre tous les fichiers svg à mettre à jour les uns apres les autres....il met à jour puis sauvegarde.
    Et du côté de ma jsp, je vais mettre en place ajax pour faire un rechargement tous les x secondes de mon fichier image svg => ca devrait marcher normalement, puisque à priori du coup il prendra le fichier qu'a modifié le thread et non celui originel se trouvant dans le war.... si j'ai bien tout compris ca doit être ca....

    Voilà, bah là j'ai trop trop faim, je commence ca apres manger

  16. #16
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Citation Envoyé par AnneB
    Et comment je peux spécifier mon propre chemin dans le classpath ?

    Ou alors peut être existe-t-il une fonction pertmettant de récupérer le fichier ou l'archive est déployée...?
    Le classpath est dans un des fichiers de config, le serveur ou le web.xml de la webapp (je ne sais plus) Au pire, si tu modifie le classpath du projet Eclipse, il est p-e repris en config dans ton War. Pour ajouter des librairies tu l'as bien déjà modifié?

    Je le répète, pour moi accéder au répertoire de déploiement est risqué, on n'a aucune garantie du résultat: est-ce que ton fichier sera pris en compte?

    c'est un peu comme si on modifiait le swap de Windows pendant qu'il est en route...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Le problème si jamais je met mon fichier dans un endroit précis de ma machine indépendant de jboss, c'est que je ne peux pas afficher l'image svg depuis ma page jsp....Ce qui finalement est tout de même assez gênant vu que le but est quand même de l'afficher là...

    Donc je crois que je vais opter pour la solution de modifier direct dans le dossier de déploiement.....

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    prend note des remarque de deltree...
    c'est un point auquel je n'avais pas forcément pensé en te présentant ma "solution" !

    mais il faut essayer !

Discussions similaires

  1. Lecture d'un fichier se trouvant dans un jar
    Par Leonheart dans le forum Général Java
    Réponses: 6
    Dernier message: 03/12/2009, 12h00
  2. Réponses: 1
    Dernier message: 07/09/2009, 11h30
  3. Réponses: 1
    Dernier message: 22/01/2008, 17h01
  4. Réponses: 3
    Dernier message: 13/06/2007, 14h50
  5. Réponses: 4
    Dernier message: 26/01/2006, 12h12

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