Configurando um TaskName Usando a API TaskNameAccessor

Usando a API TaskNameAccessor para configurar o TaskName da Java™ Persistence API (JPA) no tempo de execução.

Sobre Esta Tarefa

No contêiner de Enterprise JavaBeans (EJB), um nome de tarefa é automaticamente configurado por padrão quando uma transação inicia. Esta ação é executada quando um componente ou método de megócios é chamado em um bean de sessão CMT ou quando um aplicativo chama o sessionContext.getTransaction().begin() em um bean de sessão BMT. Este TaskName consiste em uma concatenação do tipo de bean de sessão totalmente qualificado do pacote, um caractere de ponto e o nome do método. Por exemplo: com.acme.MyCmtSessionBean.methodABC.

Se estiver usando JPA no contexto do contêiner da Web, um aplicativo deve usar a API TaskNameAccessor para configurar o TaskName no encadeamento de execução atual.

Evitar Problemas Evitar Problemas: Depois que um TaskName é configurado em um contexto de transação, o aplicativo não deve configurar o TaskName novamente na mesma transação. Isso evitará problemas com a conexão JDBC para o acesso a diferentes bancos de dados.gotcha
Este exemplo contém a definição da API TaskNameAccessor
package com.ibm.websphere.persistence;

public abstract class TaskNameAccessor {

	/**
	 * Retorna o nome da tarefa atual anexada ao contexto do encadeamento atual.
	 * @retornar nome da tarefa atual ou nulo se nenhum for localizado.
	 */
	public static String getTaskName ();
	
	/**
	 * Inclui um nome de tarefa de intenção de acesso à JPA definida pelo usuário para o contexto de encadeamento
	 * atual.
	 * 
	 * @param taskName
	 * @retorna false se uma tarefa existente tiver sido anexada no encadeamento
	 *         atual ou se o TSR (Transaction Synchronization Registry) não estiver
	 *         disponível (isto é, em ambiente JSE).
	 */
	public static boolean setTaskName(String taskName);

}
Este exemplo de código mostra como configurar um TaskName usando TaskNameAccessor.
package my.company;

@Remote
class Ejb1 {
    // nenhum tx do responsável pela chamada
    @TransactionAttribute(Requires)
    public void caller_Method1() {

        // uma nova transação implícita inicia
        // TaskName "my.company.Ejb1.caller_Method1" configurado em TSR

        ejb1.callee_Method?();
    }

    @TransactionAttribute(RequiredNew)
    public void callee_Method2() {

        // uma nova transação implícita inicia, por exemplo, TxRequiredNew.
        // TaskName "my.company.Ejb1.callee_Method2" configurado em TSR
    }

    @TransactionAttribute(Requires)
    public void callee_Method3() {

        // Na transação do responsável pela chamada, portanto, TaskName permanece 
        //     "my.company.Ejb1.caller_Method1"
    }

    @TransactionAttribute(NotSupported)
    public void callee_LocalTx () {

        // Transação não-especificada, uma nova transação local implicitamente iniciada.
        // TaskName "my.company.Ejb1.callee_LocalTx" configurado em TSR
    }

}
Atenção: Neste exemplo, um aplicativo deve saber que o limite da transação será sutilmente mudado se o Ejb1 usar a interface local (@Local). Por exemplo, quando caller_Method1() chama callee_Method3 ou callee_LocalTx, isso será tratado como uma chamada de método Java. Nenhuma semântica de transação EJB será honrada.

O que Fazer Depois

Assim que concluir essa etapa, continue com o tópico Especificar TaskName em uma unidade de persistência JPA.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_setTaskName
Nome do arquivo: tejb_setTaskName.html