Configuration de programmes d'exécution d'éléments planifiés gérés

Vous pouvez configurer des instances ManagedScheduledExecutorService instances pour planifier des tâches asynchrones à exécuter avec le contexte d'unité d'exécution de l'unité d'exécution à partir de laquelle la tâche est planifiée. Il est recommandé pour les applications Java™ EE d'éviter qu'elles ne gèrent directement leurs propres unités d'exécution. Par conséquent, ManagedScheduledExecutorService étend JSE ExecutorService pour permettre la planification de l'exécution de tâches asynchrones dans un environnement de serveur d'application. Vous pouvez également configurer ManagedScheduledExecutorService pour capturer un contexte d'unité d'exécution pertinent pour les applications Java EE et les propager à l'unité d'exécution de la tâche planifiée.

Pourquoi et quand exécuter cette tâche

Important : Dans Liberty, les programmes d'exécution d'éléments planifiés gérés ne disposent pas de leur propres pools d'unités d'exécution. Les tâches soumises aux instances de programme d'exécution d'éléments planifiés gérées s'exécutent dans le pool d'unités d'exécution Liberty commun.
La fonction <concurrent-1.0> du programme d'exécution d'éléments planifiés gérés est activée dans le fichier server.xml comme suit :
<featureManager>
	<feature>concurrent-1.0</feature>
</featureManager>

La capture et la propagation de contexte d'unité d'exécution sont gérées par le service contextuel. Une instance par défaut du service de contexte (DefaultContextService) est créée par le serveur et configurée pour propager au moins classloaderContext, jeeMetadataContext et securityContext. Cette instance de service de contexte par défaut est utilisée si un ManagedScheduledExecutorService est créé sans référence à une instance de service de contexte spécifique ou sans configuration d'une instance de service de contexte directement. Pour plus d'informations sur les instances de service contextuel, consultez la rubrique relative à la configuration des instances de service de contexte d'unité d'exécution.

Une instance de programme d'exécution planifiée géré (DefaultManagedScheduledExecutorService) est disponible en tant que java:comp/DefaultManagedScheduledExecutorService et elle utilise l'instance de service de contexte par défaut pour la capture et la propagation du contexte d'unité d'exécution.

[17.0.0.4 and later]Les règles d'accès simultané configurent des comportements et des constraintes liés aux accès simultanés qui s'appliquent à des programmes d'exécution planifiés gérés, par exemple, le nombre maximal d'accès simultanés et la taille de file d'attente maximale. Par défaut, les programmes d'exécution planifiés gérés utilisent une instance par défaut d'élément de configuration concurrencyPolicy, defaultConcurrencyPolicy, dont les contraintes sont illimitées. Cette règle d'accès simultané par défaut est utilisée si vous configurez un programme d'exécution d'éléments planifiés gérés sans faire référence à ou configurer directement un élément concurrencyPolicy spécifique comme élément imbriqué. Si plusieurs programmes d'exécution planifiés gérés ou autres éléments de configuration font référence au même élément concurrencyPolicy, les contraintes de cette règle s'appliquent à toutes les instances de programme d'exécution géré et à d'autres ressources configurées. Vous pouvez également configurer un programme d'exécution d'éléments planifiés gérés avec une règle d'accès simultané pour des tâches à exécution longue, qui s'applique aux tâches dont la propriété d'exécution LONGRUNNING_HINT a pour valeur true. La configuration qui est spécifiée dans l'élément concurrencyPolicy et l'élément concurrencyPolicy à exécution longue s'appliquent aux tâches qui sont soumises pour être exécutées le plus vite possible. La configuration ne s'applique pas aux tâches planifiées.

Procédure

Exemple de configuration dans le fichier server.xml :

Exemple

Injectez des programmes d'exécution d'éléments planifiés gérés dans des composants d'application (à l'aide de @Resource) ou recherchez avec des références d'environnement de ressource (resource-env-ref). Indépendamment de la manière dont l'instance est obtenue, elle peut être utilisée de manière interchangeable en tant que javax.enterprise.concurrent.ManagedScheduledExecutorService ou l'une des superclasses suivantes : java.util.concurrent.ScheduledExecutorSerivce, java.util.concurrent.ExecutorService, javax.enterprise.concurrent.ManagedExecutorService.

  • Exemple qui recherche le programme d'exécution d'éléments planifiés gérés par défaut :
    ManagedScheduledExecutorService executor = 
        (ManagedScheduledExecutorService) new InitialContext().lookup(
            "java:comp/DefaultManagedScheduledExecutorService");
    executor.schedule(beginSalePrices, 12, TimeUnit.HOURS);
    executor.schedule(restoreNormalPrices, 60, TimeUnit.HOURS);
  • Exemple utilisant @Resource pour injection en java.util.concurrent.ScheduledExecutorService :
    @Resource(lookup="concurrent/scheduledExecutor2")
    ScheduledExecutorService executor;
    ...
    
    // schedule a task to run every half hour from now 
    Runnable updateSalesReport = new Runnable() {
    public void run() throws Exception {
    // java:comp lookup is possible because <jeeMetadataContext> is configured
    DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    ... query and update various database tables
    }
    };
    ScheduledFuture<?> future = executor.scheduleAtFixedRate(updateSalesReport, 0, 30, TimeUnit.MINUTES);
  • Exemple utilisant @Resource pour injection en javax.enterprise.concurrent.ManagedScheduledExecutorService :
    @Resource(lookup="concurrent/scheduledExecutor2")
    ManagedScheduledExecutorService executor;
    
    ... usage is same as previous example
  • Exemple <resource-env-ref>; pour java.util.concurrent.ScheduledExecutorService dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/scheduledExecutor1</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ScheduledExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Exemple <resource-env-ref> pour javax.enterprise.concurrent.ManagedScheduledExecutorService dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/scheduledExecutor2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedScheduledExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Exemple de consultation qui utilise une référence d'environnement de ressource :
    ManagedScheduledExecutorService executor = 
    		 (ManagedScheduledExecutorService) new InitialContext().lookup("java:comp/env/concurrent/scheduledExecutor2");
    executor.schedule(payrollTask, fridaysAtMidnightTrigger);

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_config_scheduledexecutor.html