Problem on CICS Joblog regarding MQ



Support for MQSeries and Websphere Message Oriented Middleware communication systems for z/OS

Problem on CICS Joblog regarding MQ

Postby hakghen » Tue Nov 18, 2008 6:26 pm

Hello again friends,

I'm having to compile a program here (C) that, when used by a CICS transaction, will put some messages on the MQ, to, moreafter, extract them using another program, also in C. However, after I compile and define the transactions, i'm getting a MQOPEN RC (Reason Code) on the joblog, telling me this:

0024TPUT 20081116213714 UserID :ZCON039:
0024TPUT 20081116213714 Opening queue ZCON039.MAINFRAME.CONTEST.PUTQ
0024TPUT 20081116213714 MQOPEN RC: 2082


The source for the C program to put the messages is this as follows, I have to modify something to make it work and came here to ask some help if possible:

#include<stdio.h>                     
#include<cmqc.h>                       
                                       
#define qName ".MAINFRAME.CONTEST.PUTQ"
                                       
#define MsgCount 5                     
                                       
MQLONG persistence[5] =               
{                                     
  MQPER_NOT_PERSISTENT,               
  MQPER_PERSISTENCE_AS_Q_DEF,         
  MQPER_PERSISTENT,                   
  MQPER_PERSISTENT,                   
  MQPER_NOT_PERSISTENT                 
};                                     
                                     
MQLONG syncpoint[5] =                 
{                                     
  MQPMO_NO_SYNCPOINT,                 
  MQPMO_SYNCPOINT,                   
  MQPMO_SYNCPOINT,                   
  MQPMO_NO_SYNCPOINT,                 
  MQPMO_SYNCPOINT                     
};                                   
                                     
MQLONG priority[5] =                 
{                                     
  0,                                 
  MQPRI_PRIORITY_AS_Q_DEF,           
  7,                                 
  0,                                 
  0                                   
};                                   
                                   
MQLONG msgLen[5] =                 
{                                   
  100,                             
  1000,                             
  100000,                           
  1000,                             
  100                               
};                                 
                                   
int PutMessages(MQHCONN, MQHOBJ);   
                                   
int main(int argc, char** argv)     
{                                   
  MQOD myOD = {MQOD_DEFAULT};       
  MQHOBJ myOBJ;                     
  MQHCONN myHConn;                 
  MQLONG mqcc, mqrc;               
   char* pUser;                                                     
   int retcode;                                                     
                                                                   
                                                                   
   myHConn = MQHC_DEF_HCONN;                                       
   pUser = USERID;                                                 
                                                                   
   printf("UserID :%s:\n", pUser);                                 
                                                                   
                                                                   
   myOD.ObjectType = MQOT_Q;                                       
   strcpy(myOD.ObjectName, pUser);                                 
   memcpy(myOD.ObjectName+strlen(pUser), qName, strlen(qName));     
                                                                   
   printf("Opening queue %s\n", myOD.ObjectName);                   
                                                                   
   MQOPEN(myHConn, &myOD, MQOO_INPUT_SHARED, &myOBJ, &mqcc, &mqrc);
   printf("MQOPEN RC: %d\n", mqrc);                                 
                                                           
   if( mqrc != MQRC_NONE )                                 
     exit(3);                                               
                                                           
   retcode = PutMessages(myHConn, myOBJ);                   
                                                           
   return(retcode);                                         
 }                                                         
                                                           
                                                           
 int PutMessages(MQHCONN hConn, MQHOBJ hObj)               
 {                                                         
   int iMsg;                                               
   MQMD myMD = {MQMD_DEFAULT};                             
   MQPMO myPMO = {MQPMO_DEFAULT};                           
   MQLONG mqcc, mqrc;                                       
   char* pBuffer;                                           
   int retcode;                                             
                                                             
   retcode = 0;                                             
                                                             
   pBuffer = (char*)malloc(100000);                         
   if( pBuffer == NULL )                                     
   {                                                         
     printf("unable to allocate buffer\n");                 
     exit(21);                                               
   }                                                         
                                                             
                                                             
   for( iMsg = 0; iMsg < MsgCount; iMsg++ )                 
   {                                                         
     printf("Putting message %d\n", iMsg);                   
                                                             
     myMD.Persistence = persistence[iMsg];                   
     myMD.Priority = priority[iMsg];                         
     memset( myMD.MsgId, 0, MQ_MSG_ID_LENGTH);               
     memset( myMD.CorrelId, 0, MQ_CORREL_ID_LENGTH);               
                                                                   
     myPMO.Options = syncpoint[iMsg];                             
                                                                   
     memset(pBuffer, 0, 100000);                                   
     sprintf(pBuffer, "Message %d Length %d", iMsg, msgLen[iMsg]);
                                                                   
     MQPUT(hConn, hObj, &myMD, &myPMO, msgLen[iMsg], pBuffer,     
           &mqcc, &mqrc);                                         
                                                                   
     printf("Message %d MQRC: %d\n", iMsg, mqrc);                 
     retcode = (int)mqrc;                                         
     if( mqrc != MQRC_NONE )                                       
     {                                                             
       EXEC CICS SYNCPOINT ROLLBACK;                               
       break;                                                     
     }                                                             
   }                                                               
                                     
   return(retcode);                 
                                     
 }                                   


Well, hope this information helps.
Thanks once again for all the help in advance!

[]'s,

Andre Luiz
[]'s,

Hakghen
User avatar
hakghen
 
Posts: 59
Joined: Thu Sep 11, 2008 8:15 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Problem on CICS Joblog regarding MQ

Postby hakghen » Wed Nov 19, 2008 6:30 am

I found out that this error (RC: 2082) has this description.:

2082 (X'0822') MQRC_UNKNOWN_ALIAS_BASE_Q Explanation: An MQOPEN or MQPUT1 call was issued specifying an alias queue as the target, but the BaseQName in the alias queue attributes is not recognized as a queue name. This reason code can also occur when BaseQName is the name of a cluster queue that cannot be resolved successfully. Completion Code: MQCC_FAILED Programmer Response: Correct the queue definitions.


But the qName isn't, invalid, I already defined the MQ line to be used in this JCL.:

//ZCDEFQ JOB MSGCLASS=H                                             
//* INSTRUCTIONS                                                   
//*                                                                 
//* BEFORE SUBMITTING THIS JCL IT IS NECESSARY TO TAILOR IT. REPLACE
//* THE FOLLOWING WITH APPROPRIATE VALUES:                         
//* &JOBPREFIX - THE PREFIX FOR THIS JOB                           
//* &USER      - THE USERID YOU ARE RUNNING UNDER                   
//*                                                                 
//DEFQ     EXEC PGM=CSQUTIL,PARM='MQ01'                             
//STEPLIB  DD DISP=SHR,DSN=WMQ.V600.SCSQANLE                       
//         DD DISP=SHR,DSN=WMQ.V600.SCSQAUTH                       
//OUTPUTA  DD SYSOUT=*                                             
//SYSPRINT DD SYSOUT=*                                             
//SYSIN    DD *                                                     
 COMMAND DDNAME(CMDINP)                                             
//CMDINP   DD *                                             
DEFINE QLOCAL(ZCON039.MAINFRAME.CONTEST.PART3) -             
MAXMSGL(10000) DEFPRTY(8) DEFPSIST(YES) PUT(DISABLED) REPLACE
DEFINE QALIAS(ZCON039.MAINFRAME.CONTEST.PUTQ) -             
TARGQ(ZCON039.MAINFRAME.CONTEST.PART4) REPLACE               
/*                                                           


I also tried changing the qName on the C code to ZCON039.MAINFRAME.CONTEST.PUTQ, but it gave me an unknown job, because as in stated on the code afterwards, it appends my username (ZCON039) to the qName (.MAINFRAME.CONTEST.PUTQ).

I'm into this error for 3 days and nothing... Any help? :(

Thanks in advance!

[]'s!
[]'s,

Hakghen
User avatar
hakghen
 
Posts: 59
Joined: Thu Sep 11, 2008 8:15 pm
Has thanked: 0 time
Been thanked: 0 time


Return to WebSphere MQ

 


  • Related topics
    Replies
    Views
    Last post