Comment faire pour démarrer un EJB de la Minuterie sur le déploiement?
J'ai besoin de créer un intervalle de Minuterie qui est configuré pour s'exécuter une fois par semaine automatiquement. Je ne veux pas pour commencer, en fonction de l'entrée utilisateur, mais je veux qu'il soit créé lorsque l'application est déployée sur le serveur. Tous les exemples que j'ai vu a une autre classe de départ de la minuterie. Je ne veux pas utiliser un message driven bean pour créer le minuteur, parce que la vérification devrait simplement des requêtes sur une base de données pour une période de temps donnée et n'est pas basé sur des actions qui, d'envoyer des messages.
J'ai inclus un exemple d'une Minuterie. Dans l'exemple ci-dessous, le compte à rebours faut tirer toutes les 10 minutes. Comme un test, je veux la minuterie de feu toutes les 10 minutes afin que je puisse tester la minuterie.
@Stateless
public class TimerTest implements
TimerTestLocal, TimerTestRemote{
@Resource
private TimerService timerService;
private Logger log = Logger.getLogger(TimerTest.class);
private long interval = 1000 * 60 * 10;
private static String TIMER_NAME = "AuditTimer";
public void scheduleTimer() throws NamingException {
//TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
//cal.set(Calendar.HOUR_OF_DAY, 23);//run at 11pm
//cal.set(Calendar.MINUTE, 00);
//cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm");
log.debug("schedule for: " + sdf.format(cal.getTime()));
timerService.createTimer(cal.getTime(), interval, TIMER_NAME);
}
public void cancelTimer() {
for(Object obj : timerService.getTimers())
{
Timer timer = (Timer)obj;
if(timer.getInfo().equals(TIMER_NAME))
timer.cancel();
}
}
@Timeout
public void timerEvent(Timer timer) {
log.debug("timer fired");
}
}
Si il ya une manière que je peux commencer cette minuterie lorsque l'application est déployée? Je ne pense pas que c'est une bonne idée de la création de la Minuterie de @PostConstruct méthode en raison de la classe de chargeuses sur le serveur.
OriginalL'auteur scheibk | 2009-08-12
Vous devez vous connecter pour publier un commentaire.
Le chemin que j'ai fait de minuteurs dans le passé est de créer un contexte auditeur dans le web.xml pour configurer la minuterie.
De cette façon vous pouvez vous assurer qu'il est démarré avec le conteneur, et d'arrêter proprement lorsque l'application est prise vers le bas.
OriginalL'auteur Jesse
Si votre projet peut utiliser jee6 /ejb3.1 il existe une bien meilleure solution à ce problème.
http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html
Par l'aide de la nouvelle annotation @Schedule vous disposez d'un vaste contrôle sur le moment et la façon dont souvent un délai d'attente de la méthode sera appelée. Le gros avantage: vous n'avez plus à démarrer le compte à rebours "de l'extérieur".
Oracle écrit:
OriginalL'auteur seafoxx
Je ne sais pas si l'utilisation de l'contextListener pour démarrer la minuterie peut travailler. À partir de cet article, comment utiliser les EJb 3 timer dans un cluster weblogic 10, il semble que vous risquez de rencontrer quelques problèmes dans weblogic 10.3.2.
OriginalL'auteur Mike