I’m working in an environment that uses the IBM WBI Message Broker v5.x along with the WM Integration Server v6.5. The IS acts in the adapter layer as a “super-adapter” to enable conversations between WBI and SAP, legacy applications, flat-files, etc. It’s a pretty straight forward and potentially a very robust environment. But there IS a problem.
IBM WMQ uses a myriad of message headers in different situations, sometimes in combination. The RFH2 header is often used to pass custom information/instructions between applications. In a typical WBI Message Broker environment, for example, the mcd folder of the RFH2 header is used to identify the type of message that the broker is receiving; the psc folder is used to provide publication information to the broker. Queues receiving WBI publications receive them with the RFH2 header in the message (the MQMD specifies a format of MQRFH2, the RFH2 structure specifies the format of the following header, if there is one, or the format of the message payload, this continues until the format of message payload is defined). That’s pretty standard WMQ messaging stuff.
The problem I’ve encountered is that WM Listeners and Adapter GET Services generate an exception when they encounter a message containing an RFH2 header, and route the message to the dead letter queue with a DLH reason of MQFB_APPL_TYPE_ERROR. This is NOT helpful!
Has anyone discovered a way to deal with this issue – how to use the WM WMQ Adapter v6 to read WMQ messages that contain headers other than just the MQMD (that includes not only the RFH2, but also the IMS header, the DLH header, the CICS header, etc. You get the idea…).
The answer, for all of those who have shown such a keen interest in this question, is MQS_Fix20. It seems there is a problem with the WMQ v.6 adapter as delivered (with SP1). It throws an exception if it encounters a RFH2 header that contains a usr folder but does NOT contain a jms folder. Tests with MQS_Fix20 applied look very encouraging thus far.
Dave, thanks for posting the solution. I think you were down in a level of detail of the MQ Adapter that few of us have encountered. Glad WM was able to turn around a fix for you in a reasonable amount of time.
Not a problem, Mark. I’ve been away from WM (and wmusers) for a while, working pretty exclusively in the WebSphere arena. It feels great to be back!
From my perspective, this problem is only partially solved. I’m now able to read and parse RFH2 headers, but I’ve not broken the code on how to write them. Not much help from the user guide. In particular I need to populate the mcd, psc, and usr folders of the header. Perhaps someone can provide a clue or two…
For whatever reason, the WMQ adapter writer(s) seem to have treated the WMQ headers (RFH, RFH2, IMS, CICS, DLH, etc.) almost as an after thought. Or even less than that. Considering their overall importance in the WMQ arena, that’s rather surprising.
When I was working with MQ, I used the MQ Java API to connect to queues and selectively read messages. You may want to do something similar to ensure that you get access to the headers in the way that you want to work with them. You can use a similar approach to creating MQ messages (and headers) to send to an MQ queue.
This may be an example of a time when an adapter is overkill (or in this case underkill). You don’t really need all of the functionality of the WM MQ adapter, but you do need some specific functionality it lacks.
If you spent a little time with the MQ java API, I bet you could create utility java services that would retrieve or create the messages in the way that you need to work with them. That may take a bit longer than use the adapter, but save you time in the long run.
Of course, this approach assumes you are very familiar with WMQ and its Java API and have the java skills available to create WM java services of medium difficulty.
Right now it is 2008, almost 5 years. Is this issue resolved? Can I get and put MQMD without any issue anymore? Anyone know? I would like set and get some attributes in the MQMD. Which service can set or get the MQMD? I am new for webMethods.
Get service and Put service in Websphere MQ adapter (6.0 and 6.5) is having the option to choose MQMD Header fields…
There are wide number of message header fields that can be populated while placing a message in queue…