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.

Fehler vermeiden Fehler vermeiden: Nachdem ein Taskname in einem Transaktionskontext gesetzt wurde, darf die Anwendung den Tasknamen in derselben Transaktion nicht erneut setzen. Auf diese Weise werden Probleme in der JDBC-Verbindung für verschiedene Datenbankzugriffe vermieden.gotcha
Das folgende Beispiel enthält die Definition der API TaskNameAccessor:
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);

}
Das folgende Codebeispiel veranschaulicht, wie ein Taskname mit TaskNameAccessor gesetzt wird.
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
    }

}
Achtung: In diesem Beispiel muss die Anwendung wissen, dass sich die Transaktionsgrenze geringfügig ändert, wenn Ejb1 die lokale Schnittstelle (@Local) verwendet. Wenn caller_Method1() beispielsweise callee_Method3 oder callee_LocalTx aufruft, wird dies als Java-Methodenaufruf behandelt. Die EJB-Transaktionssemantik wird nicht berücksichtigt.

Nächste Schritte

Fahren Sie nach der Ausführung dieses Schritts mit dem Artikel "Taskname in einer JPA-Persistenzeinheit festlegen" fort.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



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