Managed-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 Managed-Thread-Factory gesucht oder eingefügt 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 Managed-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 Threadkontexts.

Vorgehensweise

Beispielkonfiguration in der Datei server.xml:

Beispiel

Managed-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, das die Standard-Managed-Thread-Factory sucht:
    ManagedThreadFactory threadFactory =
        (ManagedThreadFactory) new InitialContext().lookup(
            "java:comp/DefaultManagedThreadFactory");
    // Steuerprogramm erstellen, das immer Tasks mit dem Threadkontext der Managed-Thread-Factory ausführt
    ExecutorService executor = new ThreadPoolExecutor(
        coreThreads, maxThreads, keepAliveTime, TimeUnit.MINUTES,
        new ArrayBlockingQueue<Runnable>(workRequestQueueSize),
        threadFactory, new ThreadPoolExecutor.AbortPolicy());
  • 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 Steuerprogramm für terminierte Tasks erstellen, das immer Tasks mit dem Threadkontext der Managed-Thread-Factory ausführt
    ScheduledExecutorService executor = Executors.newScheduledThreadPool(5, threadFactory);
    ... use executor to schedule tasks from any thread

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_threadfactory
Dateiname: twlp_config_threadfactory.html