Threadverwaltung und Spring Framework

Verwenden Sie die Informationen in den folgenden Abschnitten, um potenzielle Probleme mit nicht verwalteten Threads zu vermeiden.

Nicht verwaltete Threads

Verwenden Sie aus den folgenden Gründen kein Szenario, in dem nicht verwaltete Threads erstellt werden können:
  • Der Anwendungsserver erkennt keine nicht verwalteten Threads.
  • Nicht verwaltete Threads haben keinen Zugriff auf Java™ EE-Kontextinformationen.
  • Nicht verwaltete Threads können Ressourcen verwenden, ohne vom Anwendungsserver überwacht zu werden.
  • Nicht verwaltete Threads können sich nachteilig auf Anwendungsserverfunktionen auswirken, z. B. bei normaler Beendigung oder beim Wiederherstellen von Ressourcen nach einem Fehler.
  • Der Administrator kann weder Anzahl nicht verwalteter Threads noch ihre Ressourcennutzung steuern.
Die folgenden Szenarien sind Beispiele für Spring-Framework-Szenarien, die vermieden werden sollten:
  • registerShutdownHook

    Vermeiden Sie, die Spring-Framework-Klasse "AbstractApplicationContext" und ihre Methoden zu verwenden. Diese Klassen enthalten die allgemein zugängliche Methode "registerShutdownHook", die einen Thread erstellt und ihn bei der Java Virtual Machine (JVM) registriert, um ihn zum Schließen des Anwendungskontexts auszuführen. Alternativ kann eine Anwendung die Lebenszyklushinweise verwenden, die sie vom Anwendungs-Server-Container empfängt, um die Methode "close" explizit im Anwendungskontext aufzurufen.

  • WeakReferenceMonitor

    Spring Framework stellt vordefinierte Klassen für eine vereinfachte Entwicklung von EJB-Komponenten bereit. Diese vordefinierten Klassen erzeugen jedoch einen nicht verwalteten Thread, den das Objekt "WeakReferenceMonitor" für die Bereinigung verwendet.

Thread-Pooling

WebSphere Application Server unterstützt die Verwendung der Spring-Klasse "Framework WorkManagerTaskExecutor" für die asynchrone Ausführung von Arbeiten.

Die Klasse "WorkManagerTaskExecutor" verwendet Thread-Pools, die vom Anwendungsserver verwaltet werden, und delegiert die Arbeit an eine konfigurierte WorkManager-Instanz. Informationen zum Konfigurieren eines Arbeitsmanagers (Work Manager) finden Sie in den zugehörigen Artikeln.

Verwenden Sie keine anderen TaskExecutor-Klassen, die mit Spring Framework bereitgestellt werden, weil diese nicht verwaltete Threads starten könnten.

Sie können den JNDI-Namen (Java Naming and Directory Interface) des konfigurierten Arbeitsmanagers als workManagerName-Eigenschaft verwenden, um eine WorkManagerTaskExecutor-Instanz in der Spring-Konfigurationsdatei zu definieren. Im folgenden Beispiel wird der JNDI-Name von DefaultWorkManager im Anwendungsserver verwendet, d. h. wm/default:
<bean id="myTaskExecutor" 
  class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
  <property name="workManagerName" value="wm/default" />
</bean>

Zeitplanung

Sie können das CommonJ-WorkManager-Paket für Zeitplanung in Spring Framework verwenden, um mit Threads zu arbeiten, die vom Anwendungsserver verwaltet werden. Vermeiden Sie die Verwendung anderer Pakete, wie z. B. die Verwendung des Quartz-Schedulers oder des Timer-Pakets in Java SE Development Kit (JDK), weil diese nicht verwaltete Threads starten könnten.


Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cspr_design
Dateiname:cspr_design.html