T.rob,

The alternative I proposed is pretty much what you described in the second
method, e.g. the msgids would be well known, and therefore could be used to
remove a set of messages.  I wholly agree with you that a generalized queue
program, e.g. utility, should not be reliant upon the "position" of
messages.  But, as you well know, applications can be designed around some
pretty strange requirements, and it seems that what Roger wants could, in
fact, be contrived.  Even though IBM advocates certain coding/design
practices, there are rare instances where a different approach may yield
something good, or useful.  I don't know if this is one of those cases, or
not, but it does seem interesting.




             "Wyatt, T.rob"
             <[EMAIL PROTECTED]
             OFAMERICA.COM>                                             To
             Sent by: MQSeries         [EMAIL PROTECTED]
             List                                                       cc
             <[EMAIL PROTECTED]
             n.AC.AT>                                              Subject
                                       Re: Message under cursor

             08/02/2004 02:33
             PM


             Please respond to
               MQSeries List
             <[EMAIL PROTECTED]
                 n.AC.AT>






Rick,

The problem with this approach is that MQ gives you two types of GET and
neither involve a cursor that you control directly.  The first type of GET
is that you take whatever the next message is that the QMgr gives you in
the current logical view of the queue.  In this method, you GET messages
from the head of the queue and advance only by doing destructive GETs.  The
other method is where you GET a message that you know for sure you want
because you already browsed to it or because you know the MsgID or
CorrellID.  There is no option to browse to a certain position and then
destructively GET successive messages.

In your scenario where you get exclusive control of the queue, one way to
simulate what Roger wants to do would be to do GETs under syncpoint to lock
up the messages you want to keep, and then doing GETs outside of syncpoint
to delete the target messages.  A BACKOUT then restores the unwanted
messages to the queue.

But the takeaway from this is that the concept of your "position" in a
queue is not generally valid.  It may very well be valid in the context of
specific applications where the variables are well controlled (i.e. - you
know and control the readers and writers, the message flows are well
understood and everybody plays by the rules), but a generalized queue
program should not rely on position.  This is especially true for a utility
program such as you might get from Capitalware or Reconda, for example.  In
this case, the vendor does not know beforehand whether queues are FIFO or
Priority, whether logical or physical ordering is used, whether messages
will be segmented or grouped, how many readers and writers are active, and
so on.  In this context it is difficult to infer anything about the "next"
messages, and cursor position is an abstract concept at best.

Messages, on the other hand, are concrete.  So IBM gave us a way to process
all the messages (successive GETs) or to process only selected messages
that we already know something about (because we browsed them or know the
MsgID and/or CorrelID), but not the ability to select messages based solely
on position.  The fact that IBM does not provide a cursor positioning
mechanism seems, IMHO, appropriate and the behavior Roger describes is what
I would expect.

-- T.Rob



-----Original Message-----
From: MQSeries List [mailto:[EMAIL PROTECTED] Behalf Of Rick
Tsujimoto
Sent: Monday, August 02, 2004 12:32 PM
To: [EMAIL PROTECTED]
Subject: Re: Message under cursor


T.rob,

If many ways a queue is similar to a random access file, where a message
can be read sequentially, or via a "key",deleted (destructive read) and
written by one or more apps.  Normally, when a file is being updated,
exclusive control is established beforehand to ensure the integrity of the
operation.  What if Roger did the following:

1. browse till he found the(starting) essage he wants
2. record the "key" (msgid) of the message
3. reopen the queue with exclusive control
4. perform the destructive gets, using the msgid he store earlier to
establish his position

This would effectively prevent new messages from being inserted in the
queue, which could effect his logical view of the message order.  I haven't
tried it out, so it's simply a "what if" proposition.  One drawback is the
small window that's opened between the close and re-open of the queue for
exclusive control, where messages could be inserted/gotten.

Instructions for managing your mailing list subscription are provided in
the Listserv General Users Guide available at http://www.lsoft.com
Archive: http://vm.akh-wien.ac.at/MQSeries.archive

Instructions for managing your mailing list subscription are provided in
the Listserv General Users Guide available at http://www.lsoft.com
Archive: http://vm.akh-wien.ac.at/MQSeries.archive

Reply via email to