Méthodes de gestion des tâches à l'aide d'un planificateur
Le planificateur fournit plusieurs méthodes de gestion des tâches.
- suspend()
- Permet d'interrompre une tâche. La tâche ne s'exécute que lors de sa reprise.
- resume()
- Permet la reprise d'une tâche précédemment interrompue.
- cancel()
- Permet d'annuler une tâche. La tâche n'est pas exécutée et ne peut pas être reprise.
- purge()
- Permet la suppression définitive d'une tâche du magasin persistant.
- getStatus()
- Renvoie l'état en cours de la tâche.
//Création de la tâche.
TaskInfo taskInfo = ...
TaskStatus status = scheduler.create(taskInfo);
//Obtention de l'ID tâche
String taskId = status.getTaskId();
//Annulation de la tâche. Spécifiez l'indicateur purgeAlso de sorte que la tâche ne reste pas dans le magasin persistant
scheduler.cancel(taskId,true);
set jndiName sched/MyScheduler
# Mapper le nom JNDI au nom mbean. Le nom mbean est
# formé en remplaçant le caractère / dans le nom jndi par le caractère . et en le faisant précéder de
# Scheduler_
regsub -all {/} $jndiName "." jndiName
set mbeanName Scheduler_$jndiName
puts "Looking-up Scheduler MBean $mbeanName"
set sched [$AdminControl queryNames WebSphere:*,type=WASScheduler,name=$mbeanName]
puts $sched
# Obtenir le format ObjectName du MBean Scheduler
set schedO [$AdminControl makeObjectName $sched]
# Créer un objet TaskInfo…
# (une partie du code est exclue…)
set params [java::new {java.lang.Object[]} 1]
$params set 0 $taskInfo
set sigs [java::new {java.lang.String[]} 1]
$sigs set 0 com.ibm.websphere.scheduler.TaskInfo
set taskStatus [java::cast com.ibm.websphere.scheduler.TaskStatus [$AdminControl invoke_jmx $schedO
create $params $sigs]]
set taskID [$taskStatus getTaskId]
puts "La tâche a été créée. TaskID= $taskID"
# Annuler la tâche à l'aide de l'ID tâche à partir de l'objet TaskStatus renvoyé pendant l'opération create.
set params [java::new {java.lang.Object[]} 1]
$params set 0 false
set sigs [java::new {java.lang.String[]} 1]
$sigs set 0 java.lang.boolean
set taskStatus [java::cast com.ibm.websphere.scheduler.TaskStatus [$AdminControl invoke_jmx $schedO
cancel $params $sigs]]
Transactionnalité. Toutes les méthodes de l'API du planificateur sont transactionnelles. En présence d'un contexte transactionnel global, celui-ci sert à exécuter l'opération. Si une exception imprévue est émise, la transaction est marquée pour être annulée et l'appelant doit la gérer de façon appropriée. Si une exception prévue ou déclarée est émise, la transaction reste intacte et l'appelant doit choisir d'annuler ou de valider la transaction. Si la transaction est annulée à un moment donné, toutes les opérations du planificateur effectuées dans le cadre de la transaction sont également annulées.
En présence d'un contexte transactionnel local, celui-ci est interrompu et une nouveau contexte transactionnel global est lancé. De même, si aucun contexte transactionnel n'est actif, un contexte transactionnel global est lancé. Dans les deux cas, si une exception imprévue est émise, la transaction est annulée. Si une exception déclarée est émise, la transaction est validée.
Si une autre unité d'exécution modifie simultanément la tâche en question, une exception TaskPending est émise, car les planificateurs verrouillent la base de données avec optimisme. L'application appelante peut ensuite relancer l'opération.
Les fonctions de gestion des tâches peuvent se bloquer si la tâche est en cours d'exécution. Etant donné que le planificateur garantit que chaque tâche sera exécutée une seule fois, la tâche doit être verrouillée pendant la durée d'une tâche en cours d'exécution. De la même façon, si une tâche est modifiée à l'aide d'une des fonctions de gestion mais que la transaction globale n'est pas validée, toutes les autres fonctions de gestion émises par une autre transaction pour cette tâche seront bloquées.
La méthode TaskHandler.process() d'un bean de session sans état peut changer son propre état. Toutefois, la tâche doit être exécutée avec la même transaction que le planificateur. Par conséquent, une tâche en cours d'exécution ne peut se modifier elle-même que si elle utilise les types de transactions gérées par conteneur Requise ou Obligatoire. Si le type de transaction Requiert un nouvel élément est spécifié sur la méthode process(), toutes les fonctions de gestion se bloquent.
Toutes les méthodes définies par l'API du planificateur sont décrites dans la documentation sur les API.