Hi Aidan,

Now following commands works like this for me.

view
-------
queue view -n message_queue           view all the messages in the queue
message_queue
queue view -n message_queue -t 5    view top five messages in the queue
message_queue

delete
----------
queue delete -n message_queue      delete all the messages from the queue
message_queue after giving a prompt(if user say y)
queue delete -n message_queue -t 5 delete top five messages from the queue
message_queue

move
---------

queue move -n1 message_queue -n2 ping -fmid 45 -tmid 43
move messages between fmid and tmid message id's  from  queue message_queue
to ping.
To specify the first queue you can using -v1 <virtualhost> if u need.

viewcontent
--------------------

queue viewcontent -n message_queue -id 45            view the content of the
message with the given message id

Now I have to start that report generation mode.
Aidan could you please advice me on how to implement that.

Cheers
Lahiru




On Sun, Aug 10, 2008 at 11:13 PM, lahiru gunathilake <[EMAIL PROTECTED]>wrote:

> Hi Martin,
>
> On Sun, Aug 10, 2008 at 6:23 PM, Martin Ritchie <[EMAIL PROTECTED]>wrote:
>
>> 2008/8/10 lahiru gunathilake <[EMAIL PROTECTED]>:
>> > Hi Martin and Aidan,
>> >
>> > On Sat, Aug 9, 2008 at 4:31 PM, Martin Ritchie <[EMAIL PROTECTED]>
>> wrote:
>> >
>> >> 2008/8/8 lahiru gunathilake <[EMAIL PROTECTED]>:
>> >> > Hi Martin,
>> >> >
>> >> > Yes, I think Aidan will agree with this idea.
>> >> >
>> >> > On Fri, Aug 8, 2008 at 10:27 PM, Martin Ritchie <[EMAIL PROTECTED]
>> >
>> >> wrote:
>> >> >
>> >> >> 2008/8/7 Aidan Skinner <[EMAIL PROTECTED]>:
>> >> >> > On Thu, Aug 7, 2008 at 6:26 AM, lahiru gunathilake <
>> [EMAIL PROTECTED]
>> >> >
>> >> >> wrote:
>> >> >> >
>> >> >> >> On Thu, Aug 7, 2008 at 9:13 AM, lahiru gunathilake <
>> >> [EMAIL PROTECTED]
>> >> >> >wrote:
>> >> >> >
>> >> >> > Hey dude,
>> >> >> >>> I have implemented the delete command. It works like this,
>> >> >> >>> queue delete -n ping -v development -t 3 <have to specify the
>> >> >> virtualhost
>> >> >> >>> in order to get a single queue object> : This delete top three
>> >> messages
>> >> >> from
>> >> >> >>> the specified queue.
>> >> >> >
>> >> >> > Sweet! Now our users can unclog stuck brokers!
>> >> >> >
>> >> >> >>> If user didn't give the -t argument all the messages will be
>> deleted
>> >> >> from
>> >> >> >>> the queue.
>> >> >> >
>> >> >> > I think that's a little risky, I'm quite forgetful and often try
>> to
>> do
>> >> >> > things before I've had my 3rd cup of tea (which is the one that
>> turns
>> >> >> > me into a functional person) and I know I'd end up blowing away a
>> >> >> > queue by mistake. I think this should be an error, or at least a
>> "are
>> >> >> > you sure? y/N" prompt
>> >> >> >
>> >> >> >>> I think the method I'm suppose to call moveMessages and I have
>> to
>> >> give
>> >> >> >>> three arguments ( from MessageId, to MessageId,Queue). Could you
>> >> please
>> >> >> tell
>> >> >> >>> me what does those mean.
>> >> >> >>>
>> >> >> >> Do you know any way to get MessageId's ?
>> >> >> >
>> >> >> > They should be part of the Message object,
>> >> >> > Queue.getMessagesOnQueue().getMessage().getMessageId()
>> >> >> >
>> >> >> > - Aidan
>> >> >> > --
>> >> >> > Apache Qpid - World Domination through Advanced Message Queueing
>> >> >> > http://cwiki.apache.org/qpid
>> >> >> > "Nine-tenths of wisdom consists in being wise in time." - Theodore
>> >> >> Roosevelt
>> >> >>
>> >> >> When thinking about the usecase for moving message from queue A to
>> >> >> queue B I think the best thing to do might be to implement the
>> viewing
>> >> >> of Messages first. This will allow the user to identify the messages
>> >> >> on the queue and select then provide you with the message ids they
>> >> >> wish to move.
>> >> >>
>> >> >> Having a view command that starts by displaying message ID and
>> header
>> >> >> information would be a good start.
>> >> >>
>> >> >> This will allow the identification of a message which can then be
>> used
>> >> >> in the move command.
>> >> >>
>> >> >> Looking at the jmx method you can do
>> >> >> view <queue> <num msgs> [<offset>]
>> >> >
>> >> > Could you please tell me what is the meaning of "index range" with
>> >> > viewMessages JMX method. Is it like this,if user wants to delete the
>> top
>> >> 4
>> >> > messages in the queue, then from index = 1, to index = 4 or is it
>> >> something
>> >> > else.
>> >>
>> >> yes the viewMessages parameters are an index to the messages based on
>> >> their position in the queue. So fromIndex = 1 , toIndex = 4 will give
>> >> you the first 4 messages on the queue.
>> >>
>> >> > And next thing is I want to get some messages in to my broker and
>> test
>> my
>> >> > implementations. Aidan told me that it can be done by running some
>> >> > performance test but I tried by running some scripts but there's no
>> >> messages
>> >> > in queues.
>> >>
>> >> Most of the performance tests will consume all the messages what I
>> >> would suggest is take a look at the jmsexample.direct Consumer and
>> >> Producer. If you start the Consumer then run the Producer you should
>> >> see the Consumer receives the messages and exits. If you run the
>> >> Producer again then 10 messages should be left on the queue called
>> >> 'messageQueue'. If you don't run the Consumer first then you will see
>> >> 'javax.jms.JMSException: 312' as the queue has not been created.
>> >
>> > Thanks Martin,now I can have messages in the Queue message_queue  and
>> delete
>> > command is works fine for me. I have implemented the view command now
>> I'm
>> > getting TabularData object by calling JMX method viewMessages but it's
>> bit
>> > of difficult to get the actual information from the TabularData object.
>> Can
>> > somebody help me to figure out how to get information from TabularData
>> > object.
>> >
>> > This code gives me an Exception, when I run view command like this
>> (queue
>> > view -n message_queue )
>> >
>>
>> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> > TabularData data =
>> > (TabularData)this.mbsc.invoke(queue,this.method1,params,signature);
>> >                    Object keys[] = data.keySet().toArray();
>> >                    CompositeData comdata = data.get(keys);
>> >
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> > javax.management.openmbean.InvalidKeyException: Argument key's length=11
>> is
>> > different from the number of item values, which is 1, specified for the
>> > indexing rows in this TabularData instance.
>> >    at
>> >
>>
>> javax.management.openmbean.TabularDataSupport.checkKeyType(TabularDataSupport.java:805)
>> >    at
>> >
>>
>> javax.management.openmbean.TabularDataSupport.get(TabularDataSupport.java:284)
>> >    at org.apache.qpid.commands.Commandview.viewmessages(Unknown Source)
>> >    at org.apache.qpid.commands.Commandview.execute(Unknown Source)
>> >    at org.apache.qpid.CommandExecusionEngine.runcommand(Unknown Source)
>> >    at org.apache.qpid.CommandLineInterpreter.main(Unknown Source)
>> >
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> > When there's one message in the queue I tried to print the TabularData
>> > object using toSting method it display something like this.
>> >
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> >
>>
>> javax.management.openmbean.TabularDataSupport(tabularType=javax.management.openmbean.TabularType(name=Messages,rowType=javax.management.openmbean.CompositeType(name=Message,items=((itemName=AMQ
>> >
>>
>> MessageId,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=Header,itemType=javax.management.openmbean.ArrayType(name=[Ljava.lang.String;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)),(itemName=Redelivered,itemType=javax.management.openmbean.SimpleType(name=java.lang.Boolean)),(itemName=Size(bytes),itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),indexNames=(AMQ
>> >
>>
>> MessageId)),contents={[22]=javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=Message,items=((itemName=AMQ
>> >
>>
>> MessageId,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=Header,itemType=javax.management.openmbean.ArrayType(name=[Ljava.lang.String;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)),(itemName=Redelivered,itemType=javax.management.openmbean.SimpleType(name=java.lang.Boolean)),(itemName=Size(bytes),itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),contents={AMQ
>> > MessageId=22, Header=[Ljava.lang.String;@1f82982, Redelivered=false,
>> > Size(bytes)=18})})
>> >
>> >
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> > Can someone please tell me how to get the actual information and print
>> them
>> > in to screan.
>> >
>> > Thanks in advance
>> >
>> > Lahiru
>> >
>> >>
>> >>
>> >> Cheers
>> >>
>> >> Martin
>> >>
>> >> > Could you please address my two questions..?
>> >> >
>> >> > Thanks in advance
>> >> > Lahiru
>> >> >
>> >> >>
>> >> >>
>> >> >> viewMessages(<offset>, <num msg>)
>> >> >> This will return details of all the messages currently on the queue.
>> >> >>
>> >> >> Which includes the messageID in the reply.
>> >> >> ViewUtility.populateCompositeWithCompositeData shows how the current
>> >> >> Management interface extracts this information, although it is quite
>> >> >> generic code I hope it is reasonable clear to read.
>> >> >>
>> >> >> from this you can print the msgID list then work up to extracting
>> the
>> >> >> header and other values for the message which it would be nice to be
>> >> >> able to specify on command line:
>> >> >> view <queue> <num msgs> [<offset>] [-show-headers] [-show-content]
>> >> >>
>> >> >> This should make implementing move much easier as you don't need to
>> >> >> progamatically find the ids as the user will provide them
>> >> >>
>> >> >> hope that helps
>> >>
>> > Exactly helped a lot :-)
>> >
>> >>
>> >> >>
>> >> >> Martin
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Martin Ritchie
>> >> >>
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Martin Ritchie
>> >>
>> >
>>
>> Lahiru,
>>
>> I've tried to display the output as a hierarchy for as it helps with
>> understanding the structure. I also put this info together using the
>> ViewUtility and OperationsTabControl classes in the JMX Management tool.
>> Whilst that code is very generic so capable of displaying any TabularData
>> response we can extract the key parts you need. I usually hate HTML emails
>> but I'm hoping that gmail/the-list will not play with the formatting to
>> much
>> so that the code parts and reformatted output are more readable.
>> As I can see it this is what the Management console does the following to
>> display message data:
>>
>>        // data is the results of calling this.mbsc.invoke as in your
>> example above
>>        Set entrySet = data.entrySet();
>>        ArrayList<Map.Entry> list = new ArrayList<Map.Entry>(entrySet);
>>        if (list.size() == 0) {// no data}
>>        CompositeData compositedata =
>> (CompositeData)(list.get(0)).getValue();
>>        //you could iterate over 'list' the UI code just displays the first
>> value hence the get(0)
>>
>>        //with the CompositeDataSupport object (compositedata) you can do
>>        List<String> itemNames = new
>> ArrayList<String>(compositedata.getCompositeType().keySet());
>>
>>        //Which will give you the list of items you can retrieve:
>> AMQMessageID, Header, Relieved, Size
>>        //From here you can get the type of the item:
>>        OpenType itemType =
>> compositedata.getCompositeType().getType(itemName);
>>
>>        //Handy if you want to check that Header is indeed an array
>>        //String Or you can just retrieve the value:
>>       String.valueOf(compositedata.get(itemName))
>>
>>
>> Hope that helps,
>
> Of course Martin it helped me a lot, as I said now view and viewcontent
> commands are working.
> Big Thank You for both of you to help me to get through the data
> modification stuff. I think in example producer is sending empty messages
> without any encoding .... Am I correct ..?
> Now I have to go to sleep(it's 11.30 pm here) since I'm suppose to wakeup
> around 3.45am :-)
>
> Thanks in advanced
>
> Cheers
> Lahiru
>
>>
>>
>> Martin
>>
>>
>> javax.management.openmbean.TabularDataSupport
>> (tabularType=javax.management.openmbean.TabularType
>> (name=Messages,
>> rowType=javax.management.openmbean.CompositeType
>> (name=Message,
>> items=
>> (
>> (itemName=AMQMessageId,
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Long)),
>> (itemName=Header,
>> itemType=javax.management.openmbean.ArrayType
>> (name=[Ljava.lang.String;,
>> dimension=1,
>> elementType=javax.management.openmbean.SimpleType
>> (name=java.lang.String),
>> primitiveArray=false)),
>> (itemName=Redelivered,
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Boolean)),
>> (itemName=Size(bytes),
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Long)
>> )
>> )
>> ),
>> indexNames=(AMQMessageId)
>> ),
>> contents={[22]=javax.management.openmbean.CompositeDataSupport
>> (compositeType=javax.management.openmbean.CompositeType
>> (name=Message,
>> items=
>> (
>> (itemName=AMQMessageId,
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Long)
>> ),
>> (itemName=Header,
>> itemType=javax.management.openmbean.ArrayType
>> (name=[Ljava.lang.String;,
>> dimension=1,
>> elementType=javax.management.openmbean.SimpleType
>> (name=java.lang.String),
>> primitiveArray=false)
>> ),
>> (itemName=Redelivered,
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Boolean)
>> ),
>> (itemName=Size(bytes),
>> itemType=javax.management.openmbean.SimpleType
>> (name=java.lang.Long)
>> )
>> )
>> ),
>> contents={AMQMessageId=22,
>>  Header=[Ljava.lang.String;@1f82982,
>>  Redelivered=false,
>> Size(bytes)=18})})
>>
>> --
>> Martin Ritchie
>>
>
>

Reply via email to