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 :

[TOMCAT] [THREAD] Ajout d'un thread à Tomcat


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [TOMCAT] [THREAD] Ajout d'un thread à Tomcat
    Bonjour,

    Je travaille sous Tomcat et je cherche à minimiser le nombre de requêtes SQL identiques pour soulager ma base de données.

    Je fournis à un utilisateur des informations qui doivent être actualiser toutes les 5 minutes. C'est-à-dire que chaque utilisateur se connecte à la base de données.

    Etant donné le nombre d'utilisateurs, je pensais conserver le résultat d'une requête pendant ces 5 minutes dans un "objet" et envoyer celui-ci à tous les utilisateurs.

    Une autre personne a eu une question similaire et il lui a été conseillé Quartz de Open Symphony (scheduler) et/ou les Commons DBCP et Pool de Apache

    Sauf erreur, les DBCP ne fait que gérer un "pool" de connexions (de manière à les minimiser et réutiliser).

    Quartz fonctionne sous forme de thread et permet de planifier des tâches.
    A priori, je ferais une tâche continuelle sur le serveur et j'interrogerais un attribut de classe du thread.

    Mes questions sont donc:
    - comment ajouter à Tomcat un thread à gérer au démarrage?
    - en mettant le résultat dans cet attribut de la classe du thread, l'accès y sera-t-il possible facilement? (parexemple avec une servlet)
    - en ce qui concerne le remplacement des informations, que me conseillez vous pour éviter qu'il y ait un accès simultané de lecture et d'écriture?

    Si vous avez une autre méthode, je suis preneur.

    Merci de m'avoir lu et par avance pour votre réponse



    Olivangel

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 91
    Points : 130
    Points
    130
    Par défaut
    Hello,

    Tu peux aussi gérer un système de "cache" simple :

    Algorithme de récupération des données :
    Si les données du cache date d'il y a moins de 5 minutes
    Alors retourne le contenu de mon cache
    Sinon appel SQL et stockage du résultat dans le cache avec marquage de la date d'exécution.

    Mise en oeuvre :
    Le cache
    Un simple object te permettra de représenter ce cache. Il suffira de lui mettre un attribut de type long correspondant la date en millisecondes de son remplissage System.currentTimeMillis()
    Le test de validité des données du cache
    Une simple opération de comparaison de la différence entre la date de demande d'accès aux données et l'attribut du cache contenant la date de remplissage

    Attention :
    La récupération de tes données de la base doit être "thread safe", en effet si un thread execute la requete SQL et alimente le cache, il faut que les autres thraed clients soient en attente.
    Un bon moyen est de mettre en synchronized l'appel à l'algorithme ci-dessus.

    Voilà,

    Ce n'est pas forcément la meilleur solution mais c'est une solution qui marchera

    Cédric

  3. #3
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Pour ce qui est de faire démarrer un thread par Tomcat, juste une idée que je n'ai pas testée.
    Je ferai une instance de ma servlet au démarrage (option load-on-startup dans le contexte de la servlet).
    Dans la méthode init de la servlet, je ferai démarrer le thread.

    Si quelqu'un peut dire si ça marche ou pas?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Ca marche
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Solution
    Après une recherche sur un système de cache existant, j'ai consulté la page
    http://www.javaworld.com/javaworld/j...1-cache_p.html

    Vous trouverez un comparatif de trois système opensource:
    - Java Caching System de l'Apache Software Foundation
    - OSCache de OpenSymphony
    - Java Object Cache de ShiftOne

    Mon choix s'est porté sur OSCache.
    La durée de vie de l'objet est vérifiée lors de la consultation du cache.
    C'est lors de celle-ci que l'on fait une éventuelle mise-à-jour.

    J'ai créé une servlet initialisée au démarrage avec l'option <load-on-startup>.
    Dans l'init(), je crée un administrateur de cache que j'alimente après une requête à ma base de données.
    Dans service() (ou doPost()), je demande le cache et c'est cette demande qui met éventuellement à jour mon objet si celui-ci est obsolète.
    Dans destroy(), je détruis le cache et ferme la connexion à la base.

    Un système de servlet similaire existe dans le jar.

    Merci à tous pour votre aide

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

Discussions similaires

  1. Problème d'ajout de projet avec Tomcat 6
    Par BARBIESS dans le forum Eclipse
    Réponses: 2
    Dernier message: 09/01/2012, 12h14
  2. Ajouter un thread deamon dans un thread
    Par Mengué georges dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 28/04/2010, 14h16
  3. ajout d'un thread dans un groupe
    Par lamis2009 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 08/04/2009, 14h37
  4. Librairies ajoutées sous java et tomcat (erreur)
    Par knice dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 05/03/2009, 08h09
  5. Ajout de polices pour tomcat/java
    Par JamesP dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 04/12/2008, 17h33

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