![[8.5.5.4 oder höher]](../ng_v8554.gif)
Verwaltete geplante Steuerprogramme konfigurieren
Sie können ManagedScheduledExecutorService-Instanzen so konfigurieren, dass sie asynchrone Tasks für die Ausführungmit dem Threadkontext des Threads planen, über den die Task geplant 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 geplanten Task weitergibt.
Informationen zu diesem Vorgang
<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.
Vorgehensweise
Beispielkonfiguration in der Datei server.xml:
Beispiel
Sie können verwaltete geplante Steuerprogramme in Anwendungskomponenten injizieren (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, 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);