Steuerprogramme für verwaltete Tasks konfigurieren

Sie können ManagedExecutorService-Instanzen konfigurieren, um asynchrone Tasks mit dem angegebenen Threadkontext auszuführen. Für Java™ EE-Anwendungen hat es sich bewährt, die direkte Verwaltung der eigenen Threads zu vermeiden. Daher erweitert der ManagedExecutorService den JSE ExecutorService dahingehend, dass dieser eine Methode zum Planen asynchroner Tasks in einer Anwendungsserverumgebung startet. Sie können den ManagedExecutorService auch so konfigurieren, dass er verschiedene Threadkontexte, die für Java EE-Anwendungen relevant sind, an den Thread der asynchronen Task weitergibt.

Informationen zu diesem Vorgang

Wichtig: In Liberty haben Steuerprogramme für verwaltete Tasks keine eigenen Thread-Pools. Tasks, die an Instanzen eines Steuerprogramms für verwaltete Tasks übergeben werden, werden im allgemeinen Thread-Pool des Liberty-Steuerprogramms ausgeführt.
Der ManagedExecutorService ist unter dem Feature <concurrent-1.0> verfügbar und wird in der Datei server.xml wie folgt aktiviert:
<featureManager>
		<feature>concurrent-1.0</feature>
</featureManager>

Die Weitergabe von Kontext an den Thread einer Task, die vom ManagedExecutorService ausgeführt wird, wird vom Kontextservice gesteuert. Eine Standardinstanz des Kontextservice (DefaultContextService) wird vom Server erstellt und so konfiguriert, dass mindestens classloaderContext, jeeMetadataContext und securityContext weitergegeben werden. Diese Standardinstanz des Kontextservice wird verwendet, wenn ein ManagedExecutorService erstellt wird, der nicht auf eine bestimmte Kontextserviceinstanz verweist, oder wenn eine Kontextserviceinstanz darin direkt konfiguriert wird. Weitere Informationen zu Kontextserviceinstanzen finden Sie im Abschnitt zur Konfiguration von Instanzen des Threadkontextservice.

Eine Standardinstanz von ManagedExecutorService (DefaultManagedExecutorService) ist als java:comp/DefaultManagedExecutorService verfügbar. Sie verwendet die Standardkontextserviceinstanz zum Erfassen und Weitergeben des Threadkontexts.

Vorgehensweise

Beispielkonfiguration in der Datei server.xml:

Beispiel

ManagedExecutorService-Instanzen können in Anwendungskomponenten injiziert werden (mit @Resource) oder sie können über Ressourcenumgebungsreferenzen (resource-env-ref) ermittelt werden. Unabhängig davon, wie Sie die Instanz erhalten, können Sie sie abwechselnd als javax.enterprise.concurrent.ManagedExecutorService oder als Superklasse java.util.concurrent.ExecutorSerivce verwenden.

  • Beispiel, das das verwaltete Standardsteuerprogramm sucht:
    ManagedExecutorService executor = 
        (ManagedExecutorService) new InitialContext().lookup(
            "java:comp/DefaultManagedExecutorService");
    executor.submit(doSomethingInParallel);
  • Beispiel, in dem @Resource als java.util.concurrent.ExecutorService injiziert wird:
    @Resource(lookup="concurrent/execSvc1")
    ExecutorService execSvc1;
    
    ...
    
    // Task für Ausführung übergeben
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    		public Integer call() throws Exception { 
    	     // java:comp-Suche ist möglich, weil <jeeMetadataContext> konfiguriert ist
    				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();
  • Beispiel, in dem @Resource als javax.enterprise.concurrent.ManagedExecutorService injiziert wird:
    @Resource(lookup="concurrent/execSvc1")
    ManagedExecutorService execSvc1;
    
    ...
    
    // Task für Ausführung übergeben
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    		public Integer call() throws Exception { 
    	     // java:comp-Suche ist möglich, weil <jeeMetadataContext> konfiguriert ist
    				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();
  • Beispiel für die Verwendung von <resource-env-ref> für java.util.concurrent.ExecutorService in der Datei 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>
  • Beispielsuche, die eine Ressourcenumgebungsreferenz verwendet:
    ExecutorService execSvc2 = 
        (ExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));
  • Beispiel für die Verwendung von <resource-env-ref> für javax.enterprise.concurrent.ManagedExecutorService in der Datei web.xml file:
    <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>
  • Beispielsuche mit Verwendung einer Ressourcenumgebungsreferenz und Umsetzung in ManagedExecutorService:
    ManagedExecutorService execSvc2 = 
        (ManagedExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));

Symbol das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 01.12.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_config_managedexecutor
Dateiname: twlp_config_managedexecutor.html