Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1656 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Method init() de Tomcat executé deux fois ?! [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Method init() de Tomcat executé deux fois ?! [RESOLU]

n°625746
bartleby
Posté le 30-01-2004 à 09:58:06  profilanswer
 

Bonjour a tous,
 
Je rencontre un probleme avec une application fonctionnant sous Tomcat 4.
 
Dans le web.xml, un element "loadonstartup" permet d'initialiser certaines servlets...
Le probleme, c'est que ces servlets crées des threads etc....
 
Je me suis aperçu que certaines threads etaient en double et donc que:
 
La methode init est appellé deux fois ( j'ai tracé avec un ID )...
 
Est-ce deja arrivé a quelqu'un ici ? Je ne vois vraiment pas comment ca peut arriver ...


Message édité par bartleby le 03-02-2004 à 14:25:25
mood
Publicité
Posté le 30-01-2004 à 09:58:06  profilanswer
 

n°625753
benou
Posté le 30-01-2004 à 10:09:59  profilanswer
 

en effet ce n'est pas possible ...  
La méthode init peut être appelée plusieurs fois, mais seulemetn si la méthode destroy est appelée auparavant ... (ce qui arrive quand le context est arrêté puis relancé)
 
Ca vient surement d'une erreur de ta part ailleur ...


---------------
ma vie, mon oeuvre - HomePlayer
n°625757
VinceG
Posté le 30-01-2004 à 10:14:58  profilanswer
 

Salut,
 
Tomcat utilise un pool de Threads pour augmenter les performances de traitement, ainsi une Thread peut être utilisée pour plusieurs traitements. Si Tomcat doit réaliser 2 traitements en parallèle, il utilise 2 Thread différentes en même temps. Mais s'il doit réaliser 2 traitements séquentiellement, par exemple 2 init de servlet (qui se font forcément séquentiellement), il prend la première Thread libre de son pool, exécute le premier traitement, remet le thread dans le pool, le reprend pour faire le 2ème traitement, le réalise et remet le thread dans le pool. En fait, il faut penser qu'un thread peut servir à plusieurs traitements.
Donc si tu vois dans tes traces qu'un thread est exécuté plusieurs fois, celà ne signifie pas que ton init s'est réalisée plusieurs fois.
 
A+.

n°625812
bartleby
Posté le 30-01-2004 à 11:00:33  profilanswer
 

Hm, je me suis mal exprimé.
La méthode init de ma servlet instancié un thread qui recupere des informations regulierement.
Il instancie egalement un pool de connexion (ds une hashmap, donc pas grave car GarbageCollecté).
 
C'est en observant le rafraichissement des données que je me suis apercu que 2 threads avaient été crées . J'ai tracé et je confirme bien que c'est la methode init de la servlet qui est lancé deux fois....il n'y a pas d'erreurs la dessus :(...

n°625835
benou
Posté le 30-01-2004 à 11:13:14  profilanswer
 

bartleby a écrit :

C'est en observant le rafraichissement des données que je me suis apercu que 2 threads avaient été crées . J'ai tracé et je confirme bien que c'est la methode init de la servlet qui est lancé deux fois....il n'y a pas d'erreurs la dessus :(...


 :heink:  
 
Le problème c'est que c'est pas possible  ...
tu l'as bien déclarée qu'une fois dans le web.xml ??


---------------
ma vie, mon oeuvre - HomePlayer
n°626340
bartleby
Posté le 30-01-2004 à 17:42:18  profilanswer
 

Oui :( !
 
C'est dommage que l'informatique ne soit jamais une science exacte avec moa!

n°626352
benou
Posté le 30-01-2004 à 18:01:24  profilanswer
 

Dans ton init, ajoute ca et balance les traces !

Code :
  1. System.out.println("servlet-name : " + this.getServletName());
  2. new Exception().printStackTrace(System.out);


Ca m'intrigue ton histoire !


---------------
ma vie, mon oeuvre - HomePlayer
n°626362
R3g
fonctionnaire certifié ITIL
Posté le 30-01-2004 à 18:18:01  profilanswer
 

Sinon pour ce que tu veux faire, tu peux utiliser un ServletContextListener (ou quelquechose comme ça), pour déclencher un traitement à la création de ton contexte. C'est plus propre que loadonstartup.

n°626506
the real m​oins moins
Posté le 30-01-2004 à 21:13:42  profilanswer
 

R3g a écrit :

Sinon pour ce que tu veux faire, tu peux utiliser un ServletContextListener (ou quelquechose comme ça), pour déclencher un traitement à la création de ton contexte. C'est plus propre que loadonstartup.

[:bien] :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°626509
benou
Posté le 30-01-2004 à 21:15:47  profilanswer
 


mais attendez un peu avant de lui donner la bonne méthode, je veux comprendre son machin, moi :o


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 30-01-2004 à 21:15:47  profilanswer
 

n°626511
the real m​oins moins
Posté le 30-01-2004 à 21:19:43  profilanswer
 

benou a écrit :


mais attendez un peu avant de lui donner la bonne méthode, je veux comprendre son machin, moi :o

bah ça ne devrait rien changer au problème, à moins qu'il y ait effectivement un probleme du coté de tomcat


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°629713
bartleby
Posté le 03-02-2004 à 14:23:04  profilanswer
 

Bon, nous avons trouvé d'où venait le probleme.
Dans le sous repertoire WebApps, j'avais mon application ( normal).
J'avais crée un virtual Host à la racine ( http://machin:8080) vers le repertoire dans webapps:
 
Context : machin => /webapps/MaWebApps.
 
Ce que je ne savais pas, c'est que TomCat initialisait les servelts et tout et tout, pour CHAQUE context!
On m'avait dis: "Ouais c'est comme un alias" et comme un con j'avais pas lu la doc :[ !
C'est certainement ce que vous vouliez me dire quand vous me demandiez si je n'avais pas déclaré ma webapp deux fois. Je pensais "web.xml" et pas "server.xml".
 
La solution: La webapps n'est plus dans le repertoire "webapps", le context est toujours present, mais pointe desormais vers le nouveau repertoire.
 
Désolé, je vais me faire sepuku de ce pas :D !


Message édité par bartleby le 03-02-2004 à 14:25:00
n°629798
benou
Posté le 03-02-2004 à 15:07:24  profilanswer
 

ok :)
 
tout s'explique :)


---------------
ma vie, mon oeuvre - HomePlayer
n°1060108
siry
Posté le 25-04-2005 à 17:53:28  profilanswer
 

bonjour j'ai le meme probleme que toi mais je n ais pas tres bien compris la solution pourrais tu m'eclairer merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Method init() de Tomcat executé deux fois ?! [RESOLU]

 

Sujets relatifs
[HTML] Insertion de JS cause un retour a la ligne forcé ! [résolu][Résolu] afficher le min et le max
passer un tableau d'entier en parametre dans une URL [resolu][PHP] Comment envoyer des données en POST à un script ? [Résolu]
passage de php/mysql vers php/access : problemes [resolu][RESOLU] AffineTransformOp qui zap des données
[RESOLU] Insertion d'une page php dans une page jsp[PHP] Marrant ca : session_start() => Failed to init. storage module
[DELPHI] Requete SQL ? [RESOLU][C#] [résolu] Comment afficher une image en plein écran ?
Plus de sujets relatifs à : Method init() de Tomcat executé deux fois ?! [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR