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 :

Message Tomcat qu'un fichier .properties est manquant


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut Message Tomcat qu'un fichier .properties est manquant
    Bonjour à tous,

    J'essaie de remettre en marche un vieux et complexe projet en J2EE sous Eclipse. J'ai configuré un serveur Tomcat, mais lorsque je cherche à démarrer ce projet sur le serveur configuré, j'ai ceci dans la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Oct 25, 2013 6:44:55 PM org.apache.catalina.core.AprLifecycleListener init
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/Joe/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
    Oct 25, 2013 6:44:56 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-bio-8090"]
    Oct 25, 2013 6:44:56 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
    Oct 25, 2013 6:44:56 PM org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 521 ms
    Oct 25, 2013 6:44:56 PM org.apache.catalina.core.StandardService startInternal
    INFO: Starting service Catalina
    Oct 25, 2013 6:44:56 PM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
    2013-10-25 18:44:56,958 ERROR [localhost-startStop-1] config.ApplicationContext (<init>:31) - This file does not exist : ideliance.properties
    java.io.FileNotFoundException: ideliance.properties (No such file or directory)
    	at java.io.FileInputStream.open(Native Method)
    	at java.io.FileInputStream.<init>(FileInputStream.java:146)
    	at java.io.FileInputStream.<init>(FileInputStream.java:101)
    	at java.io.FileReader.<init>(FileReader.java:58)
    	at ideliance.core.config.ApplicationContext.<init>(ApplicationContext.java:23)
    	at ideliance.core.config.ApplicationContext.getInstance(ApplicationContext.java:39)
    	at ideliance.servlet.right.ViewFilter.init(ViewFilter.java:39)
    	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:744)
    Oct 25, 2013 6:44:56 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8090"]
    Oct 25, 2013 6:44:56 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    Oct 25, 2013 6:44:56 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 795 ms
    Oct 25, 2013 6:45:17 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [connection] in context with path [] threw exception
    java.lang.NullPointerException
    	at ideliance.servlet.connection.ConnectionFilter.doFilter(ConnectionFilter.java:84)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:744)
    Le problème, c'est que n'ayant jamais rencontré ce problème lorsque je travaillais sur ce projet, je ne sais pas où mon projet va chercher ce fichier!
    J'ai essayé de le copier à plusieurs endroits de mon arbo Eclipse (WEB-INF, WEB-INF/src, dans le dossier TOMCAT_HOME/webapps/MonProjet/WEB-INF/src/), mais le résultat est le même!
    Voici le contenu de la classe ApplicationContext.java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    package ideliance.core.config;
     
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Properties;
     
    import org.apache.log4j.Logger;
     
    @SuppressWarnings("serial")
    public class ApplicationContext extends Properties {
     
    	private static final Logger log = Logger.getLogger(ApplicationContext.class);
     
    	private static final String PROPERTIES_FILE = "ideliance.properties";
     
    	private static ApplicationContext _instance = null;
     
    	private ApplicationContext() {
     
    		try {
    			FileReader fileReader = new FileReader(PROPERTIES_FILE);
     
    			try {
    				load(fileReader);
    			} finally {
    				fileReader.close();
    			}
    		} catch (FileNotFoundException e) {
    			log.error("This file does not exist : " + PROPERTIES_FILE, e);
    		} catch (IOException e) {
    			log.error("An error occurs during the context initialization", e);
    		} 
    	}
     
    	public static ApplicationContext getInstance() {
    		if (_instance == null) {
    			_instance = new ApplicationContext();
    		}
     
    		return _instance;
    	}
     
    	public int getIntProperty(String key, int defaultValue) {
    		int nb;
    		String property = getProperty(key);
     
    		try {
    			nb = Integer.parseInt(property);
    		} catch (NumberFormatException e) {
    			nb = defaultValue;
    		}
     
    		return nb;
    	}
    }
    Pourriez-vous me donner une piste?

    Autre question: dois-je inclure les JAR contenus dans le dossier WEB-INF/lib de mon projet Tomcat sous l'onglet Classpath/User Entries de mon serveur?

    Quoi qu'il en soit, le résultat reste le même.

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Le code doit aller chercher le fichier à la racine du classpath, classiquement "TOMCAT_HOME/webapps/MonProjet/WEB-INF/classes/".

    Tu peux modifier ton code comme ceci pour voir où le fichier est recherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File propertieFile = new File(PROPERTIES_FILE);
    log.error("Chemin complet du fichier : " + propertieFile.getAbsolutePath());
    FileReader fileReader = new FileReader(propertieFile);
    Une trace de log apparaitra dans la console pour te dire où le fichier est recherché.

    Pour ta deuxième question, la réponse est non. Tomcat chargera les jar dans le dossier WEB-INF/lib automatiquement.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Tu mérites un bisou et mes meilleurs compliments!
    Ta portion de code m'a permis de trouver le bon chemin (c'était la racine d'un autre projet que j'empaquête dans un JAR pris en charge par le projet Tomcat).
    Merci infiniment!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il faut éviter à tout prix de faire un File sur un chemin relatif comem tu le fait. L'emplacement qui sera lu sera fortement dépendant de la manière dont ton conteneur a démarré puisqu'il va chercher dans "le répertoire courant" dont la valeur est indéterminée en J2EE.

    Par exemple, si tu démarre tomcat depuis eclipse, si tu démarre tomcat en service windows, si tu démarre tomcat depuis la console. Tu aura trois chemins différents!!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    D'accord, je ne savais pas, merci à toi.
    En fait dans le code que j'ai, le chemin absolu est mis en commentaire, et le chemin relatif est décommenté. Sur le topic, je me suis contenté de donner le code décommenté, mais il m'aurait semblé aussi plus adapté d'utiliser un chemin absolu, d'autant plus que je jongle entre PC et Mac!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un "truc" que j'aime bien utiliser quand je suis dans les conditions suivantes:

    - la configuration ne peux pas être mis dans le conteneur (bref, ça ne concerne pas la base de données)
    - la configuration ne peux pas être dans le war (on veux un war identique pour tous les déploiements)
    - le chemin ne peux pas être imposé (on jongle avec différents OS par exemple)

    c'est de mettre les fichier de config dans la HOME du user courant. En effet,
    - le conteneur J2EE est presque toujours démarré avec le même utilisateurs, ça se vautrerait ou nécessiterait une putain d'adaptation de la config pour que ça marche avec plusieurs users pouvant démarré.
    - il est rare que le même utilisateur doive démarrer plusieurs fois ton application en parallèle.
    - Tant que le user est le même, la home reste la même
    - c'est facile à trouver pour les admins

    Si t'es dans le dernier cas, recourir alors à une variable d'environnement, différente pour chaque run (genre TONAPPLICATION_HOME) ou mettre la config dans la webapp

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

Discussions similaires

  1. tomcat 6 - JNDI syntaxe context.xml fichier .properties
    Par plm12 dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 30/09/2008, 16h51
  2. Réponses: 6
    Dernier message: 01/08/2006, 16h28
  3. [Tomcat]Où mettre les fichiers properties dans une appli web
    Par tchouki dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 31/01/2006, 17h32
  4. message d'erreur : "le fichier verrou est trop importan
    Par lol_adele dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/06/2004, 07h58

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