Establecimiento de un TaskName mediante la API TaskNameAccessor

Utilización de la API TaskNameAccessor para establecer un TaskName de API Java™ Persistence (JPA) en tiempo de ejecución.

Acerca de esta tarea

En el contenedor de EJB (Enterprise JavaBeans), un nombre de tarea se establece de forma automática y de forma predeterminada después de que se inicie una transacción. Esta acción se realiza cuando un componente o un método empresarial se invoca en un bean de sesión de CMT o cuando una aplicación invoca sessionContext.getTransaction().begin() en un bean de sesión de BMT. Este TaskName consta de una concatenación del tipo de bean de sesión de paquete plenamente cualificado, un punto y el nombre del método. Por ejemplo: com.acme.MyCmtSessionBean.methodABC.

Si va a utilizar JPA en el contexto del contenedor web, una aplicación debe utilizar la API de TaskNameAccessor para establecer el TaskName en la hebra actual de ejecución.

Avoid trouble Avoid trouble: Tras establecer un TaskName en un contexto de transacción, la aplicación no debe volver a establecer TaskName en la misma transacción. Esto evitará problemas en la conexión JDBC para distintos accesos de base de datos.gotcha
Este ejemplo contiene la definición de API de TaskNameAccessor:
package com.ibm.websphere.persistence;

public abstract class TaskNameAccessor {

	/**
	 	 * Devuelve el nombre de tarea actual adjuntado en el contexto de hebra actual.
	 	 * @devolver nombre de tarea actual o valor nulo si no se encuentra ninguno.
	 */
		public static String getTaskName ();
	
	/**
	 	 * Añade un nombre de tarea de intento de acceso a JPA definido por el usuario
	 	 * al contexto de hebra actual.
	 * 
	 	 * @param taskName
	 * @devolver false si una tarea existente ya se ha adjuntado en la hebra
	 	 *         actual o el registro de sincronización de transacciones (TSR) no
	 	 *         está disponible (por ejemplo, en el entorno JSE).
	 */
		public static boolean setTaskName(String taskName);

}
Este código de ejemplo muestra cómo establecer un TaskName mediante TaskNameAccessor.
package my.company;

@Remote
class Ejb1 {
    // no se asume ninguna transacción del llamante
    @TransactionAttribute(Requires)
    public void caller_Method1() {

        // empieza una nuevo transacción implícita
        // TaskName "my.company.Ejb1.caller_Method1" set on TSR

        ejb1.callee_Method?();
    }

    @TransactionAttribute(RequiredNew)
    public void callee_Method2() {

        // empieza una nueva transacción implícita, es decir, TxRequiredNew.
        // TaskName "my.company.Ejb1.callee_Method2" establecido en TSR
    }

    @TransactionAttribute(Requires)
    public void callee_Method3() {

        // En la transacción llamante, TaskName continúa siendo 
        //     "my.company.Ejb1.caller_Method1"
    }

    @TransactionAttribute(NotSupported)
    public void callee_LocalTx () {

        // Transacción no especificada; se ha iniciado implícitamente una nueva transacción local.
        // TaskName "my.company.Ejb1.callee_LocalTx" establecido en TSR.
    }

}
Atención: En este ejemplo, una aplicación debe tener en cuenta que el límite de la transacción se modificará de forma sutil si Ejb1 utiliza la interfaz local (@Local). Por ejemplo, cuando caller_Method1() llama a callee_Method3 o callee_LocalTx, se tratará como una llamada a un método Java. No se respeta la semántica de transacciones EJB.

Qué hacer a continuación

Una vez que haya finalizado este paso, continúe con el tema Especificar TaskName en una unidad de persistencia JPA.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_setTaskName
File name: tejb_setTaskName.html