Configuration des instances ManagedExecutorService

Vous pouvez configurer des instances ManagedExecutorService pour qu'elles exécutent des tâches asynchrones avec le contexte d'unités d'exécution spécifié. 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, ManagedExecutorService étend JSE ExecutorService pour permettre l'exécution de tâches asynchrones dans un environnement de serveur d'application. Vous pouvez également configurer ManagedExecutorService pour propager divers contextes d'unités d'exécution pertinents aux applications Java EE dans l'unité d'exécution de la tâche asynchrone.

Pourquoi et quand exécuter cette tâche

ManagedExecutorService est disponible sous la fonction <concurrent-1.0> et activé dans le fichier server.xml comme suit :
<featureManager>
	<feature>concurrent-1.0</feature>
</featureManager>

La propagation du contexte dans l'unité d'exécution d'une tâche qui est exécutée par ManagedExecutorService est gérée par le service de contexte. 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 ManagedExecutorService 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. Reportez-vous à la rubrique Configuring thread context service instances pour plus d'informations.

Une instance d'exécuteur géré par défaut (DefaultManagedExecutorService) est disponible dans java:comp/DefaultManagedExecutorService et utilise l'instance de service de contexte par défaut pour la capture de contexte d'unités d'exécution et la propagation.

Avertissement : Une limitation actuelle dans la version Alpha peut empêcher l'exécution des tâches soumises jusqu'à l'appel de Future.get.

Procédure

Exemple de configuration dans le fichier server.xml :

Exemple

Des instances de service de programme d'exécution gérées peuvent être injectées dans des composants d'application (avec @Resource) ou consultées via des références d'environnement de ressource (resource-env-ref). Indépendamment de la manière dont l'instance est obtenue, vous pouvez l'utiliser de manière interchangeable en tant que javax.enterprise.concurrent.ManagedExecutorService ou sa superclasse java.util.concurrent.ExecutorSerivce.

  • Exemple utilisant @Resource pour injection en java.util.concurrent.ExecutorService :
    @Resource(lookup="concurrent/execSvc1")
    ExecutorService execSvc1;
    
    ...
    
    // soumission de la tâche à exécuter 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    	public Integer call() throws Exception { 
    	  // la consultation java:comp est possible car <jeeMetadataContext> est configuré 
    		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		... make updates to the database 
    		return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • Exemple utilisant @Resource pour injection en javax.enterprise.concurrent.ManagedExecutorService :
    @Resource(lookup="concurrent/execSvc1")
    ManagedExecutorService execSvc1;
    
    ...
    
    // soumission de la tâche à exécuter 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    	public Integer call() throws Exception { 
    	  // la consultation java:comp est possible car <jeeMetadataContext> est configuré 
    		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		... make updates to the database 
    		return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • Exemple <resource-env-ref> pour java.util.concurrent.ExecutorService dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Exemple <resource-env-ref> pour javax.enterprise.concurrent.ManagedExecutorService dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Exemple de consultation qui utilise une référence d'environnement de ressource :
    ExecutorService execSvc2 = 
        (ExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));
  • Exemple de consultation qui utilise une référence d'environnement de ressource et transtypages dans ManagedExecutorService :
    ManagedExecutorService execSvc2 = 
        (ManagedExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));

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

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_config_managedexecutor
Nom du fichier : twlp_config_managedexecutor.html