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 Servicekontextes für die Erfassung und Weitergabe des Threadkontextes.

[17.0.0.4 und höher]Parallelitätsrichtlinien konfigurieren parallelitätsrelevantes Verhalten und Einschränkungen für verwaltete terminierte Steuerprogramme, wie z. B. maximale Parallelität und maximale Warteschlangengröße. Standardmäßig verwenden verwaltete, terminierte Steuerprogramme eine Standardinstanz (defaultConcurrencyPolicy) mit unbegrenzten Einschränkungen mit einem concurrencyPolicy-Konfigurationselement. Diese Standardparallelitätsrichtlinie wird verwendet, wenn Sie ein verwaltetes terminiertes Steuerprogramm konfigurieren, ohne ein bestimmtes concurrencyPolicy-Element als verschachteltes Element zu referenzieren oder es direkt als solches zu konfigurieren. Wenn mehrere verwaltete terminierte Steuerprogramme oder andere Konfigurationselemente dasselbe concurrencyPolicy-Element referenzieren, gelten die Einschränkungen in dieser Richtlinie für alle diese verwalteten terminierten Steuerprogramminstanzen und weitere konfigurierte Ressourcen. Sie können auch ein verwaltetes terminiertes Steuerprogramm mit einer Parallelitätsrichtlinie für Tasks mit langer Laufzeit konfigurieren, das für Tasks gilt, deren Ausführungseigenschaft LONGRUNNING_HINT auf true gesetzt ist. Die über das concurrencyPolicy-Element und das concurrencyPolicy-Element für lange Laufzeit angegebene Konfiguration gilt für Tasks, die übergeben wurden, um so schnell wie möglich ausgeführt zu werden. Die Konfiguration gilt nicht für terminierte Tasks.

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, da <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 file:
    <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

Dateiname: twlp_config_scheduledexecutor.html