[8.5.5.4 oder höher]

Verwaltete Thread-Factorys konfigurieren

Sie können ManagedThreadFactory-Instanzen konfigurieren, um neue Threads zu erstellen, die mit einem Threadkontext des Threads ausgeführt werden, über den die verwaltete Thread-Factory gesucht oder injiziert wird. Für Java™-EE-Anwendungen hat es sich bewährt, die direkte Verwaltung der eigenen Threads zu vermeiden. Daher erweitert die ManagedThreadFactory die JSE ThreadFactory dahingehend, dass diese eine Methode zum Erstellen verwalteter Threads in einer Anwendungsserverumgebung bereitstellt. Sie können die ManagedThreadFactory auch so konfigurieren, dass diese einen Threadkontext, der für Java-EE-Anwendungen relevant ist, erfasst und an den neuen Thread weitergibt.

Informationen zu diesem Vorgang

Die verwaltete Thread-Factory 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 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 eine ManagedThreadFactory keinen Kontextservice angibt. Weitere Informationen zu Kontextserviceinstanzen finden Sie im Abschnitt zur Konfiguration von Instanzen des Threadkontextservice.

Eine Standardinstanz von ManagedThreadFactory (DefaultManagedThreadFactory) ist als java:comp/DefaultManagedThreadFactory verfügbar. Sie verwendet die Standardinstanz des Kontextservice für die Erfassung und Weitergabe des Threadkontextes.

Vorgehensweise

Beispielkonfiguration in der Datei server.xml:

Beispiel

Verwaltete Thread-Factorys können in Anwendungskomponenten injiziert werden (mit @Resource) oder mit Ressourcenumgebungsreferenzen (resource-env-ref) ermittelt werden. Unabhängig davon, wie die Instanz angefordert wird, kann sie abwechselnd als javax.enterprise.concurrent.ManagedThreadFactory oder java.util.concurrent.ThreadFactory verwendet werden.

  • Beispiel, in dem @Resource für die Injektion als java.util.concurrent.ThreadFactory verwendet wird:
    @Resource(lookup="concurrent/threadFactory2")
    ThreadFactory threadFactory
    ...
    
    // neuen Thread erstellen
    Thread dailySalesAnalysisTask = threadFactory.newThread(new Runnable() {
      public void run() {
             // java:comp-Suche ist möglich, weil <jeeMetadataContext> konfiguriert ist
        		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
        ... analyze the data
      }
    });
    dailySalesAnalysisTask.start();
  • Beispiel, in dem @Resource für die Injektion als javax.enterprise.concurrent.ManagedThreadFactory verwendet wird:
    @Resource(lookup="concurrent/threadFactory2")
    ManagedThreadFactory threadFactory;
    
    ... usage is same as previous example
  • Beispiel für die Verwendung von <resource-env-ref> für java.util.concurrent.ThreadFactory in der Datei web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadFactory1</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ThreadFactory</resource-env-ref-type>
    </resource-env-ref>
  • Beispiel für die Verwendung von <resource-env-ref> für javax.enterprise.concurrent.ManagedThreadFactory in der Datei web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadFactory2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedThreadFactory</resource-
    env-ref-type>
    </resource-env-ref>
  • Beispielsuche, die eine Ressourcenumgebungsreferenz verwendet:
    ManagedThreadFactory threadFactory =
      (ManagedThreadFactory) new InitialContext().lookup("java:comp/env/concurrent/threadFactory");
    // ein geplantes Steuerprogramm erstellen, das immer Tasks mit dem Threadkontext der verwalteten Thread-Factorys ausführt
    ScheduledExecutorService executor = Executors.newScheduledThreadPool(5, threadFactory);
    ... use executor to schedule tasks from any thread

Symbol das den Typ des Artikels anzeigt. Taskartikel

Nutzungsbedingungen für Information Center | Feedback


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