|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
Setting ApplIdentityData in Pro*C |
« View previous topic :: View next topic » |
Author |
Message
|
tanuj33 |
Posted: Tue Mar 14, 2006 3:07 am Post subject: Setting ApplIdentityData in Pro*C |
|
|
Newbie
Joined: 13 Mar 2006 Posts: 6
|
Hi,
I want to set Message descriptor ApplIdentityData to a string say IW_TRADE_SUB_ACK' in C.
I 'm doing the following
char ack_app_id[18];
O_options = MQOO_OUTPUT + /* open queue for output */
MQOO_FAIL_IF_QUIESCING, /* but not if MQM stopping */
+ MQOO_SET_IDENTITY_CONTEXT ;
MQOPEN( Hcon, /* connection handle */
&od,/* object descriptor for queue */
O_options,/* open options */
&Hobj,/* object handle */
&OpenCode, /* completion code */
&Reason); /* reason code */
strcpy(ack_app_id, "IW_TRADE_SUB_ACK");
memcpy(md.MsgId, excp_srl_num1, sizeof(md.MsgId) );
memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId) );
memcpy(md.ApplIdentityData,ack_app_id, sizeof(md.ApplIdentityData));
printf("ack_app_id = %s",ack_app_id);
printf("md.ApplIdentityData = %s",md.ApplIdentityData);
pmo.Options = MQPMO_SYNCPOINT +
MQPMO_FAIL_IF_QUIESCING,
+ MQPMO_SET_IDENTITY_CONTEXT;
messlen = strlen(buffer);
MQPUT( Hcon, /* connection handle */
Hobj, /* object handle */
&md, /* message descriptor */
&pmo, /* default options (datagram) */
messlen, /* message length */
buffer, /* message buffer */
&CompCode, /* completion code */
&Reason); /* reason code */
On the receiving side,client is not able to see ApplIdentifierData set to the mentioned value.
Can anyone reply whether there is any problem with code or any other parameters to be set. |
|
Back to top |
|
 |
wschutz |
Posted: Tue Mar 14, 2006 3:15 am Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
This actually compiles without an error?
Code: |
pmo.Options = MQPMO_SYNCPOINT +
MQPMO_FAIL_IF_QUIESCING, <-comma
+ MQPMO_SET_IDENTITY_CONTEXT; |
_________________ -wayne |
|
Back to top |
|
 |
mvic |
Posted: Tue Mar 14, 2006 3:45 am Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
wschutz wrote: |
This actually compiles without an error?
Code: |
pmo.Options = MQPMO_SYNCPOINT +
MQPMO_FAIL_IF_QUIESCING, <-comma
+ MQPMO_SET_IDENTITY_CONTEXT; |
|
This error is repeated above in the open options. Kindly post a simple copy/paste from your editor - it will ensure no typos get in. Thanks.
Is the MQPUT completing with MQCC_OK and MQRC_NONE? Or something else? How about the MQOPEN? You aren't checking return codes.
Hopefully this helps  |
|
Back to top |
|
 |
tanuj33 |
Posted: Tue Mar 14, 2006 4:05 am Post subject: |
|
|
Newbie
Joined: 13 Mar 2006 Posts: 6
|
Hi all,
Pl give me the correct syntax in case any error.
I dont get any compile error. |
|
Back to top |
|
 |
wschutz |
Posted: Tue Mar 14, 2006 4:08 am Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
Code: |
pmo.Options = MQPMO_SYNCPOINT |
MQPMO_FAIL_IF_QUIESCING |
MQPMO_SET_IDENTITY_CONTEXT; |
and the same for the OPEN options. _________________ -wayne |
|
Back to top |
|
 |
tanuj33 |
Posted: Tue Mar 14, 2006 4:15 am Post subject: |
|
|
Newbie
Joined: 13 Mar 2006 Posts: 6
|
This syntax is not working at runtime.MQOpen is failing
Is it applicable in C language |
|
Back to top |
|
 |
Vitor |
Posted: Tue Mar 14, 2006 4:55 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
mvic wrote: |
Is the MQPUT completing with MQCC_OK and MQRC_NONE? Or something else? How about the MQOPEN? You aren't checking return codes.
Hopefully this helps  |
So what is the MQOpen failing with? What's the return code? What does the Application Programming Reference manual say that code means in respect to an MQOpen (which is perfectly applicable to C)?
You might also want to post the cut/paste previously requested. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
wschutz |
Posted: Tue Mar 14, 2006 6:57 am Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
If I were to hazard a guess: now that the MQOO_SET_IDENTITY_CONTEXT bit is set in the OpenOptions, he doesn't have authority to open the queue with that...just a guess.... _________________ -wayne |
|
Back to top |
|
 |
Vitor |
Posted: Tue Mar 14, 2006 7:41 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
This is the good thing about reason codes - you don't have to guess what the problem is. This gives you more time to thrash around working out why the problem is!  _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
SixBlade |
Posted: Wed Mar 15, 2006 2:00 am Post subject: |
|
|
Apprentice
Joined: 03 Dec 2003 Posts: 26 Location: UK
|
tanuj33, you need to check the OpenCode and CompCode and for example see if it differs from MQRC_NONE. and MQCC_OK, like stated. Then print Reason, printf("Reason code: %ld\n", Reason); Then much easier to help. |
|
Back to top |
|
 |
tanuj33 |
Posted: Thu Mar 16, 2006 11:09 pm Post subject: |
|
|
Newbie
Joined: 13 Mar 2006 Posts: 6
|
The code is below :
The code executes w/o error.But the receving application is not able to see applid (ApplIdentifierData).
I've also tried with SET_IDENTIFIER_CONTEXT in mqput & mqopen.But still problem is not resolved.
Pl help in this matter.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <math.h>
#include <unistd.h>
#include <dirent.h>
#include <time.h>
#include <sqlda.h>
#include <cmqc.h>
#include "trd_lib.c"
#define TRUE 1
#define FALSE 0
#define SUCCESS 0
#define ERROR -1
#define g_bufferLENGTH 200000
EXEC SQL INCLUDE ORACA;
EXEC SQL INCLUDE SQLCA;
/*
------------------------------------------------------------------------
Modification History
S.NoName Date Comments
1R.Srinivasan8th Jan 2001Changed parameter name for queue.
*/
int lbranch_no;
int lcount;
int b,m;
char excp_srl_num1[30];
char g_curtime[20];
char l_mq_open_flag;
char v_err_reason[g_bufferLENGTH];
char v_sqlcode[500];
char QMName[50];
char buffer[g_bufferLENGTH];
char g_error_log_file[240];
char laction;
varchar lstatus[3];
char lstr[35];
char g_mesg_file[500];
char ack_app_id[18];
varchar param_name[240];
varchar ip_dir_name[500];
varchar ip_queue_name[240];
varchar g_username[1000];
varchar gv_error_log_file[240];
varchar g_errlog_file_prm[240];
varchar v_app_id[100];
varchar laccount_no[35];
varchar lcust_base[11];
varchar lliab_no[11];
varchar lbank[12];
varchar lseverity[8];
varchar lerror_code[5];
varchar lerror_message[25];
varchar linsert_seq[18];
const char C_FATAL[10] = "FATAL";
const char C_WARN[10] = "WARNING";
const char C_INFO[10] = "INFO";
char g_prog_name[100];
FILE *lfile_handle;
/* Declare MQI structures needed */
MQOD od = {MQOD_DEFAULT}; /* Object Descriptor */
MQMD md = {MQMD_DEFAULT}; /* Message Descriptor */
MQPMO pmo = {MQPMO_DEFAULT}; /* put message options */
MQHCONN Hcon; /* connection handle */
MQHOBJ Hobj; /* object handle */
MQLONG O_options; /* MQOPEN options */
MQLONG C_options; /* MQCLOSE options */
MQLONG CM1Code;/* MQCOMMIT options */
MQLONG CompCode; /* completion code */
MQLONG OpenCode; /* MQOPEN completion code */
MQLONG CBKCode;
MQLONG CBKReason;
MQLONG Reason; /* reason code */
MQLONG CReason; /* reason code */
MQLONG CM1Reason;/* commit reason */
MQLONG buflen; /* buffer length */
MQLONG messlen; /* message length received */
void main()
{
strcpy(g_prog_name,"trd_stg_sub_reply");
g_prog_name[strlen(g_prog_name)]='\0';
if ( getenv("TRD_PROC_USERID") != NULL )
{
strcpy((char *)g_username.arr, getenv("TRD_PROC_USERID"));
g_username.len = strlen((char *)g_username.arr);
}
else
{
fn_std_err("Unix variable TRD_PROC_USERID NOT SET.");
exit (1);
}
if ( getenv("TRD_QMNAME") != NULL )
{
QMName[0] = 0;
strncpy( QMName, getenv("TRD_QMNAME"), 49 );
}
else
{
fn_std_err("Unix variable TRD_QMNAME NOT SET.");
exit (1);
}
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL CONNECT :g_username;
gv_error_log_file.arr[0] = '\0';
gv_error_log_file.len = 0;
g_errlog_file_prm.arr[0] = '\0';
g_errlog_file_prm.len = 0;
v_app_id.arr[0] = '\0';
v_app_id.len = 0;
strcpy((char *)v_app_id.arr,"TRADE");
v_app_id.len = strlen((char *)v_app_id.arr);
strcpy((char *)g_errlog_file_prm.arr,(char *)v_app_id.arr);
strcat((char *)g_errlog_file_prm.arr,"_ERROR_LOG_FILE");
g_errlog_file_prm.len = strlen((char *)g_errlog_file_prm.arr);
EXEC SQL select value
into :gv_error_log_file
from iwh_params
where name = :g_errlog_file_prm
and rownum < 2;
if ( sqlca.sqlcode == 1403 || sqlca.sqlcode != 0 )
{
fn_std_err("Error : No LOG_FILE_NAME record in iwh_params");
goto sqlerror;
}
gv_error_log_file.arr[gv_error_log_file.len] = '\0';
gv_error_log_file.len = strlen((char *)gv_error_log_file.arr);
strcpy(g_error_log_file,(char *)gv_error_log_file.arr);
l_mq_open_flag = 'N';
buffer[0] ='\0';
lcount =1;
sprintf(lstr,"%35s",lstr);
strcpy((char *)param_name.arr,"TRD_SRC_FIL_DIR");
param_name.len = strlen((char *)param_name.arr);
param_name.arr[param_name.len] = '\0';
EXEC SQL WHENEVER NOT FOUND GOTO opdir_prm_not_found;
EXEC SQL SELECT value
INTO :ip_dir_name
FROM iwh_params
WHERE name = :param_name;
ip_dir_name.arr[ip_dir_name.len] = '\0';
ip_dir_name.len = strlen((char *)ip_dir_name.arr);
g_mesg_file[0] = '\0';
sprintf(g_mesg_file,"%s%s%s",(char *)ip_dir_name.arr,"/","TRD_CUST_REPLY");
if ((lfile_handle = fopen(g_mesg_file,"wb")) == NULL)
{
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-FOPEN_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"FOPEN for reply file failed","","","") != SUCCESS)
{
fn_std_err("Error in log error function");
}
goto sqlerror;
}
EXEC SQL DECLARE c_sub CURSOR FOR
SELECT INSERT_SEQUENCE, BRANCH_NUMBER,
rpad(nvl(ACCOUNT_NUMBER,' '),35,' '), rpad(nvl(CUSTOMER_BASE,' '),11,' '),
rpad(nvl(LIABILITY_NUMBER,' '),11,' '), rpad(nvl(BANK, ' '),12,' '),
ACTION, upper(ts.STATUS), rpad(nvl(ts.ERROR_CODE,' '),5,' '),
rpad(nvl(error_message,' '),25,' '), rpad(nvl(severity,' '),8,' ')
FROM TRD_SUB_SRC ts, trd_errors te
WHERE ts.error_code = te. error_code
AND flg_reply='N';
ip_queue_name.arr[0] = '\0';
ip_queue_name.len = 0;
EXEC SQL WHENEVER NOT FOUND GOTO queue_not_found;
EXEC SQL SELECT value
INTO :ip_queue_name
FROM iwh_params
WHERE name ='TRD_CUSTGCX_REPLYQ';
ip_queue_name.arr[ip_queue_name.len] = '\0';
ip_queue_name.len = strlen((char *)ip_queue_name.arr);
MQCONN(QMName, /* queue manager */
&Hcon, /* connection handle */
&CompCode, /* completion code */
&CReason); /* reason code */
/* report reason and stop if it failed */
if (CompCode == MQCC_FAILED)
{
v_err_reason[0] = '\0';
sprintf(v_err_reason,"%s %ld","Reason is",CReason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCONN_FAILED",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQCONN_FAILED");
}
goto sqlerror;
}
O_options = MQOO_OUTPUT +/* open queue for output */
MQOO_FAIL_IF_QUIESCING, +
MQOO_SET_ALL_CONTEXT ;/* but not if MQM stopping */
strcpy(od.ObjectName,(char *)ip_queue_name.arr);
MQOPEN(Hcon, /* connection handle */
&od, /* object descriptor for queue */
O_options, /* open options */
&Hobj, /* object handle */
&OpenCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any; stop if failed */
if (Reason != MQRC_NONE)
{
v_err_reason[0] = '\0';
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQOPEN_FAILED",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQOPEN_FAILED");
}
goto sqlerror;
}
if (OpenCode == MQCC_FAILED)
{
v_err_reason[0] = '\0';
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors(g_error_log_file,(char *)C_FATAL,"TRADE","E-MQOPEN_FAILED",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQOPEN_FAILED");
}
goto sqlerror;
}
l_mq_open_flag = 'Y';
CompCode = OpenCode; /* use MQOPEN result for initial test */
EXEC SQL OPEN c_sub;
EXEC SQL WHENEVER NOT FOUND DO BREAK;
for( ; ; )
{
linsert_seq.arr[0] = '\0';
linsert_seq.len = 0;
laccount_no.arr[0] = '\0';
laccount_no.len = 0;
lcust_base.arr[0] = '\0';
lcust_base.len = 0;
lliab_no.arr[0] = '\0';
lliab_no.len = 0;
lbank.arr[0] = '\0';
lbank.len = 0;
lerror_code.arr[0] = '\0';
lerror_code.len = 0;
lseverity.arr[0] = '\0';
lseverity.len = 0;
lerror_message.arr[0] = '\0';
lerror_message.len = 0;
lstatus.arr[0] = '\0';
lstatus.len = 0;
EXEC SQL FETCH c_sub
INTO :linsert_seq, :lbranch_no, :laccount_no, :lcust_base,
:lliab_no, :lbank, :laction, :lstatus, :lerror_code,
:lerror_message,:lseverity;
linsert_seq.arr[linsert_seq.len] = '\0';
linsert_seq.len = strlen((char *)linsert_seq.arr);
laccount_no.arr[laccount_no.len] = '\0';
laccount_no.len = strlen((char *)laccount_no.arr);
lcust_base.arr[lcust_base.len] = '\0';
lcust_base.len = strlen((char *)lcust_base.arr);
lliab_no.arr[lliab_no.len] = '\0';
lliab_no.len = strlen((char *)lliab_no.arr);
lbank.arr[lbank.len] = '\0';
lbank.len = strlen((char *)lbank.arr);
lerror_code.arr[lerror_code.len] = '\0';
lerror_code.len = strlen((char *)lerror_code.arr);
lseverity.arr[lseverity.len] = '\0';
lseverity.len = strlen((char *)lseverity.arr);
lerror_message.arr[lerror_message.len] = '\0';
lerror_message.len = strlen((char *)lerror_message.arr);
lstatus.arr[lstatus.len] = '\0';
lstatus.len = strlen((char *)lstatus.arr);
if (strcmp((char *)lstatus.arr,"S") == 0)
{
lerror_code.arr[0] = ' ';
lerror_code.arr[1] = ' ';
lerror_code.arr[2] = ' ';
lerror_code.arr[3] = ' ';
lerror_code.arr[4] = ' ';
lerror_code.arr[5] = '\0';
lerror_code.len = strlen((char *)lerror_code.arr);
}
/*
sprintf((char *)laccount_no.arr,"%35s",(char *)laccount_no.arr);
laccount_no.arr[laccount_no.len] = '\0';
laccount_no.len = strlen((char *)laccount_no.arr);
sprintf((char *)lcust_base.arr,"%11s",(char *)lcust_base.arr);
lcust_base.arr[lcust_base.len] = '\0';
lcust_base.len = strlen((char *)lcust_base.arr);
sprintf((char *)lliab_no.arr,"%11s",(char *)lliab_no.arr);
lliab_no.arr[lliab_no.len] = '\0';
lliab_no.len = strlen((char *)lliab_no.arr);
sprintf((char *)lbank.arr,"%12s",(char *)lbank.arr);
lbank.arr[lbank.len] = '\0';
lbank.len = strlen((char *)lbank.arr);
sprintf((char *)lerror_code.arr,"%5s",(char *)lerror_code.arr);
lerror_code.arr[lerror_code.len] = '\0';
lerror_code.len = strlen((char *)lerror_code.arr);
sprintf((char *)lseverity.arr,"%8s",(char *)lseverity.arr);
lseverity.arr[lseverity.len] = '\0';
lseverity.len = strlen((char *)lseverity.arr);
sprintf((char *)lerror_message.arr,"%25s",(char *)lerror_message.arr);
lerror_message.arr[lerror_message.len] = '\0';
lerror_message.len = strlen((char *)lerror_message.arr);
if (laccount_no.arr[0] == '\0' )
{
strcpy((char *)laccount_no.arr,lstr);
laccount_no.arr[laccount_no.len] = '\0';
laccount_no.len = strlen((char *)laccount_no.arr);
}
if (lliab_no.arr[0] == '\0')
{
b=0;
for (m=0;m<11;m++)
{
lliab_no.arr[b] = lstr[m];
b++;
}
lliab_no.arr[b] = '\0';
lliab_no.len = strlen((char *)lliab_no.arr);
}
if (lbank.arr[0] == '\0')
{
b=0;
for (m=0;m<12;m++)
{
lbank.arr[b] = lstr[m];
b++;
}
lbank.arr[b] = '\0';
lbank.len = strlen((char *)lbank.arr);
}
*/
sprintf(buffer,"%03d%s%s%s%s%c%s%s%s%s",
lbranch_no,(char *)laccount_no.arr,(char *)lcust_base.arr,(char *)lliab_no.arr,
(char *)lbank.arr,laction,(char *)lstatus.arr,(char *)lseverity.arr,
(char *)lerror_code.arr,(char *)lerror_message.arr);
memcpy(md.Format,MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH);
md.Persistence = MQPER_PERSISTENT;
g_curtime[0] = '\0';
get_current_time("%Y%m%d%H%M%S",g_curtime);
excp_srl_num1[0] = '\0';
sprintf(excp_srl_num1,"%s%s%05d","IWBSI",g_curtime,lcount);
strcpy(ack_app_id, "IW_TRADE_SUB_ACK");
memcpy(md.MsgId, excp_srl_num1, sizeof(md.MsgId) );
memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId) );
memcpy(md.ApplIdentityData,ack_app_id, sizeof(md.ApplIdentityData));
printf("The message id os ",md.MsgId);
printf("Corel ID os ",md.CorrelId);
memcpy(md.AccountingToken,MQACT_NONE,sizeof(md.AccountingToken));
memcpy(md.UserIdentifier,"IWH",sizeof(md.UserIdentifier));
pmo.Options = MQPMO_SYNCPOINT +
MQPMO_FAIL_IF_QUIESCING, +
MQPMO_SET_ALL_CONTEXT;
printf("Completed pmo OPtoins");
messlen = strlen(buffer);
MQPUT(Hcon, /* connection handle */
Hobj, /* object handle */
&md, /* message descriptor */
&pmo, /* default options (datagram) */
messlen, /* message length */
buffer, /* message buffer */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQPUT_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQPUT_FAIL");
}
goto sqlerror;
}
if (fprintf(lfile_handle,"%s%s%s\n",md.MsgId,":",buffer) < 0)
{
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-WRITE_FAILED",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"Write to file failed","","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-WRITE_FAILED");
}
goto sqlerror;
}
lcount = lcount+1;
EXEC SQL update trd_sub_src
set flg_reply='Y'
where branch_number=:lbranch_no
and insert_sequence=:linsert_seq;
MQCMIT (Hcon, /* connection handle */
&CM1Code, /* completion code */
&CM1Reason); /* reason code */
/* report reason and stop if it failed */
if (CM1Code == MQCC_FAILED)
{
sprintf(v_err_reason,"%s %ld","Reason is",CM1Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCMIT_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQCMIT_FAIL");
}
goto sqlerror;
}
EXEC SQL commit;
} /* END OF FOR LOOP */
fflush(lfile_handle);
fclose(lfile_handle);
if (l_mq_open_flag == 'Y')
{
C_options = 0; /* no close options */
MQCLOSE(Hcon, /* connection handle */
&Hobj, /* object handle */
C_options,
&CompCode, /* completion code */
&Reason); /* reason code */
l_mq_open_flag = 'N';
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCLOS_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQCLOS_FAIL");
}
goto sqlerror;
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC(&Hcon, /* connection handle */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQDISC_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.E-MQDISC_FAIL");
}
goto sqlerror;
}
}
EXEC SQL COMMIT RELEASE;
exit(0);
opdir_prm_not_found:
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-NOTFOUND",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"in opdir_prm_not_found","","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : opdir_prm.E-NOTFOUND");
}
fflush(lfile_handle);
fclose(lfile_handle);
if (l_mq_open_flag == 'Y')
{
C_options = 0; /* no close options */
MQBACK (Hcon, /* connection handle */
&CBKCode, /* completion code */
&CBKReason); /* reason code */
/* report reason and stop if it failed */
if (CBKCode == MQCC_FAILED)
{
sprintf(v_err_reason,"%s %ld","Reason is",CBKReason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCMIT_FAIL",
"TRD_DQ_MSG_PROCESS","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQCMIT_FAIL");
}
EXEC SQL ROLLBACK;
}
MQCLOSE(Hcon, /* connection handle */
&Hobj, /* object handle */
C_options,
&CompCode, /* completion code */
&Reason); /* reason code */
l_mq_open_flag = 'N';
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCLOS_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : opdir_prm.E-MQCLOS_FAIL");
}
EXEC SQL ROLLBACK;
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC( &Hcon, /* connection handle */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQDISC_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : opdir_prm.E-MQDISC_FAIL");
}
EXEC SQL ROLLBACK;
}
}
EXEC SQL ROLLBACK RELEASE;
exit (1);
queue_not_found:
if (fn_log_errors(g_error_log_file,(char *)C_FATAL,"TRADE","E-QNOTDEF",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"queue_not_found","","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : queue_not_found.E-QNOTDEF");
}
fflush(lfile_handle);
fclose(lfile_handle);
if (l_mq_open_flag == 'Y')
{
C_options = 0; /* no close options */
MQBACK (Hcon, /* connection handle */
&CBKCode, /* completion code */
&CBKReason); /* reason code */
/* report reason and stop if it failed */
if (CBKCode == MQCC_FAILED)
{
sprintf(v_err_reason,"%s %ld","Reason is",CBKReason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCMIT_FAIL",
"TRD_DQ_MSG_PROCESS","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQCMIT_FAIL");
}
EXEC SQL ROLLBACK;
}
MQCLOSE(Hcon, /* connection handle */
&Hobj, /* object handle */
C_options,
&CompCode, /* completion code */
&Reason); /* reason code */
l_mq_open_flag = 'N';
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCLOS_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : queue_not_found.E-MQCLOS_FAIL");
}
EXEC SQL ROLLBACK;
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC( &Hcon, /* connection handle */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQDISC_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : queue_not_found.E-MQDISC_FAIL");
}
EXEC SQL ROLLBACK;
}
}
EXEC SQL ROLLBACK RELEASE;
exit (1);
trd_err_not_found:
if (fn_log_errors(g_error_log_file,(char *)C_FATAL,"TRADE","E-QNOTDEF",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"trd_errors_not_found","","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : trd_err.E-QNOTDEF");
}
fflush(lfile_handle);
fclose(lfile_handle);
if (l_mq_open_flag == 'Y')
{
C_options = 0; /* no close options */
MQBACK (Hcon, /* connection handle */
&CBKCode, /* completion code */
&CBKReason); /* reason code */
/* report reason and stop if it failed */
if (CBKCode == MQCC_FAILED)
{
sprintf(v_err_reason,"%s %ld","Reason is",CBKReason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCMIT_FAIL",
"TRD_DQ_MSG_PROCESS","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQCMIT_FAIL");
}
EXEC SQL ROLLBACK;
}
MQCLOSE(Hcon, /* connection handle */
&Hobj, /* object handle */
C_options,
&CompCode, /* completion code */
&Reason); /* reason code */
l_mq_open_flag = 'N';
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCLOS_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : trd_err.E-MQCLOS_FAIL");
}
EXEC SQL ROLLBACK;
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC( &Hcon, /* connection handle */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQDISC_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : trd_err.E-MQDISC_FAIL");
}
EXEC SQL ROLLBACK;
}
}
EXEC SQL ROLLBACK RELEASE;
exit(1);
sqlerror:
sprintf(v_sqlcode,"%s%s","ORA-",sqlca.sqlcode);
if (fn_log_errors(g_error_log_file,(char *)C_FATAL,"TRADE","E-OTHERS",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
"In sqlerror","",v_sqlcode,sqlca.sqlerrm.sqlerrmc) != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-OTHERS");
}
fflush(lfile_handle);
fclose(lfile_handle);
if (l_mq_open_flag == 'Y')
{
C_options = 0; /* no close options */
MQBACK (Hcon, /* connection handle */
&CBKCode, /* completion code */
&CBKReason); /* reason code */
/* report reason and stop if it failed */
if (CBKCode == MQCC_FAILED)
{
sprintf(v_err_reason,"%s %ld","Reason is",CBKReason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCMIT_FAIL",
"TRD_DQ_MSG_PROCESS","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQCMIT_FAIL");
}
EXEC SQL ROLLBACK;
}
MQCLOSE(Hcon, /* connection handle */
&Hobj, /* object handle */
C_options,
&CompCode, /* completion code */
&Reason); /* reason code */
l_mq_open_flag = 'N';
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQCLOS_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQCLOS_FAIL");
}
EXEC SQL ROLLBACK;
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC( &Hcon, /* connection handle */
&CompCode, /* completion code */
&Reason); /* reason code */
/* report reason, if any */
if (Reason != MQRC_NONE)
{
sprintf(v_err_reason,"%s %ld","Reason is",Reason);
if (fn_log_errors( g_error_log_file,(char *)C_FATAL,"TRADE","E-MQDISC_FAIL",
"TRD_STG_SUBCRIPTION","TRADE ENGINE","","STAGING",
v_err_reason,"","","") != SUCCESS)
{
fn_std_err("Error fn_log_errors : MAIN.sqlerror.E-MQDISC_FAIL");
}
EXEC SQL ROLLBACK;
}
}
EXEC SQL ROLLBACK RELEASE;
exit(1);
} |
|
Back to top |
|
 |
wschutz |
Posted: Fri Mar 17, 2006 2:26 am Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
I'd like to help but:
(1) You didn't make the coding changes I suggested
(2) You didn't tell us what ReasonCode you get from the MQOPEN / MQPUT when you do make the changes... _________________ -wayne |
|
Back to top |
|
 |
mvic |
Posted: Fri Mar 17, 2006 2:55 am Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
tanuj33 wrote: |
O_options = MQOO_OUTPUT +/* open queue for output */
MQOO_FAIL_IF_QUIESCING, +
MQOO_SET_ALL_CONTEXT ;/* but not if MQM stopping */ |
I may have found the problem. First I thought the above code would never compile. So I tried it locally, to prove my point. I surprised myself. The above is evidently valid C, but the extra comma is producing an effect that could be causing the problem.
The effect in tanuj33's code is that MQOO_SET_ALL_CONTEXT is missing from the flags in O_options, and MQPMO_SET_ALL_CONTEXT is missing from the flags in pmo.Options.
tanuj33, if you want those flags, remove the commas.
See this output:
Code: |
open options
0x00002010
0x00000010
0x00002000
0x00000800
put options
0x00002002
0x00000002
0x00002000
0x00000800 |
from this code:
Code: |
#include <stdio.h>
#include <cmqc.h>
int main(void)
{
MQLONG O_options;
MQLONG put_Options;
O_options = MQOO_OUTPUT +/* open queue for output */
MQOO_FAIL_IF_QUIESCING, +
MQOO_SET_ALL_CONTEXT ;/* but not if MQM stopping */
put_Options = MQPMO_SYNCPOINT +
MQPMO_FAIL_IF_QUIESCING, +
MQPMO_SET_ALL_CONTEXT;
printf("open options\n");
printf("0x%08X\n", O_options);
printf("0x%08X\n", MQOO_OUTPUT);
printf("0x%08X\n", MQOO_FAIL_IF_QUIESCING);
printf("0x%08X\n", MQOO_SET_ALL_CONTEXT);
printf("put options\n");
printf("0x%08X\n", put_Options);
printf("0x%08X\n", MQPMO_SYNCPOINT);
printf("0x%08X\n", MQPMO_FAIL_IF_QUIESCING);
printf("0x%08X\n", MQPMO_SET_ALL_CONTEXT);
return 0;
} |
|
|
Back to top |
|
 |
wschutz |
Posted: Fri Mar 17, 2006 3:32 am Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
"C" is just so much fun! Who would imagine that:
Code: |
printf("The answer is %d\n", 012); |
produces
(Yes yes, octal base is so popular these days...)
Back to the subject (sort of), that seems to be a "comma operator" (
http://www.eskimo.com/~scs/cclass/int/sx4db.html ), but what I can't figure out is that it should be returing the SET_ALL_CONTEXT value...
Quote: |
Precisely stated, the meaning of the comma operator in the general expression
e1 , e2
is ``evaluate the subexpression e1, then evaluate e2; the value of the expression is the value of e2.'' |
_________________ -wayne |
|
Back to top |
|
 |
tanuj33 |
Posted: Fri Mar 17, 2006 3:40 am Post subject: |
|
|
Newbie
Joined: 13 Mar 2006 Posts: 6
|
Hi,
After removing comma in options for MQOpen & MQPUT
I got error
MQOPEN failed with reason code = 2035 |
|
Back to top |
|
 |
|
|
 |
Goto page 1, 2 Next |
Page 1 of 2 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|