Author |
Message
|
wschutz |
Posted: Thu Jul 21, 2005 12:03 pm Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
Interesting, because on my system this works:
Code: |
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = 1;
|
This even works
Code: |
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = cast(InputRoot.XML.PCF.GET as integer);
|
Where InputRoot.XML.PCF.GET had a value of '1'. _________________ -wayne |
|
Back to top |
|
 |
nina |
Posted: Tue Sep 13, 2005 2:14 pm Post subject: |
|
|
Novice
Joined: 13 Sep 2005 Posts: 11
|
Hi Wayne,
I tried it, but nothing is changing on TEST queue, and message is going to output Queue. I checked the logs, everything seems fine.
Here is the esql:
==================
CALL CopyMessageHeaders();
SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
SET OutputRoot.MQMD.ReplyToQ = 'RAJ_BAK';
-- SET OutputRoot.MQMD.MsgSeqNumber = 1;
CREATE FIELD OutputRoot.MQPCF;
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET refRequest.Type = MQCFT_COMMAND;
-- SET refRequest.StrucLength = MQCFH_STRUC_LENGTH;
-- SET refRequest.Version = MQCFH_CURRENT_VERSION;
SET refRequest.Command = MQCMD_CHANGE_Q;
-- SET refRequest.MsgSeqNumber = 1;
-- SET refRequest.Control = MQCFC_LAST;
-- SET refRequest.ParameterCount = 3;
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = 'TEST';
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL;
SET refRequest.Parameter[3] = MQCA_Q_DESC;
SET refRequest.Parameter[3].* = 'The new description';
set OutputRoot.BLOB.BLOB = asbitstream(OutputRoot.MQPCF);
set OutputRoot.MQPCF = null;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
================================
trace:
===========================
(
(0x01000000):Properties = (
(0x03000000):MessageSet = ''
(0x03000000):MessageType = ''
(0x03000000):MessageFormat = ''
(0x03000000):Encoding = 546
(0x03000000):CodedCharSetId = 819
(0x03000000):Transactional = TRUE
(0x03000000):Persistence = FALSE
(0x03000000):CreationTime = GMTTIMESTAMP '2005-09-13 21:50:29.070'
(0x03000000):ExpirationTime = -1
(0x03000000):Priority = 0
(0x03000000):ReplyIdentifier = X'000000000000000000000000000000000000000000000000'
(0x03000000):ReplyProtocol = 'MQ'
(0x03000000):Topic = NULL
)
(0x01000000):MQMD = (
(0x03000000):SourceQueue = 'RAJ_IN'
(0x03000000):Transactional = TRUE
(0x03000000):Encoding = 546
(0x03000000):CodedCharSetId = 819
(0x03000000):Format = 'MQADMIN '
(0x03000000):Version = 2
(0x03000000):Report = 0
(0x03000000):MsgType = 1
(0x03000000):Expiry = -1
(0x03000000):Feedback = 0
(0x03000000):Priority = 0
(0x03000000):Persistence = 0
(0x03000000):MsgId = X'414d512052414a514d2020202020202069ff264320001a2a'
(0x03000000):CorrelId = X'000000000000000000000000000000000000000000000000'
(0x03000000):BackoutCount = 0
(0x03000000):ReplyToQ = 'RAJ_BAK'
(0x03000000):ReplyToQMgr = 'RAJQM '
(0x03000000):UserIdentifier = 'mquid'
(0x03000000):AccountingToken = X'0000000000000000000000000000000000000000000000000000000000000000'
(0x03000000):ApplIdentityData = ' '
(0x03000000):PutApplType = 11
(0x03000000):PutApplName = '\j2sdk1.4.2_07\bin\javaw.exe'
(0x03000000):PutDate = DATE '2005-09-13'
(0x03000000):PutTime = GMTTIME '21:50:29.070'
(0x03000000):ApplOriginData = ' '
(0x03000000):GroupId = X'000000000000000000000000000000000000000000000000'
(0x03000000):MsgSeqNumber = 1
(0x03000000):Offset = 0
(0x03000000):MsgFlags = 0
(0x03000000):OriginalLength = -1
)
(0x01000000):BLOB = (
(0x03000000):BLOB = X'0100000024000000010000000800000001000000010000000000000000000000030000000400000018000000e0070000b50100000400000054455354030000001000000014000000010000000400000028000000dd070000b501000013000000546865206e6577206465736372697074696f6e00'
)
)
===================
Could you please help me.
thanks in advance. |
|
Back to top |
|
 |
wschutz |
Posted: Tue Sep 13, 2005 3:32 pm Post subject: |
|
|
 Jedi Knight
Joined: 02 Jun 2005 Posts: 3316 Location: IBM (retired)
|
Which queue are you sending this PCF message to (SYSTEM.ADMIN.COMMAND.QUEUE is the right answer)? Did you check to see if there's anytinhg in the dead letter queue? Is the command server running? _________________ -wayne |
|
Back to top |
|
 |
nina |
Posted: Tue Sep 13, 2005 6:02 pm Post subject: |
|
|
Novice
Joined: 13 Sep 2005 Posts: 11
|
Hi Wayne,
I have a message flow, which has MQInput -->Compute-->MQOutPut nodes.
Here is the ESQL Code in compute node:
================================
CALL CopyMessageHeaders();
/* PCF header is following the MQMD header. */
--SET OutputRoot.MQMD.Encoding = 546; -- need remember 273 is unix
SET OutputRoot.Properties.Encoding = 546;
SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
SET OutputRoot.MQMD.ReplyToQ = 'RAJ_BAK';
SET OutputRoot.MQMD.MsgSeqNumber = 1;
/* Command is 'Change Queue: Inhibit GET from queue'. */
CREATE FIELD OutputRoot.MQPCF;
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET refRequest.Type = MQCFT_COMMAND;
SET refRequest.StrucLength = MQCFH_STRUC_LENGTH;
SET refRequest.Version = MQCFH_CURRENT_VERSION;
SET refRequest.Command = MQCMD_CHANGE_Q;
SET refRequest.MsgSeqNumber = 1;
SET refRequest.Control = MQCFC_LAST;
/* First parameter: Queue Name. */
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* ='TEST';
/* Second parameter: Queue Type. */
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL;
/* Third parameter: Allow/Inhibit GET.*/
--SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
--SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
SET refRequest.Parameter[3] = MQCA_Q_DESC;
SET refRequest.Parameter[3].* = 'The new description';
set OutputRoot.BLOB.BLOB = asbitstream(OutputRoot.MQPCF);
set OutputRoot.MQPCF = null;
--set OutputRoot.MQRFH2 = null;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
================================
trace before MQOutput is:
================================
(
(0x01000000):Properties = (
(0x03000000):MessageSet = ''
(0x03000000):MessageType = ''
(0x03000000):MessageFormat = ''
(0x03000000):Encoding = 546
(0x03000000):CodedCharSetId = 437
(0x03000000):Transactional = TRUE
(0x03000000):Persistence = FALSE
(0x03000000):CreationTime = GMTTIMESTAMP '2005-09-14 01:50:27.260'
(0x03000000):ExpirationTime = -1
(0x03000000):Priority = 0
(0x03000000):ReplyIdentifier = X'000000000000000000000000000000000000000000000000'
(0x03000000):ReplyProtocol = 'MQ'
(0x03000000):Topic = NULL
)
(0x01000000):MQMD = (
(0x03000000):SourceQueue = 'RAJ_IN'
(0x03000000):Transactional = TRUE
(0x03000000):Encoding = 546
(0x03000000):CodedCharSetId = 437
(0x03000000):Format = 'MQADMIN '
(0x03000000):Version = 2
(0x03000000):Report = 0
(0x03000000):MsgType = 1
(0x03000000):Expiry = -1
(0x03000000):Feedback = 0
(0x03000000):Priority = 0
(0x03000000):Persistence = 0
(0x03000000):MsgId = X'414d5120434f4e46494742524b5f514d1a7b274320000f01'
(0x03000000):CorrelId = X'000000000000000000000000000000000000000000000000'
(0x03000000):BackoutCount = 0
(0x03000000):ReplyToQ = 'RAJ_BAK'
(0x03000000):ReplyToQMgr = 'CONFIGBRK_QM '
(0x03000000):UserIdentifier = 'ninaraj '
(0x03000000):AccountingToken = X'1601051500000052aac86832621f2a43170a32eb03000000000000000000000b'
(0x03000000):ApplIdentityData = ' '
(0x03000000):PutApplType = 11
(0x03000000):PutApplName = 'WebSphere MQ\bin\amqsput.exe'
(0x03000000):PutDate = DATE '2005-09-14'
(0x03000000):PutTime = GMTTIME '01:50:27.260'
(0x03000000):ApplOriginData = ' '
(0x03000000):GroupId = X'000000000000000000000000000000000000000000000000'
(0x03000000):MsgSeqNumber = 1
(0x03000000):Offset = 0
(0x03000000):MsgFlags = 0
(0x03000000):OriginalLength = -1
)
(0x01000000):BLOB = (
(0x03000000):BLOB = X'0100000024000000010000000800000001000000010000000000000000000000030000000400000018000000e0070000b50100000400000054455354030000001000000014000000010000000400000028000000dd070000b501000013000000546865206e6577206465736372697074696f6e00'
)
)
================================
Message on Output Q:
=================================
C:\>amqsbcg RAJ_OUT CONFIGBRK_QM
AMQSBCG0 - starts here
**********************
MQOPEN - 'RAJ_OUT'
MQGET of message number 1
****Message descriptor****
StrucId : 'MD ' Version : 2
Report : 0 MsgType : 1
Expiry : -1 Feedback : 0
Encoding : 546 CodedCharSetId : 437
Format : 'MQADMIN '
Priority : 0 Persistence : 0
MsgId : X'414D5120434F4E46494742524B5F514D1A7B274320000A08'
CorrelId : X'000000000000000000000000000000000000000000000000'
BackoutCount : 0
ReplyToQ : 'RAJ_BAK '
ReplyToQMgr : 'CONFIGBRK_QM '
** Identity Context
UserIdentifier : 'ninaraj '
AccountingToken :
X'1601051500000052AAC86832621F2A43170A32EB03000000000000000000000B'
ApplIdentityData : ' '
** Origin Context
PutApplType : '11'
PutApplName : 'WebSphere MQ\bin\amqsput.exe'
PutDate : '20050914' PutTime : '01495341'
ApplOriginData : ' '
GroupId : X'000000000000000000000000000000000000000000000000'
MsgSeqNumber : '1'
Offset : '0'
MsgFlags : '0'
OriginalLength : '-1'
**** Message ****
length - 116 bytes
00000000: 0100 0000 2400 0000 0100 0000 0800 0000 '....$...........'
00000010: 0100 0000 0100 0000 0000 0000 0000 0000 '................'
00000020: 0300 0000 0400 0000 1800 0000 E007 0000 '............α...'
00000030: B501 0000 0400 0000 5445 5354 0300 0000 '╡.......TEST....'
00000040: 1000 0000 1400 0000 0100 0000 0400 0000 '................'
00000050: 2800 0000 DD07 0000 B501 0000 1300 0000 '(...▌...╡.......'
00000060: 5468 6520 6E65 7720 6465 7363 7269 7074 'The new descript'
00000070: 696F 6E00 'ion. '
=================================
Checked the DeadletterQ, no messages.
Stopped the command server before putting message, and OPPROCS of SYSTEM.ADMIN.COMMAND.QUEUE is zero.
I put the message on InputQ and it reached to OutputQ.
But QDEPTH for SYSTEM.ADMIN.COMMAND.QUEUE is zero.
PCF message is not being generated.
Do we need to configure SYSTEM.ADMIN.COMMAND.QUEUE anywhere in the message flow?
Could you please help me.
Thanks,
Nina |
|
Back to top |
|
 |
JT |
Posted: Tue Sep 13, 2005 6:29 pm Post subject: |
|
|
Padawan
Joined: 27 Mar 2003 Posts: 1564 Location: Hartford, CT.
|
Quote: |
Do we need to configure SYSTEM.ADMIN.COMMAND.QUEUE anywhere in the message flow? |
How do you expect MQ to act upon your PCF message if it's sitting in a queue (RAJ_OUT) that's not being monitored ?
You didn't set the DestinationList in your ESQL code, so you apparently defined the output queue in the MQOutput node. The problem is you specified RAJ_OUT instead of SYSTEM.ADMIN.COMMAND.QUEUE. |
|
Back to top |
|
 |
nina |
Posted: Tue Sep 13, 2005 7:28 pm Post subject: |
|
|
Novice
Joined: 13 Sep 2005 Posts: 11
|
Hi JT, and Wayne,
now its working.
Thanks for your help.
Regards,
Nina |
|
Back to top |
|
 |
nina |
Posted: Wed Sep 14, 2005 1:22 pm Post subject: |
|
|
Novice
Joined: 13 Sep 2005 Posts: 11
|
Hi All,
Queue Inhibit is working fine for one message. If I have 10 messages on Input Queue, all are processing and trying to inhibit the InputQueue everytime. Also noticed 10 reply messages on ReplyQ.
Only one message has to be processed, and remaining 9 messages should be on InputQ only, as MQGet is inhibited.
But my message flow is not behaving as expected.
Please help me.
Thanks in advance.
Regards,
Nina |
|
Back to top |
|
 |
AndyT |
Posted: Wed Mar 07, 2007 8:38 am Post subject: |
|
|
Novice
Joined: 05 Nov 2003 Posts: 17 Location: Work
|
I am working with PCF messages and have everything working fine. But I do not understand how the ESQL that is setting the 3 parameters is working.
Can anybody enlighten me or direct me to the documentation that explains how this is works?
Code: |
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = 'TEST';
|
|
|
Back to top |
|
 |
Vitor |
Posted: Wed Mar 07, 2007 8:41 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
ESQL Reference manual.
Look up "Anonymous message fields" as a starting point. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
JosephGramig |
Posted: Mon Feb 18, 2008 7:22 am Post subject: Doesn't work for me... |
|
|
 Grand Master
Joined: 09 Feb 2006 Posts: 1244 Location: Gold Coast of Florida, USA
|
Well heck!
I can't get this to work with WMB 6.1 and I never tried it in the other versions. Has anybody else got this working in 6.1?
My message goes to the DLQ with a RC of 65536.
Here is my code:
Code: |
/*****************************
* Assembles PCF command to inhibit GET's from a queue.
*
*/
CALL CopyMessageHeaders();
/* PCF header is following the MQMD header. */
--SET OutputRoot.MQMD.Encoding = 546; -- need remember 273 is unix
SET OutputRoot.Properties.Encoding = 546;
SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
SET OutputRoot.MQMD.ReplyToQ = 'TEST.OUT';
SET OutputRoot.MQMD.MsgSeqNumber = 1;
/* Command is 'Change Queue: Inhibit GET from queue'. */
CREATE FIELD OutputRoot.MQPCF;
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET refRequest.Type = MQCFT_COMMAND;
SET refRequest.StrucLength = MQCFH_STRUC_LENGTH;
SET refRequest.Version = MQCFH_CURRENT_VERSION;
SET refRequest.Command = MQCMD_CHANGE_Q;
SET refRequest.MsgSeqNumber = 1;
SET refRequest.Control = MQCFC_LAST;
/* First parameter: Queue Name. */
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* ='TEST.IN';
/* Second parameter: Queue Type. */
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL;
/* Third parameter: Allow/Inhibit GET.*/
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
-- SET refRequest.Parameter[3] = MQCA_Q_DESC;
-- SET refRequest.Parameter[3].* = 'Joseph was here';
set OutputRoot.BLOB.BLOB = asbitstream(OutputRoot.MQPCF);
set OutputRoot.MQPCF = null;
set OutputRoot.MQRFH2 = null;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
RETURN TRUE;
|
_________________ Joseph
Administrator - IBM WebSphere MQ (WMQ) V6.0, IBM WebSphere Message Broker (WMB) V6.1 & V6.0
Solution Designer - WMQ V6.0
Solution Developer - WMB V6.1 & V6.0, WMQ V5.3 |
|
Back to top |
|
 |
jefflowrey |
Posted: Mon Feb 18, 2008 7:28 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
I've been playing with this a bit, and the flow input message goes onto the DLQ with an App error.
The broker reports an error trying to serialize the PCF message using the PCF parser, because of a complaint about a Type being set on a Parameter, where it's only valid Type on a Command.
Or something like - I'm not on the machine that has the error message. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
fjb_saper |
Posted: Mon Feb 18, 2008 3:41 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
I see you all playing with PCF in ESQL.
I would have thought the natural progression would have been to use a JCN, use MS0B to create the message, read the bytes out of the message and pass them as BLOB to the assembly.... (or use direct connection from MS0B)...
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
jefflowrey |
Posted: Mon Feb 18, 2008 4:04 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
fjb_saper wrote: |
I would have thought the natural progression would have been to use a JCN |
Only if there is otherwise Java skills in house, and otherwise Java in the flow. This isn't a task that requires the use of a JCN - unless there's a bug in the v6.1 PCF parser... - so there's no compelling reason to use it.
 _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
JosephGramig |
Posted: Wed Feb 20, 2008 3:03 pm Post subject: |
|
|
 Grand Master
Joined: 09 Feb 2006 Posts: 1244 Location: Gold Coast of Florida, USA
|
Yep, just tried my code in WMB 6.0.0.3 and it worked...
This is a version difference. |
|
Back to top |
|
 |
sunny_30 |
Posted: Sun Feb 24, 2008 5:15 pm Post subject: |
|
|
 Master
Joined: 03 Oct 2005 Posts: 258
|
Joseph,
What is the platform you tried this code using WMB-6.1? |
|
Back to top |
|
 |
|