2011-09-05 3 views
0

J'ai un temporisateur Java EE 6 - que je programme avec une ScheduleExpression mais je veux aussi avoir la possibilité de l'exécuter "maintenant", par exemple. cliquez sur le bouton. Comment puis-je atteindre cet objectif?Exécuter le temporisateur Java EE 6 maintenant

Exemple de comment je crée la minuterie:

ScheduleExpression schedExp = new ScheduleExpression(); 
    schedExp.start(jobInfo.getStartDate()); 
    schedExp.end(jobInfo.getEndDate()); 
    schedExp.second(jobInfo.getSecond()); 
    schedExp.minute(jobInfo.getMinute()); 
    schedExp.hour(jobInfo.getHour()); 
    schedExp.dayOfMonth(jobInfo.getDayOfMonth()); 
    schedExp.month(jobInfo.getMonth()); 
    schedExp.year(jobInfo.getYear()); 
    schedExp.dayOfWeek(jobInfo.getDayOfWeek()); 

TimerConfig timerConf = new TimerConfig(jobInfo, false); 
Timer newTimer = timerService.createCalendarTimer(schedExp, timerConf); 

Maintenant, je voudrais faire quelque chose comme ceci:

timerService.runNow(timer); 

Malheureusement, il n'y a pas de méthode runNow.

+0

Vous ne pouvez pas créer une nouvelle minuterie avec l'heure actuelle, elle expirera donc immédiatement et peut annuler la précédente. –

Répondre

0

Je ne pense pas que ce soit possible mais je doute que ce soit nécessaire si vous faites le reste correctement.

Dites que vous pouvez mettre en œuvre votre méthode de délai d'attente comme ceci:

@Timeout 
public void doTimeout(Timer timer) { 
    logic.doMyTimeout(); 
} 

Alors ce que vous devez faire lorsque le bouton correspondant est cliqué est d'appeler logic.doMyTimeout(); aussi bien.

Y a-t-il une raison de ne pas utiliser cette approche?

+1

Je pense qu'il peut y avoir une raison valable à cela. Dans l'application que je développe, nous avons implémenté exactement la même chose, mais nous avons utilisé Quartz. L'utilisation est que vous voulez découvrir dynamiquement quels minuteurs (déclencheurs dans Quartz) il y a et exécutez ceux-exactement comment ils sont configurés pour être exécutés. –

+0

C'est un cas valide, mais les 'Timers' de l'EJB ne semblent pas capables de gérer cela, donc il faut construire une solution de contournement ou utiliser autre chose comme' Quartz' comme vous l'avez fait. –

+0

En effet, malheureusement, les minuteurs EJB ne peuvent pas être interrogés. L'information est là dans le conteneur, mais vous avez besoin de hacks et de trucs réfléchissants pour y arriver, ce qui n'est bien sûr pas recommandé. –