Schnittstelle "TaskNameManager"
Der TaskNameManager ist eine Programmschnittstelle für die Funktion für die Erstellung von Anwendungsprofilen. Weil es in seltenen Fällen erforderlich sein kann, den aktuellen Tasknamen über das Programm festzulegen, können Sie mit der Schnittstelle "TaskNameManager" die aktuelle Task, die dem Ausführungsthread zugeordnet ist, überschreiben oder die aktuelle Task auf die ursprüngliche Task zurücksetzen.
Mit der Erstellung von Anwendungsprofilen können Sie bestimmte Arbeitseinheiten (UOWs, Unit of Work) gegenüber der Laufzeitumgebung von WebSphere Application Server identifizieren. Die Laufzeit kann ihre Unterstützung an die speziellen Anforderungen dieser Arbeitseinheit anpassen. Die Komponente Zugriffsart ist derzeit die einzige Laufzeitkomponente, die die Funktion für die Erstellung von Anwendungsprofilen nutzt. Beispielsweise können Sie mit dem Service für die Erstellung von Anwendungsprofilen eine Transaktion so konfigurieren, dass sie eine Entity-Bean lädt, für die strikte Aktualisierungssperren gelten, und eine weitere Transaktion so konfigurieren, dass sie dieselbe Entity-Bean ohne Sperren lädt.
Die Erstellung von Anwendungsprofilen unterstützt zwei Konzepte für diese Funktion: Tasks und Profile.
Eine Task ist ein konfigurierbarer Name für eine Arbeitseinheit. "Arbeitseinheit" steht in diesem Kontext für eine Transaktion oder eine ActivitySession.
Ein Profil ist nichts anderes als die Zuordnung einer Task zu einer Gruppe von Richtlinien für Zugriffsarten, die für Entity-Beans konfiguriert sind. Müssen beim Aufruf einer Bean (durch eine Finder-Methode, eine CMR-Getter-Methode oder eine dynamische Abfrage) Daten von einem Back-End-System abgerufen werden, dann werden mithilfe der Task der aktiven Arbeitseinheit, die der Anforderung derzeit zugeordnet ist, die genauen Voraussetzungen für die Transaktion ermittelt. Im Kontext der Taskprofilzuordnung wird dieselbe Bean anders geladen und zeigt ein anderes Verhalten. Jedes Profil bietet dem Entwickler die Möglichkeit, die Zugriffsart für die Anwendung zu rekonfigurieren.
Dieses Interface kann für Enterprise JavaBeans, die für containergesteuerte Transaktionen oder ActivitySessions konfiguriert sind, nicht verwendet werden, weil Arbeitseinheiten nur dann einer Task zugeordnet werden können, wenn die Arbeitseinheit eingeleitet wird. Eine Ausnahme bilden J2EE-1.3-Anwendungen, die in einem Server ausgeführt werden, in dem das Attribut 5.x-Kompatibilitätsmodus ausgewählt ist. Der Aufruf zum Festlegen des Tasknamens muss deshalb vor Beginn der Arbeitseinheit erfolgen. Arbeitseinheiten können nicht mehr benannt werden, nachdem sie begonnen haben. Aufrufe dieser Schnittstelle während der Ausführung einer containergesteuerten Arbeitseinheit werden einfach ignoriert.
Die Schnittstelle "TaskNameManager" steht über das folgende JNDI-Lookup allen J2EE-Komponenten zur Verfügung:
java:comp/websphere/AppProfile/TaskNameManager
package com.ibm.websphere.appprofile;
/**
* TaskNameManager ist die Programmschnittstelle zur
* Application-Profiling-Funktion. Mit dieser Schnittstelle
* können Programmierer den aktuellen Tasknamen im
* Ausführungsthread festlegen. Der Taskname muss in den
* Implementierungsdeskriptoren als die einer Task zugeordnete
* Taskreferenz konfiguriert worden sein. Der Geltungsbereich
* der festgelegten Task ist die Dauer des Methodenaufrufs
* in den EJB- und Webkomponenten und die Dauer des
* Clientprozesses oder die Zeitspanne bis zum Aufruf
* der Methode resetTaskName().
*/
public interface TaskNameManager {
/**
* Der aktuelle Taskname des Thread muss auf den angegebenen
* Parameter gesetzt werden. Der Taskname muss als Taskreferenz
* für eine zugehörige Task konfiguriert worden sein, da andernfalls
* die Ausnahme IllegalTaskName zurückgegeben wird.
*/
public void setTaskName(String taskName) throws IllegalTaskNameException;
/**
* Setzt den Tasknamen des Thread auf den Wert, der
* am Anfang des Methodenaufrufs (für EJB- und Webkomponenten)
* oder am Anfang des Prozesses (für J2EE-Clients) festgelegt
* oder importiert wurde.
*/
public void resetTaskName();
}