[8.5.5.4 ou ultérieure]

Configuration des instances de service de contexte d'unité d'exécution

Vous pouvez configurer des instances ContextService pour capturer un contexte d'unité d'exécution géré et l'appliquer aux appels de méthodes d'interface spécifiées sur une unité d'exécution.

Pourquoi et quand exécuter cette tâche

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, le service ContextService fournit une méthode pour l'établissement d'un contexte d'unité d'exécution préalablement capturé sur des unités d'exécution non gérées, ainsi que des unités d'exécution gérées, par chevauchement des contextes d'unité d'exécution déjà en place.

Procédure

Activez le service de contexte d'unité d'exécution dans le fichier server.xml. Le service de contexte d'unité d'exécution est disponible sous la fonction <concurrent-1.0>.
<featureManager>
	<feature>concurrent-1.0</feature>
</featureManager>

Résultats

Une instance de service de contexte d'unité d'exécution par défaut (DefaultContextService) est créée par le serveur et configurée pour capturer et propager au moins classloaderContext, jeeMetadataContext et securityContext. Vous pouvez configurer la propagation de contexte d'unité d'exécution afin d'inclure les types de contexte d'unité d'exécution suivants :

classloaderContext
Met à disposition de la tâche le chargeur de classe du contexte de l'unité d'exécution de l'émetteur de la tâche. Référentiel Liberty[8.5.5.4 ou ultérieure]Si le chargeur de classe de contexte est sérialisé, il doit s'agir d'un chargeur de classe de contexte d'unité d'exécution de l'application. La sérialisation de chargeur de classe pour les bundles d'applications Web n'est pas pris en charge pour l'instant.
jeeMetadataContext
Met à la disposition de la tâche l'espace de nom du composant d'application qui a soumis la tâche.
securityContext
[8.5.5.4 ou ultérieure] Vous devez activer la fonction appSecurity-2.0 dans le fichier server.xml pour utiliser ce type de contexte d'unité d'exécution. Rendez le sujet d'appelant et le sujet d'appel de l'émetteur de la tâche disponibles pour celle-ci. Pour cela, connectez-vous avec le WSPrincipal de l'émetteur en utilisant une connexion JAAS. Pour plus de détails sur le type d'informations du sujet de l'émetteur qui ne figurent pas dans le contexte de sécurité, voir la section relative aux restrictions de la fonction concurrent-1.0.
Important : Des fournisseurs de contexte d'unité d'exécution supplémentaires peuvent être disponibles avec des fonction dans des produits empilés. L'attribut baseContextRef en option permet à une instance de service contextuel d'hériter de la configuration de contexte d'une autre instance de service contextuel.

Exemple

Injectez des instances de services de contexte d'unité d'exécution dans des composants d'application (à l'aide de @Resource) ou recherchez avec des références d'environnement de ressource (resource-env-ref).

  • Exemple de configuration dans le fichier server.xml :
    • Service de contexte d'unité d'exécution qui est enregistré dans JNDI sous le nom concurrent/threadContextSvc1, qui capture et propage jeeMetadataContext uniquement :
      <contextService id="threadContextSvc1" jndiName="concurrent/${id}">
      	<jeeMetadataContext/>
      </contextService>
    • Service de contexte d'unité d'exécution avec classloaderContext et securityContext :
      <contextService jndiName="concurrent/threadContextSvc2">
      	<classloaderContext/>
      	<securityContext/>
      </securityContext/>
    • Service de contexte d'unité d'exécution qui hérite jeeMetadataContext de threadContextSvc1 et ajoute securityContext :
      <contextService jndiName="concurrent/threadContextSvc3" 
      baseContextRef="threadContextSvc1">
      	<securityContext>
      </contextService>
  • Exemple qui utilise @Resource :
    @Resource(lookup="concurrent/threadContextSvc1")
    ContextService threadContextSvc1;
    
    ...
    
    Callable<Integer>  processSalesOrderCompletion = new Callable<Integer>() { 
    	public Integer call() throws Exception { 
    	   DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		 ...update various database tables 
    		 return isSuccessful; 
    	} 
    };  
    // capture thread context of current application component
    execProps = Collections.singletonMap(ManagedTask.TRANSACTION, 
    ManagedTask.USE_TRANSACTION_OF_EXECUTION_THREAD);
    processSalesOrderCompletion = (Callable<Boolean>)
     threadContextSvc1.createContextualProxy(processSaleCompletion, execProps, 
    Callable.class);
    
    //later from a different application component
    tran.begin();
    ...
    successful = processSalesOrderCompletion.call();
    if (successful)
      tran.commit();
    else
      tran.rollback();
  • Exemple qui utilise resource-env-ref dans le fichier web.xml :
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadContextSvc3</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ContextService</resource-
    	env-ref-type>
    </resource-env-ref>
  • Exemple de recherche qui utilise la référence d'environnement de ressource de ressource :
    ContextService threadContextSvc3 = 
    (ContextService) new InitialContext().lookup("java:comp/env/concurrent/threadContextSvc3");
    Runnable updateAndGetNextFromDatabase = threadContextSvc3.createContextualProxy
    (new Runnable() {
    		public void run() {
    		 DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
        ... update the database and get next item to process
      }
    }, Runnable.class);
    barrier = new CyclicBarrier(3, updateAndGetNextFromDatabase);
    ...

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_contextservice
Nom du fichier : twlp_config_contextservice.html