Hinweise zu Tasks und Arbeitseinheiten
Die Funktion für die Erstellung von Anwendungsprofilen verwendet das Konzept von Arbeitseinheiten. Eine Arbeitseinheit steht in diesem Kontext für eine Transaktion oder eine ActivitySession.
Der Taskname in einer Methode wird nur verwendet, wenn beim Aufruf dieser Methode eine Arbeitseinheit gestartet wird. Ausgehend von der aktiven Arbeitseinheit ist eine bessere Prognostizierung des Datenzugriffsmusters möglich. Durch dieses Konzept ist sichergestellt, dass innerhalb einer Arbeitseinheit ein Bean-Typ mit nur einer einzigen konfigurierten Zugriffsart geladen wird, wenn in einem Anwendungsprofil eine Bean mit nur einer Zugriffsart konfiguriert ist. Diese konfigurierte Zugriffsart für eine Bean-Typ wird während der Assemblierung ermittelt und vom Service für die Erstellung von Anwendungsprofilen umgesetzt.
Ein Taskname ist immer einer Arbeitseinheit zugeordnet und ändert sich für die Dauer der Arbeitseinheit nicht. Wenn eine einer Methode zugeordnete Arbeitseinheit begonnen wird, weil die Methode aufgerufen wird, und der Methode ein Taskname zugeordnet ist, wird dieser Taskname als Name der Arbeitseinheit verwendet. Eine Task, die einer Arbeitseinheit zugeordnet ist, wird als benannte Arbeitseinheit betrachtet.
Ist der Methode, die zum Start der Arbeitseinheit geführt hat, kein Taskname zugeordnet, wird eine Standardzugriffsart verwendet und die Arbeitseinheit wird nicht benannt. Eine Arbeitseinheit kann nur benannt werden, wenn die Arbeitseinheit gestartet wird. Dieser Name wird für die gesamte Lebensdauer der Arbeitseinheit verwendet. Außerdem kann die einer Arbeitseinheit zugeordnete Task nicht geändert werden. Einer Methode zugeordnete Tasknamen werden ignoriert, wenn diese Methode keine Arbeitseinheit (container- oder komponentengesteuert) startet.
Es ist nicht möglich, den Tasknamen zu ändern, der einer Arbeitseinheit zugeordnet ist. Es ist jedoch möglich, dass in einer Aufruffolge, die sich aus mehreren unterschiedlichen Anwendungsaufrufen zusammensetzt, unterschiedliche Tasknamen für unterschiedliche Aufrufe verwendet werden müssen. In diesem Fall ist es wichtig, dass der Implementierer eine neue Arbeitseinheit startet und dieser den erforderlichen Tasknamen zuordnet. Angenommen, Sie haben die folgenden Beans: sb1 ist eine Session-Bean, und eb2 und eb3 sind CMP-Entity-Beans (Container-Managed Persistence). Beim Aufruf von sb1 wird eine Transaktion gestartet, der die Task 't1' zugeordnet wird. Nehmen wir weiter an, dass sb1 anschließend eb2 und eb3 aufruft. Wenn weder eb2 noch eb3 eine Arbeitseinheit erstellen, werden diese Beans im Arbeitseinheitenkontext von sb1 ausgeführt und verwenden damit den Tasknamen (t1). Wenn eb2 oder eb3 in einer anderen Task als t1 ausgeführt werden muss, muss die jeweilige Bean eine Arbeitseinheit definieren, der der entsprechende Taskname zugeordnet wird.
Fall ein Anwendungsimplementierer nicht explizit eine Transaktion in einer Methode konfiguriert, erstellt WebSphere Application Server standardmäßig eine globale Transaktion. Dies ist wichtig, weil der EJB-Container automatisch eine globale Transaktion für diese Methode erstellt, wenn zwar eine Task in einer Methode definiert ist, aber keine Arbeitseinheit explizit in dieser Methode konfiguriert ist. Deshalb werden der Taskname, der der Arbeitseinheit zugeordnet ist, und alle Anwendungsprofile, die dieser Task zugeordnet sind, verwendet.