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

Servlets/JSP Java Discussion :

Lancer un timer au démarrage


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut Lancer un timer au démarrage
    Bonjour,

    Petite question : Comment faites vous pour démarrer vos timers au lancement de votre application.

    D'habitude je passe par l'init d'une servlet ou par le ServletContextListener. Y a t-il des moyens plus propres et plus généraux (pas limité à un projet web).

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour.

    Personnellement, je ne lance pas de Timer au démarrage, mais si tu veux le faire, tu peux le faire dans la méthode main, ou dans toute autre méthode appellée à l'initialisation de ton application.

    Après, un Timer se lance quand on en a besoin.
    Quel est ton besoin exactement?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    Ce sont des timers qui font des tâches en background de l'application. Je n'ai pas de méthode main. En gros j'ai une interface web (d'ou les servlets) et une interface service SOAP. Mais j'aimerais qu'aucune des interfaces ne soit le launcher du timer. Il faut vraiment qu'il démarre de lui même. Déclaré une servlet dans mon web.xml permet de faire ça plutôt correctement mais je ne suis pas sur que ce soit la meilleur solution.

  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
    éviter les timers dans une applications web, ceux ci créent un thread qui, si il n'est pas arreté lors du unload de ton application, créent un leak sur le classloader

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour lancer des threads de tâches de fond, tu peux soit utiliser la méthode init d'une servlet à démarrage automatique, soit utiliser une classe implémentant ServletContextListener (à partir de la version 2.3)
    Dans ce cas, tu déclares le listener dans le web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <listener>
          <listener-class>
              mon.package.MaClasseListener
          </listener-class>
      </listener>
    Le code est très simple, tu as 2 méthodes disponibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public void contextInitialized(ServletContextEvent contextEvent)
    public void contextDestroyed(ServletContextEvent contextEvent)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    tchize_ : Difficile de s'en passer pour des tâches périodiques (Ex : je veux supprimer tous les utilisateurs inactif depuis 1 mois). Comment feras tu cela sans timer ?

    OButterlin : Merci c'est effectivement les 2 solutions que j'utilise. Mais n'y a t-il pas de solution indépendant des servlets. Preciser au classLoader qu'il doit loader cette classe au démarrage par exemple

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Dans la mesure où il s'agit du démarrage de ton application, je ne vois pas pourquoi tu veux autre chose.
    Ecrire un ClassLoader juste pour ça n'a pas de sens... je trouve...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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
    j'aime pas les timer parce que généralement tu le lance et puis 'tu l'oublie', ce qui fait que le thread continue à tourner, même après undeploy de l'application. Je préfère des systèmes plus controlable, comme quartz, que tu peux démarrer er arrêter de ton listener, et reconfigurer au vol sans soucis avec 2/3 intrefaces faciles à réaliser

    pis c'est multiusage

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je ne serais pas aussi catégorique, même si j'apprécie particulièrement Quartz.
    Pour un petit thread simple, c'est un peu luxueux tout de même... surtout si sa vocation est de faire un travail dès lors que l'application est active et de manière totalement autonome, sans besoin d'interaction.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Système]Problème pour lancer l'appli au démarrage
    Par CVERRIER3 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 23/11/2005, 16h07
  2. Comment lancer un programme au démarrage de Windows ?
    Par nesquik dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 29/07/2005, 17h48
  3. [SWT]Lancer un timer
    Par FranT dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 07/06/2005, 16h37
  4. lancer une application au démarrage de WinXP
    Par Sph@x dans le forum Windows
    Réponses: 6
    Dernier message: 07/04/2004, 18h05
  5. Lancer un programme au démarrage
    Par ludo_7 dans le forum Windows
    Réponses: 7
    Dernier message: 09/10/2003, 16h29

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