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

Java Discussion :

exécuter une tache périodiquement


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 76
    Par défaut exécuter une tache périodiquement
    salut tout le monde,
    alors je veux faire des tests sur des machines chaque 2 min.
    après une recherche sur internet, j'ai trouvé que la classe Timer et ses compatriotes feront l'affaire.
    j'ai lu qu'il faut faire ce qu'on veut exécuter dans le run() du TimerTask.
    sauf que moi je veux exécuter le execute() d'une Action.
    je ne vois pas trop comment faire et je me dirige vers votre aide.
    merci d'avance.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Rien ne devrait t'empercher de lancer ce que tu veux depuis le run() de ton timer.

    Pourrais tu détailler ton problème avec si possible ton code?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 76
    Par défaut
    alors, voici le code de mon EtatServeurAction que je veux qu'il se répète chaque 2 min.

    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
    60
    61
    62
    63
    64
    65
    66
    67
    public class EtatServeurAction extends org.apache.struts.action.Action {
     
     
        private final static String SUCCESS = "success";
     
     
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            ConnexionBD bd=new ConnexionBD();
            ConnexionBD bd1=new ConnexionBD();
            ConnexionBD bd3=new ConnexionBD();
            ConnexionBD bd4=new ConnexionBD();
            ConnexionBD bd5=new ConnexionBD();
            MailJava m=new MailJava();
            EtatServeurForm es=new EtatServeurForm();
            Ping p=new Ping();
            stat s=new stat();
            int iTemp=0;
            int nTemp=0;
     
            bd5.lire("select * from config");
            int nb=Integer.parseInt(bd5.résultat.getString("nombre_panne"));
     
                bd.lire("select * from serveurs");
            while(bd.résultat.next())
            {
                String ip=bd.résultat.getString("add_ip");
                String idserv=bd.résultat.getString("idserveur");
                boolean eta=p.ping(ip);
                iTemp=Integer.parseInt(bd.résultat.getString("i"));
                nTemp=Integer.parseInt(bd.résultat.getString("n"));
                s.stat(ip, idserv);
                if(eta)
                {iTemp=0;
                 nTemp=0;
                 bd3.miseAJour("UPDATE serveurs SET etat='Opérationnel' where idserveur='"+bd.résultat.getString("idserveur")+"'");
                 bd3.miseAJour("UPDATE serveurs SET i='"+iTemp+"'where idserveur='"+bd.résultat.getString("idserveur")+"'");
                 bd3.miseAJour("UPDATE serveurs SET n='"+nTemp+"'where idserveur='"+bd.résultat.getString("idserveur")+"'");
     
                }
                else
                {iTemp++;
                 bd4.miseAJour("UPDATE serveurs SET etat='Non opérationnel' where idserveur='"+bd.résultat.getString("idserveur")+"'");
     
     
                    if(iTemp==nb && nTemp==0)
                    {
                    {
                        m.envoyer("test@gmail.com","IP", "NOM");
     
                     nTemp=1;
                     iTemp=0;
     
                    }
                 bd4.miseAJour("UPDATE serveurs SET i='"+iTemp+"'where idserveur='"+bd.résultat.getString("idserveur")+"'");
                 bd4.miseAJour("UPDATE serveurs SET n='"+nTemp+"'where idserveur='"+bd.résultat.getString("idserveur")+"'");
                 }
     
            }
     
     
            return mapping.findForward(SUCCESS);
     
            }
    }
    le problème est que je ne peux pas créer un objet ni appeler cette méthode.

  4. #4
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Ce n'est pas un problème java mais javascript. Il faut juste que ta page se recharge toutes les x minutes. Je croit que c'est la méthode setTimeout que tu dois utiliser.

    A+
    Hydraland

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 76
    Par défaut
    franchement j'ai jamais utiliser le javascript.
    plus précisément, l'utilisateur entre deux nombre x et y, le x pour pinger les machines tant qu'elles fonctionnent bien.une fois il ping une machine et la trouve non opérationnelle, il doit changer la fréquence du ping à y.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pour des tâches de fond, laisse tomber le Struts Action, ceux-ci sont liés à une requetes http, c'est leur rôle. Hors si tu veux faire juste des pings toutes les 2 minutes, c'est pas comme ça qu'il faut faire (sauf si tu veux aussi afficher la pages toutes les deux minutes, voir plus bas). Donc tu sort ton code de cette Action et tu le met dans ton timertask ou dans une quelconque classe de soutiens Si ça doit être réutilisable. J'émetterais aussi un doute quand au fait de lancer un ping sur n machine toutes les deux minutes. Si t'as 15 machines dont deux qui sont offline et 13 qui ont un temps de réponse moyen de 10ms, tu va mettre 130ms + 2*temps de timeout. Et la pluspart du temps le ping a un timeout d'environ 2 minutes, donc toutes les 2 minutes tu va lancer un process qui peux durer 4 minutes

    Pour juste rafraichier une page toutes les X secondes, il suffit d'utiliser le header HTTP Refresh. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Refresh", "120; url=http://www.example.com/");

Discussions similaires

  1. Exécuter une tache ant après compilation
    Par titouille dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/06/2008, 21h40
  2. Réponses: 3
    Dernier message: 08/04/2008, 13h29
  3. Service windows exécutant une tâche périodique
    Par Nico_stras dans le forum C#
    Réponses: 13
    Dernier message: 06/03/2008, 08h46
  4. [VBA]Exécuter une tache sur chaque ligne d'une table
    Par Tierisa dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/04/2007, 16h53
  5. Exécuter une tache en arrière-plan
    Par EvilAngel dans le forum Windows
    Réponses: 6
    Dernier message: 20/02/2007, 11h15

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