[8.5.5.4 ou ultérieure]

Configuration de fabriques d'unités d'exécution gérées

Vous pouvez créer des instances ManagedThreadFactory pour créer de nouvelles unités d'exécution qui s'exécutent avec un contexte d'unité d'exécution de l'unité d'exécution depuis laquelle la fabrique d'unités d'exécution gérée est recherchée ou injecté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, ManagedThreadFactory étend JSE ThreadFactory pour permettre la création d'unités d'exécution gérées dans un environnement de serveur d'application. Vous pouvez également configurer ManagedThreadFactory pour capturer un contexte d'unité d'exécution pertinent pour les applications Java EE et les propager à la nouvelle unité d'exécution.

Pourquoi et quand exécuter cette tâche

La fabrique d'unités d'exécution gérée est disponible sous la fonction <concurrent-1.0> et 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 ManagedThreadFactory n'indique pas un service de contexte. 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 par défaut de ManagedThreadFactory (DefaultManagedThreadFactory) est instance en tant que java:comp/DefaultManagedThreadFactory et elle utilise l'instance de service contextuel par défaut pour la capture et la propagation de contexte d'unité d'exécution.

Procédure

Exemple de configuration dans le fichier server.xml :

Exemple

Des fabriques d'unités 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, elle peut être utilisée de manière interchangeable en tant que javax.enterprise.concurrent.ManagedThreadFactory ou java.util.concurrent.ThreadFactory.

  • Exemple utilisant @Resource pour injection en asjava.util.concurrent.ThreadFactory: :
    @Resource(lookup="concurrent/threadFactory2")
    ThreadFactory threadFactory
    ...
    
    // create a new thread
    Thread dailySalesAnalysisTask = threadFactory.newThread(new Runnable() {
      public void run() {
          // la consultation java:comp est possible car <jeeMetadataContext> est configuré
        DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
        ... analyze the data
      }
    });
    dailySalesAnalysisTask.start();
  • Exemple utilisant @Resource pour injection en javax.enterprise.concurrent.ManagedThreadFactory :
    @Resource(lookup="concurrent/threadFactory2")
    ManagedThreadFactory threadFactory;
    
    ... usage is same as previous example
  • Exemple <resource-env-ref> pour java.util.concurrent.ThreadFactory dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadFactory1</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ThreadFactory</resource-env-ref-type>
    </resource-env-ref>
  • Exemple <resource-env-ref> pour javax.enterprise.concurrent.ManagedThreadFactory dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadFactory2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedThreadFactory</resource-
    env-ref-type>
    </resource-env-ref>
  • Exemple de consultation qui utilise une référence d'environnement de ressource :
    ManagedThreadFactory threadFactory =
      (ManagedThreadFactory) new InitialContext().lookup("java:comp/env/concurrent/threadFactory");
    // Create a scheduled executor that always runs tasks with the thread context of the managed thread factory
    ScheduledExecutorService executor = Executors.newScheduledThreadPool(5, threadFactory);
    ... use executor to schedule tasks from any thread

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_threadfactory
Nom du fichier : twlp_config_threadfactory.html