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 qui recherche la fabrique d'unités d'exécution gérée par défaut :
    ManagedThreadFactory threadFactory =
        (ManagedThreadFactory) new InitialContext().lookup(
            "java:comp/DefaultManagedThreadFactory");
    // Create an executor that always runs tasks with the thread context of the managed thread factory
    ExecutorService executor = new ThreadPoolExecutor(
        coreThreads, maxThreads, keepAliveTime, TimeUnit.MINUTES,
        new ArrayBlockingQueue<Runnable>(workRequestQueueSize),
        threadFactory, new ThreadPoolExecutor.AbortPolicy());
  • 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() {
          // java:comp lookup is possible because <jeeMetadataContext> is configured
        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



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