WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

cciRegCallback

Esta função pode ser registrada como uma função de retorno de chamada e é chamada quando o evento registrado ocorre. A função é registrada fornecendo um ponteiro de função que corresponde a um typedef específico.

Sintaxe

typedef int (*CciRegCallback)(CciDataContext *, cciCallbackType);

Parâmetros

type CciDataContext*
Esta parâmetro é o ponteiro fornecido pelo responsável pela chamada à função de registro.
type CciCallbackType
Este parâmetro indica a razão para o retorno de chamada. A razão é sempre um dos valores CciCallbackType especificados na chamada de registro correspondente a este retorno de chamada.

Valores de Retorno

type CciRegCallbackStatus (definido em BipCci.h)

  • CCI_THREAD_STATE_REGISTRATION_RETAIN: Esse código de retorno é utilizado para uma retorno de chamada que deve permanecer registrada como uma função de retorno de chamada em um encadeamento específico.
  • CCI_THREAD_STATE_REGISTRATION_REMOVE: Este código de retorno é usado para indicar que o retorno de chamada deve ter o registro removido e que ele não deve ser chamado novamente neste encadeamento, a menos que ele tenha o registro removido.
  • Se outro valor for retornado, um aviso será gravado em um log e CCI_THREAD_STATE_REGISTRATION_RETAIN será assumido.
Durante a execução dessa função, é possível que o nó ou o analisador que registrou a função já tenha sido excluído. Portanto, não é necessário chamar uma função de utilitário do nó ou do analisador que dependa da existência de um nó ou analisador. As únicas funções de utilitário que podem ser chamadas a partir deste retorno de chamada são:
  • cciLog
  • cciUserTrace
  • cciServiceTrace
  • cciUserDebugTrace
  • cciServiceDebugTrace
  • cciIsTraceActive

Para cada uma dessas cinco funções de utilitários de rastreio, o parâmetro CciObject deve ser NULL.

Exemplo

Declare a seguinte estrutura e função:

typedef struct {
    int         id;
}MyContext;

static int registered=0;

CciRegCallbackStatus switchThreadStateChange(CciDataContext *context, CciCallbackType type)
{
  char traceText[256];
  char* typeStr=0;
  MyContext* myContext = (MyContext*)context;

  if (type==CCI_THREAD_STATE_IDLE){
      typeStr = "idle";      
  }else if(type==CCI_THREAD_STATE_INSTANCE_END){
      typeStr = "instance end";
  }else if (type==CCI_THREAD_STATE_TERMINATION){
      typeStr = "termination";
  }else{
      typeStr = "unknown";
  }

  memset(traceText,0,256);
  sprintf(traceText,"switchThreadStateChange: context id = %d, thread state %s",myContext->id,typeStr);
  cciServiceTrace(NULL,
                  NULL,
                  traceText);
  return CCI_THREAD_STATE_REGISTRATION_RETAIN;

}

Coloque o código a seguir na função _Switch_evaluate nas amostras para permitir que você leia o rastreio de serviço e veja quando o encadeamento de processamento de mensagens muda de estado:

/*registrar para alteração no estado de encadeamento*/
  CciMessageContext* messageContext = cniGetMessageContext(NULL,message);
  CciThreadContext*  threadContext  = cniGetThreadContext(NULL,messageContext);
  
  static MyContext myContext={1};  

  if(registered==0){
    cciRegisterForThreadStateChange(
                   NULL,
                   threadContext,
                   & myContext,
                   switchThreadStateChange,
                   CCI_THREAD_STATE_IDLE | 
                   CCI_THREAD_STATE_INSTANCE_END |
                   CCI_THREAD_STATE_TERMINATION);

    registered=1;
  
  }

Esse exemplo é registrado apenas no primeiro encadeamento que recebe uma mensagem. Se for necessário registrar cada encadeamento que recebe uma mensagem, as extensões definidas pelo usuário devem lembrar em quais encadeamentos elas foram registradas.

Utilizando o parâmetro userContext, você pode ver como os dados são transmitidos do código, no qual o retorno de chamada é registrado para a função de retorno de chamada real.

Ao registrar o retorno de chamada, é transmitido um ponteiro para uma instância da estrutura MyContext. Este ponteiro é o ponteiro transmitido de volta ao retorno de chamada. Para assegurar que o ponteiro ainda é válido quando transmitido novamente para o retorno de chamada, uma instância da estrutura é declarada como estática. Outra técnica é assegurar que o ponteiro é válido para alocar o armazenamento no heap.

Na função de retorno de chamada, o parâmetro userContext pode ser convertido em um (MyContext*). A estrutura MyContext original pode ser referenciada através desse endereço. Esta técnica permite a transmissão de dados a partir do código no qual o retorno de chamada é registrado para a função de retorno de chamada.

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:30:28


Tópico de ReferênciaTópico de Referência | Versão 8.0.0.5 | as24650_