Identification de tâches en cours d'exécution
Lorsqu'une tâche est en cours d'exécution, l'enregistrement dans la base de données des tâches est verrouillé jusqu'à ce que la tâche soit terminée. Déterminez si une tâche est en cours d'exécution ou non.
Pourquoi et quand exécuter cette tâche
Avant la version 6.0.2, toutes les tâches s'exécutaient dans une seule transaction globale. Ce processus empêchait non seulement la tâche de s'exécuter plus d'une fois avec succès, mais il bloquait également toutes les tentatives de lecture de l'état de la tâche, puisque chaque tâche utilisait un isolement de transaction validé à la lecture.
- NotificationSink
Un EJB NotificationSink peut être défini sur la tâche à l'aide de la méthode setNotificationSink sur l'objet TaskInfo. Le bean NotificationSink peut alors consigner le cycle de vie de la tâche dans un enregistrement de base de données distinct dans une table personnalisée. Ceci aboutit alors à un journal historique de la tâche qui peut être interrogé indépendamment du planificateur. Cette solution s'applique à toutes les versions du service Scheduler. Pour plus d'informations, reportez-vous à la rubrique Réception de notifications d'un planificateur.
- Exécution différée et lecture non validée
La version 6.0.2 et ultérieure ajoute deux nouveaux comportements qui permettent au planificateur de trouver et d'extraire des méthodes d'API, telles que getTask, getTaskStatus ou findTasksByName, pour voir l'état courant de la tâche sans bloquer. Pour voir l'état courant de la tâche, ainsi que l'état d'exécution non validé, procédez comme suit :