Tasknamen mit API TaskNameAccessor festlegen
Sie können die API "TaskNameAccessor" verwenden, um einen JPA-Tasknamen (Java™ Persistence API) zur Laufzeit festzulegen.
Informationen zu diesem Vorgang
Im EJB-Container (Enterprise JavaBeans) wird beim Transaktionsstart automatisch ein Taskname gesetzt. Diese Aktion wird ausgeführt, wenn eine Komponente oder eine Geschäftsmethode in einer CMT-Session-Bean aufgerufen wird oder wenn eine Anwendung die Methode sessionContext.getTransaction().begin() in einer BMT-Session-Bean aufruft. Dieser Taskname ist eine Verknüpfung des vollständig qualifizierten Session-Bean-Typs für das Paket, eines Punkts und des Methodennamens, z. B. com.acme.MyCmtSessionBean.methodABC.
Wenn Sie JPA im Kontext des Web-Containers verwenden, muss eine Anwendung die API TaskNameAccessor verwenden, um den Tasknamen im aktuellen Ausführungsthread zu setzen.

package com.ibm.websphere.persistence;
public abstract class TaskNameAccessor {
/**
* Gibt den aktuellen Tasknamen zurück, der im aktuellen Threadkontext zugeordnet ist
* @return Aktueller Taskname bzw. Nullwert, wenn kein Name gefunden wird.
*/
public static String getTaskName ();
/**
* Dem aktuellen Threadkontext den benutzerdefinierten Tasknamen für JPA-Zugriffsart
* hinzufügen.
*
* @param taskName
* @return false, wenn dem aktuellen Thread bereits eine vorhandene Task zugeordnet oder wenn
* Transaction Synchronization Registry (TSR) nicht verfügbar ist (z. B. in einer
* JSE-Umgebung).
*/
public static boolean setTaskName(String taskName);
}
package my.company;
@Remote
class Ejb1 {
// Angenommen, es ist keine Transaktion des Callers vorhanden
@TransactionAttribute(Requires)
public void caller_Method1() {
// Start einer impliziten neuen Transaktion
// Tasknamen "my.company.Ejb1.caller_Method1" in TSR setzen
ejb1.callee_Method?();
}
@TransactionAttribute(RequiredNew)
public void callee_Method2() {
// Start einer neuen impliziten Transaktion, d. h. TxRequiredNew.
// Tasknamen "my.company.Ejb1.callee_Method2" in TSR setzen
}
@TransactionAttribute(Requires)
public void callee_Method3() {
// In Caller-Transaktion, somit bleibt der Taskname
// "my.company.Ejb1.caller_Method1"
}
@TransactionAttribute(NotSupported)
public void callee_LocalTx () {
// Nicht angegebene Transaktion, impliziter Start einer neuen lokalen Transaktion
// Tasknamen "my.company.Ejb1.callee_LocalTx" in TSR setzen
}
}