Steuerprogramme für verwaltete, terminierte Tasks konfigurieren

Sie können ManagedScheduledExecutorService-Instanzen so konfigurieren, dass sie asynchrone Tasks für die Ausführung mit dem Threadkontext des Threads terminieren, über den die Task terminiert wird. Für Java™ EE-Anwendungen hat es sich bewährt, die direkte Verwaltung der eigenen Threads zu vermeiden. Daher erweitert der ManagedScheduledExecutorService den JSE ExecutorService dahingehend, dass dieser eine Methode zum Planen asynchroner Tasks in einer Anwendungsserverumgebung bereitstellt. Sie können den ManagedScheduledExecutorService auch so konfigurieren, dass dieser einen Threadkontext, der für Java EE-Anwendungen relevant ist, erfasst und an den Thread der terminierten Task weitergibt.

Informationen zu diesem Vorgang

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

Die Erfassung und Weitergabe des Threadkontexts 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 ManagedScheduledExecutorService 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 ManagedScheduledExecutorService (DefaultManagedScheduledExecutorService) ist als java:comp/DefaultManagedScheduledExecutorService verfügbar. Sie verwendet die Standardinstanz des Servicekontexts für die Erfassung und Weitergabe des Threadkontexts.

Vorgehensweise

Beispielkonfiguration in der Datei server.xml:

Beispiel

Sie können Steuerprogramme für verwaltete, terminierte Tasks in Anwendungskomponenten einfügen (mit @Resource) oder mit Ressourcenumgebungsreferenzen (resource-env-ref) suchen. Unabhängig davon, wie die Instanz angefordert wird, kann sie abwechselnd als javax.enterprise.concurrent.ManagedScheduledExecutorService oder eine der folgenden Superklassen verwendet werden: java.util.concurrent.ScheduledExecutorSerivce, java.util.concurrent.ExecutorService, javax.enterprise.concurrent.ManagedExecutorService.

  • Beispiel, das das Steuerprogramm für verwaltete, terminierte Tasks sucht:
    ManagedScheduledExecutorService executor =     (ManagedScheduledExecutorService) new InitialContext().lookup(
            "java:comp/DefaultManagedScheduledExecutorService");
    executor.schedule(beginSalePrices, 12, TimeUnit.HOURS);
    executor.schedule(restoreNormalPrices, 60, TimeUnit.HOURS);
  • Beispiel, in dem @Resource für die Injektion als java.util.concurrent.ScheduledExecutorService verwendet wird:
    @Resource(lookup="concurrent/scheduledExecutor2")
    ScheduledExecutorService executor;
    ...
    
    // eine Task planen, die ab sofort halbstündlich ausgeführt werden soll
    Runnable updateSalesReport = new Runnable() {
    public void run() throws Exception {
       // java:comp-Suche ist möglich, weil <jeeMetadataContext> konfiguriert ist
    		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    ... query and update various database tables
    }
    };
    ScheduledFuture<?> future = executor.scheduleAtFixedRate(updateSalesReport, 0, 30, TimeUnit.MINUTES);
  • Beispiel, in dem @Resource für die Injektion als javax.enterprise.concurrent.ManagedScheduledExecutorService verwendet wird:
    @Resource(lookup="concurrent/scheduledExecutor2")
    ManagedScheduledExecutorService executor;
    
    ... usage is same as previous example
  • Beispiel für die Verwendung von <resource-env-ref> für java.util.concurrent.ScheduledExecutorService in der Datei web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/scheduledExecutor1</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ScheduledExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Beispiel für die Verwendung von <resource-env-ref> für javax.enterprise.concurrent.ManagedScheduledExecutorService in der Datei web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/scheduledExecutor2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedScheduledExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Beispielsuche, die eine Ressourcenumgebungsreferenz verwendet:
    ManagedScheduledExecutorService executor = 
    		 (ManagedScheduledExecutorService) new InitialContext().lookup("java:comp/env/concurrent/scheduledExecutor2");
    executor.schedule(payrollTask, fridaysAtMidnightTrigger);

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-nd-mp&topic=twlp_config_scheduledexecutor
Dateiname: twlp_config_scheduledexecutor.html