Configuration de programmes d'exécution 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 planifiée 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 planifiée 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 planifié géré 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.

Procédure

Exemple de configuration dans le fichier server.xml :

Exemple

Injectez des programmes d'exécution planifiée 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 planifié géré 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



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_config_scheduledexecutor
Nom du fichier : twlp_config_scheduledexecutor.html