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

Tomcat et TomEE Java Discussion :

Question d'utilisation de TOMCAT


Sujet :

Tomcat et TomEE Java

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Question d'utilisation de TOMCAT
    Bonjour, voici ce qu'il m'arrive :

    Je vous expose tout d'abord le contexte :

    J'ai déployé un projet GWT sur un serveur.
    J'ai installé et configuré un serveur TOMCAT dans /usr.

    Ce qui me donne cette arborescence pour le war de mon projet :
    /usr/tomcat/webapps/gestionCimetiere

    Mon application GWT doit accéder au disque sur le serveur, notamment pour les ficheirs de logs.
    les fichiers de logs sont censés s'écrire dans :
    /usr/tomcat/webapps/gestionCimetiere/Logs/logs.txt

    J'ai aussi cree des liens symboliques dans /usr/bin pour lancer sans trop me prendre la tête avec le chemins les startup.sh et shutdown.sh de TOMCAT,
    Ces deux commandes se nomment respectivement tomStart et tomStop.

    Le truc byzarre qui se produit :
    lorsque je lance mon serveur depuis /usr/tomcat/webapps/ (à l'aide de la commande tomStart) les fichiers de logs s'écrivent dans /usr/tomcat/webapps/
    lorsque je lance mon serveur depuis /usr/tomcat/webapps/gestionCimetiere (à l'aide de la commande tomStart) les fichiers de logs s'écrivent dans /usr/tomcat/webapps/gestionCimetiere
    Et ça me donne le même comportement où que je me place dans l'arborescence de gestion cimetière ( j'ai pas essayé en dehors de webapps)

    Celà viendrait il du fait que par exemple pour ouvrir mon fichier de log j'utilise un chemin relatif ?
    Code de la classe d'accès aux logs :

    package gestionCimetiere.server;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class Logs {

    private int tailleMaxOctet = 1024*1000;
    private int nbMaxArchives = 5;
    private String nom;
    private String ville;
    File file;

    public Logs(String nom, String ville){
    this.ville=ville;
    this.nom=nom;

    file = new File("logs/log.txt");
    loguerAction("connexion");
    }
    public void loguerAction(String message){
    String messageALoguer = new String();
    Date myDate = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy - hh-mm-ss");
    String s = sdf.format(myDate);

    messageALoguer = ville+"_"+nom+" "+s+" "+message;

    try {
    archivage();
    FileOutputStream stream = new FileOutputStream(file, true);
    stream.write(messageALoguer.getBytes());
    stream.write(0x0d);
    stream.close();

    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    public void archivage(){
    File destinationArchive= new File("logs/archives/");
    if(!destinationArchive.exists())
    destinationArchive.mkdirs();
    /*
    *On va lister tous les fichiers de l'archive,
    *Si on à atteint le nombre maximum de fichiers,
    *on va faire un glissement pour les remplacer
    *1 va devenir 2
    *2 va devenir 3
    *3 va devenir 4
    *...
    *x va devenir x+1
    */
    if(file.length()>tailleMaxOctet){
    File[] listeFichiersArchive = destinationArchive.listFiles();
    int nbFichiers = listeFichiersArchive.length;

    for(int i=nbFichiers+1; i>1; i--){
    File fichierSource = new File("logs/archives/"+(i-1)+"_"+file.getName());
    File fichierDestinnation = new File("logs/archives/"+i+"_"+file.getName());
    if(!fichierDestinnation.exists())
    try {
    fichierDestinnation.createNewFile();
    } catch (IOException e) {
    e.printStackTrace();
    }
    fichierSource.renameTo(fichierDestinnation);
    }
    if(nbFichiers>=nbMaxArchives)
    {

    for(int i=nbMaxArchives; i<=nbFichiers; i++){
    File fichierSource = new File("logs/archives/"+(i+1)+"_"+file.getName());
    fichierSource.delete();
    }
    }
    destinationArchive=new File("logs/archives/1_"+file.getName());

    file.renameTo(destinationArchive);
    file.delete();
    try {
    file.createNewFile();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    public String getNom(){
    return nom;
    }
    public String getville(){
    return ville;
    }
    }

    Et que TOMCAT place sa racine a partir de l'endroit où on le lance ? Ça me paraitrait un peu stupide car si j'ai 5 applications sur le même serveur tomcat, elles vont pas toutes écrire au même endroit...

    Pour l'instant je suis encore sur un serveur de test donc c'est pas bien grave, mais il faudrait que j'arrive à le faire fonctionner sans vagues pour le déploiement final.
    Si vous avez besoin d'autres précision, le code source.. dites le moi

    Merci d'avance pour le coup de main.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le problème ne vient pas de la façon dont Tomcat gère ses fichiers mais de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file = new File("logs/log.txt");
    Il s'agit d'un chemin relatif. Ce chemin est donc effectivement lié à l'endroit où tu lances ta commande.

    Pour t'affranchir de se problème, il te faut un chemin absolu (débutant par un '/') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file = new File("/usr/tomcat/webapps/gestionCimetiere/Logs/logs.txt");
    Hors-sujet : programmer un Logger, c'est très bien pour apprendre à développer, mais dans la vraie vie, tu ferais bien de passer par une librairie de Logging (Log4J par exemple) : c'est standardisé, robuste, paramétrable... et tu n'as pas à écrire de code.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Je te remercie de ta réponse,

    Mais ici le fait d'utiliser une librairie de log, où ma classe de change pas le problème de chemin.
    En fait l'application que je développe est une application libre de gestion de cimetière, et qui vise à être installée sur plusieurs collectivités territoriales, le truc qu'il ya c'est que je peux pas mettre le chemin en dur car la configuration du serveur où l'appli sera installée m'est inconnue.

    Je travaille en GWT donc si ça se trouve il faut utiliser une méthode pour trouver la racine de l'application sur le serveur ?
    Je pourrais simplement créer une variable de session dans le fichier de conf catalina qui aurait pour valeur la racine du projet ?

    Ce sont des pistes à creuser, mais si quelqu'un à des infos, je suis preneur.

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par 01001011 Voir le message
    Mais ici le fait d'utiliser une librairie de log, où ma classe de change pas le problème de chemin.
    En fait l'application que je développe est une application libre de gestion de cimetière, et qui vise à être installée sur plusieurs collectivités territoriales, le truc qu'il ya c'est que je peux pas mettre le chemin en dur car la configuration du serveur où l'appli sera installée m'est inconnue.
    C'est justement là où une librairie de logging trouve tout son intérêt !

    Dans Log4J, le chemin des logs est absolu, mais il n'est pas en dur dans le code source. il est mis dans le "fichier de configuration" de Log4J.

    Le changement de fichier relève donc de la paramétrie, ce qui offre bien plus de souplesse. Par ailleurs, la configuration de Log4J autorise de nombreuses autres customisations :
    - format de sortie (fichier texte, fichier HTML, etc.)
    - purge et "roulement" des fichiers de logs (par journée, quand une taille maximale de fichier est atteinte, etc.)
    - etc.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Oui, mais en fait, le problème se poserait aussi pour trouver le fichier de configuration, il le cherche aussi dans /, j'utilise des fichiers de config pour mon application, et elle va les chercher dans / ... C'est pour ça que je suis confus.

    Si je n'avais pas le problème du timing, je foncerai tout de suite sur la lib de log que tu me propose C'est vrai que je suis pour le développement des standards c'est vachement mieux qu'un truc bidouillé un peu à l'arrache Mais bon je dois boucler la betaTest pour vendredi,

    J'espère trouver une solution d'ici là, si t'a quelques bonnes idées d'ici là je suis prenneur

    Mais je pense que je vais utiliser une variable de session dans laquelle l'administrateur mettra le chemin jusqu'à la racine de l'application.

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ai fait cette manip :

    j'ai rajoute la ligne
    export GESTIONCIMETIERE = monChemin
    dans le fichier /etc/profile.

    Puis j'y accède via System.getenv() dans mon programme pour récupérer sa valeur. Je sais pas si c'est ce qu'il ya de plus propre mais ça marche.

    Merci de ton aide en tout cas

    +

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par 01001011 Voir le message
    Oui, mais en fait, le problème se poserait aussi pour trouver le fichier de configuration, il le cherche aussi dans /, j'utilise des fichiers de config pour mon application, et elle va les chercher dans / ... C'est pour ça que je suis confus.
    Non, les fichiers de configuration ne sont pas lus dans dans "/" (du moins pas ceux de Log4J) : ils sont lus dans le classpath de l'application (cf. la si tu ne sais pas ce qu'est le classpath).
    Ca assure que le fichier de configuration est trouvé, indépendamment du système et de l'arborescence sur lesquels tu installes ton application.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    OK, mais ça nécessite de rajouter le chemin vers la racine de l'application dans le classpath, ce qui reviens à utiliser une variable d'environnement, quoi qu'il arrive j'ai l'impression qu'on en reviens là

    Mais je testerai log4j sur ma prochaine appli

Discussions similaires

  1. [Plone / Zope / Apache] question d'utilisation
    Par sebb84 dans le forum Zope
    Réponses: 6
    Dernier message: 18/12/2006, 22h38
  2. Utilisation de Tomcat et Eclipse
    Par xandj74 dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 05/07/2006, 21h54
  3. Question l'utilisation d'un grand tableau en JS
    Par steelidol dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2006, 21h01
  4. utilisation de Tomcat
    Par oussam dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 21/02/2006, 23h44
  5. Question sur utilisation du JOIN LEFT ON
    Par carolinebelle dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/07/2005, 13h57

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