|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
MQGET Node and ResetContentDescriptor Node |
« View previous topic :: View next topic » |
Author |
Message
|
sgiles |
Posted: Thu Feb 14, 2002 8:46 pm Post subject: |
|
|
Newbie
Joined: 12 Feb 2002 Posts: 8 Location: Melbourne , Australia
|
I am looking for some advice on a problem I am having creating a message flow in WMQI V2.1.
The message flow reads a message from the input queue and then uses the data contained within that message to read another queue via the correlation id. Once this is retrieved then both sets of information are used to produce one output message.
I have constructed a message flow as
Input node -> ComputeNode -> MQGet Node -> ResetContentDescriptor node -> Compute node -> Output node
The input mode is defined to read the message (a comma delimited format) and parse the details into the internal tree structure. The MQGet node is defined to put the message into the message tree location Root.Blob.Blob. The ResetContentDescriptor node is expected to change the bit stream into a formatted tree of data by setting the message domain = MRM, and message set, message type and message format equal to the same values that are in the input node (the first and second message has the same structure).
When the flow is executed, the input node is able to successfully read the data and parse it into the Message MRM defintion defined. (the trace output shows this). The compute node and the MQGet node are able to obtain the appropriate message from the second queue, (again the trace shows data in the Root.blob field) , however at the resetDescriptor node an exception is raised saying that the "The field length was less than maxLen" ,Severity = 3, Number = 2230
I notice in the trace output that when the message is read via the input node the fields in the MRM are correctly poplulated with inbound message data. When the second message is read by the MQGET node, the trace shows that the first field in the Root.MRM has been changed to '</Blob>' and Root.Blob.Blob field contains the data from the second message.
I expected the resetdescriptor would take the data in blob format and parse it using the MRM message definitions into a message tree stucture. Unfortuntatley this is not happening.
My defintion of a node is perhaps incorrect or the value of a field in the tree has not been reset or this may not be possible using this method etc...
Any comments appreciated.
Thanks
Stephen |
|
Back to top |
|
 |
kirani |
Posted: Fri Feb 15, 2002 10:10 am Post subject: |
|
|
Jedi Knight
Joined: 05 Sep 2001 Posts: 3779 Location: Torrance, CA, USA
|
Stephen,
I think the value in the tree is not reset properly. Could you post ESQL code of your first compute node?
As per your logic, you only need Correlation ID field from the input message to read message from another queue using MQGet node. Can you try passing only "Message Headers" in your First compute node? This will delete the Message Body for the input message, which will be reconstructed in MQGet node. Also try to retrieve data into Root."BLOB"."BLOB" field in MQGet node.
Regards,
Kiran
|
|
Back to top |
|
 |
sgiles |
Posted: Sun Feb 17, 2002 10:33 pm Post subject: |
|
|
Newbie
Joined: 12 Feb 2002 Posts: 8 Location: Melbourne , Australia
|
Kiran,
Thanks for your suggestion.
When I defined my problem I didn't make it clear that the correlation ID is determined from the body of the data and not from the correlation ID in the header, also that the output message needs data from the first message so the message body must be passed as well as the header.
In order to test your suggestion, I have only passed the "message header" and put the data into Root."BLOB"."BLOB".
I have used the debugger in the control center to step through the execution and when the broker attempts to execute the ResetContentDescriptor node the broker produces a BIP2160E message with the following text.
MQSI_SAMPLE_BROKER.default) Broker process terminating abnormally: The following diagnostic information will be required when contacting IBM: '
Severe Abend Error detected.
For full details see Abend File: C:/Program Files/IBM/WebSphere MQ Integrator 2.1/errors/MQSI_SAMPLE_BROKER.default.403.475.Abend
A summary of the Error follows:
An Unhandled Exception detected in process 403, on thread 0x1DB.
Type: EXCEPTION_ACCESS_VIOLATION (C0000005).
Address: 001B:28D00AC1.
The thread could not read from memory address 0x00000120.
'.
A broker process is terminating abnormally.
Contact your IBM support center.
The execution group then shuts down and when it restarts, sets of messages (BIP2275E, BIP5009E, BIP5004E) tell me that Database records associated with message flow eg '417afe16-ec00-0000-0080-e81569a9b6a3' are not valid, and parsing errors have occured.
I have tried shutting down the broker, restart the machine etc.., but to no avail. Whenever the broker is restarted the sets of messages are re-produced.
Any ideas on how I can remove the offending database records and then how to prevent the abend. I am hoping I do not need to delete the broker and start again.
Thanks
Stephen |
|
Back to top |
|
 |
kirani |
Posted: Mon Feb 18, 2002 10:38 am Post subject: |
|
|
Jedi Knight
Joined: 05 Sep 2001 Posts: 3779 Location: Torrance, CA, USA
|
Stephen,
Could you try removing the message flow from your Execution Group and do a complete deploy at EG or broker level?
Regards,
Kiran
|
|
Back to top |
|
 |
mmunaro |
Posted: Wed Jul 10, 2002 11:58 am Post subject: Were you able to solve your problem? |
|
|
Newbie
Joined: 28 May 2002 Posts: 2
|
I'm having a similar problem. The resetcontentdescriptor isn't able to parse the blob message to an xml message. What did you do to solve your problem, if you did solve it....
TIA
Maria |
|
Back to top |
|
 |
jdouch |
Posted: Wed Jul 10, 2002 11:40 pm Post subject: |
|
|
Apprentice
Joined: 31 May 2002 Posts: 32 Location: London, UK
|
Hi,
the mqget function can prove problematical in trying to get it working correctly, but i have managed to do so.
the process i used was as follows.
1. have a compute node to
- The mqget uses either the msgid or correlid in MQMD. if your using the correlid within the message then you need to set the MQMD value to this.
- save off the inbound message to the localenvironment area for example. if you do not save this message it will get overwritten by the message you receive back using the mqget.
- finish by using SET OutputRoot.BLOB.UnknownParserName='MQSTR';
2. Follow the compute node by the mqget - set the message tree location to Root.BLOB.BLOB.
3. Follow this by a resetcontentdescriptor with your MRM details, this should result in you now having your message from your cache queue
4. compute node to bring back the message from localenvironment area and merge the messages. first set the following again SET OutputRoot.BLOB.UnknownParserName='MQSTR';
this should work i think. i thing that is probably not applicable to you is that saving attribute xml to the localenvironment does not work properley.
thanks
J _________________ Julian Douch
E-business Solutions Consultant
WMQ/WMQI Specialist |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
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
|
|
|
|