WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

cciRegCallback

Esta función se puede registrar como una función de devolución de llamada y se invoca cuando se produce el suceso registrado. La función se registra proporcionando un puntero de función que coincida con un typedef específico.

Sintaxis

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

Parámetros

type CciDataContext*
Este parámetro es el puntero que el emisor de la llamada proporciona a la función de registro.
type CciCallbackType
Este parámetro indica la razón de la devolución de llamada. La razón siempre es uno de los valores de CciCallbackType que se especifica en la llamada de registro correspondiente a esta devolución de llamada.

Valores de retorno

type CciRegCallbackStatus (definida en BipCci.h)

  • CCI_THREAD_STATE_REGISTRATION_RETAIN: Este código de retorno se utiliza para una devolución de llamada que debe permanecer registrada como función de devolución de llamada en una hebra específica.
  • CCI_THREAD_STATE_REGISTRATION_REMOVE: Este código de retorno se utiliza para indicar que debe anularse el registro de la devolución de llamada y que no se le debe volver a llamar en esta hebra, a menos que se vuelva a registrar.
  • Si se devuelve otro valor, se graba un aviso en las anotaciones y se presupone CCI_THREAD_STATE_REGISTRATION_RETAIN.
Durante la ejecución de esta función, es posible que ya se haya suprimido el nodo o el analizador que ha registrado la función. Por lo tanto, no debe llamar a una función de utilidad de nodo o analizador que dependa de la existencia de un nodo o analizador. Las únicas funciones de utilidad a las que se puede llamar desde esta devolución de llamada son:
  • cciLog
  • cciUserTrace
  • cciServiceTrace
  • cciUserDebugTrace
  • cciServiceDebugTrace
  • cciIsTraceActive

Para cada una de estas cinco funciones de utilidad de rastreo, el parámetro CciObject debe ser NULL.

Ejemplo

Declare la siguiente estructura y función:

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 el código siguiente en la función _Switch_evaluate en los ejemplos para que pueda leer el rastreo de servicio y ver cuándo la hebra de proceso de mensaje cambia de estado:

/*registrar para cambio de estado de hebra */
  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;
  
  }

Este ejemplo sólo registra en la primera hebra que recibe un mensaje. Si es necesario registrar cada hebra que recibe un mensaje, las extensiones definidas por el usuario deben recordar en qué hebras se han registrado.

Al utilizar el parámetro userContext puede ver cómo los datos se pasan del código en el que está registrada la devolución de llamada a la función de devolución de llamada real.

Al registrar la devolución de llamada, se pasa un puntero a una instancia de la estructura MyContext. Este puntero es el puntero que se devuelve a la devolución de llamada. Para asegurar que el puntero todavía es válido cuando se devuelve a la devolución de llamada, una instancia de la estructura se declara como estática. Otra técnica para asegurar que el puntero es válido es asignar almacenamiento en el almacenamiento dinámico.

En la función de devolución de llamada, el parámetro userContext puede transformarse en un (MyContext*). Se puede hacer referencia a la estructura de MyContext original a través de esta dirección. Esta técnica permite el paso de datos del código donde está registrada la devolución de llamada a la función de devolución de llamada.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

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

        
        Última actualización:
        
        Última actualización: 2015-02-28 17:00:29


Tema de referenciaTema de referencia | Versión 8.0.0.5 | as24650_