Utilice la función cciGetBrokerInfo para consultar el entorno del intermediario actual (por ejemplo, para obtener información sobre el nombre del intermediario, el nombre del grupo de ejecución, el nombre del gestor de colas). La información se devuelve en una estructura de tipo CCI_BROKER_INFO_ST.
Esta función se diferencia de la función cniGetBrokerInfo en que no es necesario especificar un manejador CciNode* y en que no devuelve información sobre el flujo de mensaje. Por lo tanto, se puede invocar cciGetBrokerInfo desde las funciones de inicialización; por ejemplo, bipInitializeUserExits, bipGetMessageParserFactory y bipGetMessageFlowNodeFactory.
void cciGetBrokerInfo(
int* returnCode,
CCI_BROKER_INFO_ST* broker_info_st);
typedef struct cci_broker_info_st {
int versionId; /*Identificación de versión de estructura*/
CCI_STRING_ST brokerName; /*La etiqueta del intermediario*/
CCI_STRING_ST executionGroupName; /*La etiqueta del grupo de ejecución actual*/
CCI_STRING_ST queueManagerName; /*El nombre del gestor de colas MQ para el intermediario*/
CCI_STRING_ST dataSourceUserId; /*El idusuario con el que el intermediario se conecta al origen de datos*/
} CCI_BROKER_INFO_ST;
Ninguno. Si se produce un error, el parámetro returnCode indica la razón del mismo.
int rc = CCI_SUCCESS;
CCI_BROKER_INFO_ST brokerInfo = {CCI_BROKER_INFO_ST_DEFAULT};
#define INTITIAL_STR_LEN 256
CciChar brokerNameStr[INTITIAL_STR_LEN];
CciChar executionGroupNameStr[INTITIAL_STR_LEN];
CciChar queueManagerNameStr[INTITIAL_STR_LEN];
brokerInfo.brokerName.bufferLength = INTITIAL_STR_LEN;
brokerInfo.brokerName.buffer = brokerNameStr;
brokerInfo.executionGroupName.bufferLength = INTITIAL_STR_LEN;
brokerInfo.executionGroupName.buffer = executionGroupNameStr;
brokerInfo.queueManagerName.bufferLength = INTITIAL_STR_LEN;
brokerInfo.queueManagerName.buffer = queueManagerNameStr;
cciGetBrokerInfo(&rc,&brokerInfo);
/* por si se da el caso de que los almacenamientos intermedios sean muy cortos*/
if ((brokerInfo.brokerName.bytesOutput < brokerInfo.brokerName.dataLength) ||
(brokerInfo.executionGroupName.bytesOutput < brokerInfo.executionGroupName.dataLength) ||
(brokerInfo.queueManagerName.bytesOutput < brokerInfo.queueManagerName.dataLength)) {
/*al menos uno de los almacenamientos intermedios era demasiado corto, se ha de reintentar*/
/* Tenga en cuenta que es improbable ya que los tamaños iniciales eran lo suficientemente grandes*/
brokerInfo.brokerName.bufferLength =
brokerInfo.brokerName.dataLength;
brokerInfo.brokerName.buffer =
(CciChar*)malloc (brokerInfo.brokerName.bufferLength * sizeof(CciChar));
brokerInfo.executionGroupName.bufferLength =
brokerInfo.executionGroupName.dataLength;
brokerInfo.executionGroupName.buffer =
(CciChar*)malloc (brokerInfo.executionGroupName.bufferLength * sizeof(CciChar));
brokerInfo.queueManagerName.bufferLength =
brokerInfo.queueManagerName.dataLength;
brokerInfo.queueManagerName.buffer =
(CciChar*)malloc (brokerInfo.queueManagerName.bufferLength * sizeof(CciChar));
cciGetBrokerInfo(&rc,&brokerInfo);
/*ahora efectúe algo razonable con las series antes de que los almacenamientos intermedios queden fuera de ámbito*/
/* por ejemplo, llame a una función escrita por el usuario para grabarlas fuera*/
copyBrokerInfo(brokerInfo.brokerName.buffer,
brokerInfo.executionGroupName.buffer,
brokerInfo.queueManagerName.buffer);
free((void*)brokerInfo.brokerName.buffer);
free((void*)brokerInfo.executionGroupName.buffer);
free((void*)brokerInfo.queueManagerName.buffer);
}else{
/*ahora efectúe algo razonable con las series antes de que los almacenamientos intermedios queden fuera de ámbito*/
/* por ejemplo, llame a una función escrita por el usuario para grabarlas fuera*/
copyBrokerInfo(brokerInfo.brokerName.buffer,
brokerInfo.executionGroupName.buffer,
brokerInfo.queueManagerName.buffer);
}