2010-06-08 2 views

Répondre

1

Mettre en œuvre ServletContextListener; dans la méthode contextInitialized:

ServletContext servletContext = servletContextEvent.getServletContext(); 
try{ 
// create the timer and timer task objects 
    Timer timer = new Timer(); 
    MyTimerTask task = new MyTimerTask(); //this class implements Callable. 

// get a calendar to initialize the start time 
    Calendar calendar = Calendar.getInstance(); 
Date startTime = calendar.getTime(); 

    // schedule the task to run hourly 
timer.scheduleAtFixedRate(task, startTime, 1000 * 60 * 60); 

    // save our timer for later use 
    servletContext.setAttribute ("timer", timer); 
} catch (Exception e) { 
servletContext.log ("Problem initializing the task that was to run hourly: " + e.getMessage()); 
} 

Modifier votre web.xml avoir référence à l'implémentation de l'auditeur:

<listener> 
    <listener-class>your.package.declaration.MyServletContextListener</listener-class> 
</listener> 
+0

grâce @ring, @Balus, @Peter, Toutes vos réponses sont utiles, et je cours un exemple avec succès, mais je dois choisir une réponse :(, j'ai choisi réponse @ring parce qu'il a ajouté la dernière ligne, classe de l'auditeur.Merci les gars. – Abdullah

4

Vous utilisez un serveur Java EE glassfish et vous devez donc avoir accès au service EJB Timer.

Voici un exemple:

http://java-x.blogspot.com/2007/01/ejb-3-timer-service.html

J'ai utilisé la version précédente de l'API sur JBoss, et qui a bien fonctionné.

nous avons tendance actuellement à baisser Quartz dans la guerre et l'utiliser pour les exécutions chronométrées, il fonctionne également sur nos instances de développement de la jetée

3

Vous devez vérifier si la mise en œuvre du serveur utilisé des supports de cuisson des tâches comme celui-ci. S'il ne le supporte pas ou si vous souhaitez être indépendant du serveur, implémentez un ServletContextListener pour démarrer le démarrage de webapp et utilisez ScheduledExecutorService pour exécuter une tâche à un moment et à des intervalles donnés.

Voici un exemple de coup d'envoi de base:

public class Config implements ServletContextListener { 

    private ScheduledExecutorService scheduler; 

    public void contextInitialized(ServletContextEvent event) { 
     scheduler = Executors.newSingleThreadScheduledExecutor(); 
     scheduler.scheduleAtFixedRate(new Task(), millisToNext1000, 1, TimeUnit.DAYS); 
    } 

    public void contextDestroyed(ServletContextEvent event) { 
     scheduler.shutdown(); 
    } 

} 

Task implémente Callable et millisToNext1000 est le montant de Millis à 10h00 suivante. Vous pouvez utiliser Calendar ou JodaTime pour le calculer. En tant qu'alternative non standard Java, vous pouvez également envisager d'utiliser Quartz.

Questions connexes