ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ Java / JMS » Browsing a queue with MQMO_MATCH_CORREL_ID option.

Post new topic  Reply to topic
 Browsing a queue with MQMO_MATCH_CORREL_ID option. « View previous topic :: View next topic » 
Author Message
meriton
PostPosted: Wed Aug 21, 2002 5:13 pm    Post subject: Browsing a queue with MQMO_MATCH_CORREL_ID option. Reply with quote

Novice

Joined: 07 Aug 2002
Posts: 24

Here is what I am doing get an mq error 2046



public static int doBrowseReply(byte[] corrId)
throws MQException, Exception {
int counter = 0;
if (mQMgr != null) {
try {
int vOpenOptions = MQC.MQOO_BROWSE | MQC.MQOO_FAIL_IF_QUIESCING;
String vReplyQName = mReplyQName;
MQQueue vReplyQ =
mQMgr.accessQueue(vReplyQName, vOpenOptions, null, null, null);
//testing...
if (vReplyQ == null)
mLog.warning("doBrowseReplyQueue - Couldn't access Reply Queue");
//end testing...
for (int i = 0;; i++) {
MQMessage vMsg = new MQMessage();
MQGetMessageOptions vMsgOptions = new MQGetMessageOptions();
vMsgOptions.options = MQC.MQGMO_WAIT;
vMsgOptions.options = MQC.MQMO_MATCH_CORREL_ID;
vMsgOptions.waitInterval = 2000; //milliseconds
if (i == 0)
vMsgOptions.options = vMsgOptions.options | MQC.MQGMO_BROWSE_FIRST;
else
vMsgOptions.options = vMsgOptions.options | MQC.MQGMO_BROWSE_NEXT;
vMsg.correlationId = corrId;
vReplyQ.get(vMsg, vMsgOptions);
vMsg.setDataOffset(0);

String vMsgText = vMsg.readString(vMsg.getMessageLength());
mLog.debug("Message " + (i + 1) + " = " + vMsgText);

counter++;
vMsg.correlationId = null;
} //end for
} catch (MQException MQe) {
if (MQe.reasonCode != 2033)
throw MQe;
} catch (Exception e) {
throw e;
}
} //end if
return counter;
} //end method doBrowseQueue/** *


Thanks
Back to top
View user's profile Send private message
RogerLacroix
PostPosted: Wed Aug 21, 2002 8:31 pm    Post subject: Reply with quote

Jedi Knight

Joined: 15 May 2001
Posts: 3264
Location: London, ON Canada

Hi,

After only a quick review, I see 2 problems:

First Problem:
Code:
vMsgOptions.options = MQC.MQGMO_WAIT;
vMsgOptions.options = MQC.MQMO_MATCH_CORREL_ID;

The 2nd line of code overrides the 1st line.
Code:
vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQMO_MATCH_CORREL_ID + MQC.MQGMO_FAIL_IF_QUIESCING;
Note: Having the "Fail if Quiescing" is a good thing.

Second Problem:
Code:
if (i == 0)
   vMsgOptions.options = vMsgOptions.options | MQC.MQGMO_BROWSE_FIRST;
else
   vMsgOptions.options = vMsgOptions.options | MQC.MQGMO_BROWSE_NEXT;

The 1st time through the loop the program is fine but on the 2nd loop you will have set BOTH "Browse First" and "Browse Next" in the options variable (because you are summing the fields).

Change it to the following:
Code:
if (i == 0)
   vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQMO_MATCH_CORREL_ID + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_FIRST;
else
   vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQMO_MATCH_CORREL_ID + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_NEXT;


later
Roger...
_________________
Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter
Back to top
View user's profile Send private message Visit poster's website
meriton
PostPosted: Wed Aug 21, 2002 8:59 pm    Post subject: Reply with quote

Novice

Joined: 07 Aug 2002
Posts: 24

thanks Roger,

I changed the code but get the same error.

com.ibm.mq.MQException: Completion Code
2, Reason 2046



TIA
Back to top
View user's profile Send private message
RogerLacroix
PostPosted: Thu Aug 22, 2002 8:00 am    Post subject: Reply with quote

Jedi Knight

Joined: 15 May 2001
Posts: 3264
Location: London, ON Canada

Well, it works for me.

Post your code again - the entire thing and I'll have a look.

Note: Use the BBCode of [code] ... [/code] around your code so that it is easier to read.

later
Roger...
_________________
Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter
Back to top
View user's profile Send private message Visit poster's website
meriton
PostPosted: Thu Aug 22, 2002 3:15 pm    Post subject: Reply with quote

Novice

Joined: 07 Aug 2002
Posts: 24

Thanks Roger ,

Here is the code,that thorws a 2046 exception at mq get.

Code:
 
   public static int doBrowseReply(byte[] corrId,int pNumMsgsInBatch)
      throws MQException, Exception {
      int counter = 0;
      if (mQMgr != null) {
         try {
            int vOpenOptions = MQC.MQOO_BROWSE | MQC.MQOO_FAIL_IF_QUIESCING;
            String vReplyQName = mReplyQName;
            MQQueue vReplyQ =
               mQMgr.accessQueue(vReplyQName, vOpenOptions, null, null, null);
            //testing...
            if (vReplyQ == null)
               mLog.warning("doBrowseReplyQueue - Couldn't access Reply Queue");
            //end testing...
            for (int i = 0;; i++) {
               MQMessage vMsg = new MQMessage();
               vMsg.correlationId = corrId;
               MQGetMessageOptions vMsgOptions = new MQGetMessageOptions();
               //vMsgOptions.options = MQC.MQGMO_WAIT;
               vMsgOptions.waitInterval = 2000; //milliseconds
               
            if (i == 0)
               vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQMO_MATCH_CORREL_ID + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_FIRST;
            else
               vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQMO_MATCH_CORREL_ID + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_NEXT;
               vReplyQ.get(vMsg, vMsgOptions);
               vMsg.setDataOffset(0);
                        
               String vMsgText = vMsg.readString(vMsg.getMessageLength());
               mLog.debug("Message " + (i + 1) + " = " + vMsgText);
               
                        
            //check if batch id is the one we want...
            String vBatchId = getBatchId(vMsgText, false);
               if (vBatchId != null) {
                  //if (vBatchId.equalsIgnoreCase(pBatchId))
                  counter++;
                  if( pNumMsgsInBatch == counter ) break;
               }
            
            
            } //end for
         } catch (MQException MQe) {
            if (MQe.reasonCode != 2033)
               throw MQe;
         } catch (Exception e) {
            throw e;
         }
      } //end if
      return counter;
   } //end method doBrowseQueue/** *   
Back to top
View user's profile Send private message
RogerLacroix
PostPosted: Thu Aug 22, 2002 8:34 pm    Post subject: Reply with quote

Jedi Knight

Joined: 15 May 2001
Posts: 3264
Location: London, ON Canada

He, he, he, he ...

I saw your mistake then I made a mistake. There is a difference between the GMO variables options and matchOptions .

Here is the corrected code. I updated 4 lines (see // RML ):
Code:
public static int doBrowseReply(byte[] corrId,int pNumMsgsInBatch)
   throws MQException, Exception {
   int counter = 0;
   if (mQMgr != null) {
      try {
         int vOpenOptions = MQC.MQOO_INQUIRE + MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING; // RML
         String vReplyQName = mReplyQName;
         MQQueue vReplyQ =
            mQMgr.accessQueue(vReplyQName, vOpenOptions, null, null, null);
         //testing...
         if (vReplyQ == null)
            mLog.warning("doBrowseReplyQueue - Couldn't access Reply Queue");
         //end testing...
         for (int i = 0;; i++) {
            MQMessage vMsg = new MQMessage();
            vMsg.correlationId = corrId;
            MQGetMessageOptions vMsgOptions = new MQGetMessageOptions();
            vMsgOptions.matchOptions = MQC.MQMO_MATCH_MSG_ID;   // RML
            vMsgOptions.waitInterval = 2000; //milliseconds

            if (i == 0)
               vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_FIRST; // RML
            else
               vMsgOptions.options = MQC.MQGMO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_BROWSE_NEXT; // RML
            vReplyQ.get(vMsg, vMsgOptions);
            vMsg.setDataOffset(0);

            String vMsgText = vMsg.readString(vMsg.getMessageLength());
            mLog.debug("Message " + (i + 1) + " = " + vMsgText);


            //check if batch id is the one we want...
            String vBatchId = getBatchId(vMsgText, false);
            if (vBatchId != null) {
               //if (vBatchId.equalsIgnoreCase(pBatchId))
               counter++;
               if( pNumMsgsInBatch == counter ) break;
            }


         } //end for
      } catch (MQException MQe) {
         if (MQe.reasonCode != 2033)
            throw MQe;
      } catch (Exception e) {
         throw e;
      }
   } //end if
   return counter;
} //end method doBrowseQueue/** *


later
Roger...
_________________
Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter
Back to top
View user's profile Send private message Visit poster's website
meriton
PostPosted: Thu Aug 22, 2002 10:22 pm    Post subject: Reply with quote

Novice

Joined: 07 Aug 2002
Posts: 24

hi roger,

Its works now,could you tell me how do I count the actual messages that matched the correlationId without actually doing some processing to the message text(see my code getBatchId()).


Thanks
Back to top
View user's profile Send private message
RogerLacroix
PostPosted: Fri Aug 23, 2002 7:27 pm    Post subject: Reply with quote

Jedi Knight

Joined: 15 May 2001
Posts: 3264
Location: London, ON Canada

No, you have to count the matched messages yourself.

later
Roger...
_________________
Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter
Back to top
View user's profile Send private message Visit poster's website
meriton
PostPosted: Sun Aug 25, 2002 1:58 pm    Post subject: Reply with quote

Novice

Joined: 07 Aug 2002
Posts: 24

Thanks Roger
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ Java / JMS » Browsing a queue with MQMO_MATCH_CORREL_ID option.
Jump to:  



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
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.