ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Multiple types of input messages

Post new topic  Reply to topic
 Multiple types of input messages « View previous topic :: View next topic » 
Author Message
SpitFire
PostPosted: Wed Jan 18, 2006 12:49 am    Post subject: Multiple types of input messages Reply with quote

Acolyte

Joined: 01 Aug 2005
Posts: 59
Location: India

Hi all,
If in case there is a scenario in which the input messages are of same domain 'MRM', however they can be of different types (Say, Order or Enquiry), how do you model the flow such that if 'Order' comes, then it is routed to a series of nodes, and if 'Enquiry' comes then it is routed through a different set of nodes?
For differentiating the messages it can be assumed that the first field in the input message provides an idea of what kind of message it is 'Order' or 'Enquiry'.
Can someone help me out regarding this scenario?
_________________
...: 5|71+ph1|23 :...
Back to top
View user's profile Send private message
elvis_gn
PostPosted: Wed Jan 18, 2006 1:24 am    Post subject: Reply with quote

Padawan

Joined: 08 Oct 2004
Posts: 1905
Location: Dubai

Hi _z33m,

You could use a common flow to check what the message is and then route it using the RouteToLabel and Label nodes.

OR

Ok, this is a totally untested logic, i'm not sure if it works....

In message sets one can define Choice....If you have a message Definition with a choice of Order or Enquiry right at the top level, the input message will look at its root tag and map tiself to the corresponding tree structure....I hope

OR

I could not find the link, but i remember reading something on having an additional header over the message, which could be read and the message routed to the correct flow....

The first one i'm definite about.

Regards.
Back to top
View user's profile Send private message Send e-mail
kimbert
PostPosted: Wed Jan 18, 2006 2:30 am    Post subject: Reply with quote

Jedi Council

Joined: 29 Jul 2003
Posts: 5542
Location: Southampton

I don't advise mangling the message set by constructing a choice of all messages. Keep the logical model pure - its structure should be controlled by how you ( the business ) think about your data, not by the details of a message flow. Otherwise your message set design gets coupled with your message flow design.
Back to top
View user's profile Send private message
dipankar
PostPosted: Wed Jan 18, 2006 11:42 pm    Post subject: Reply with quote

Disciple

Joined: 03 Feb 2005
Posts: 171

It will be better to post the format of input message for understanding.

However I think Elvis_gn first method is ok.

Extract first field of the input message by blob or xml parsing depending on the input format. Then use DestinationData to route the message. The message flow would be like

Input-->compute node--RouteToLabel

Label1--->

Label2 --->
_________________
Regards
Back to top
View user's profile Send private message
Feysn
PostPosted: Thu Jan 19, 2006 1:10 am    Post subject: Reply with quote

Apprentice

Joined: 04 Jun 2004
Posts: 33
Location: Wilrijk

_z33

Indeed what elvis_gn and dipankar are saying is correct. I've used this in certain case. The first few characters of the message are defining which type of message I have.

I read the message as BLOB cast the determination characters and rout then to the correct handling.

But kimbert has a good point. Try to route the message before and handle in separate flows.
Back to top
View user's profile Send private message Visit poster's website
SpitFire
PostPosted: Thu Jan 19, 2006 11:01 pm    Post subject: BLOB - Casting Reply with quote

Acolyte

Joined: 01 Aug 2005
Posts: 59
Location: India

Hi all,
Thanks for all the information. I shall try to proceed with the info given and then revert back if in case the problem persists.
_________________
...: 5|71+ph1|23 :...
Back to top
View user's profile Send private message
SpitFire
PostPosted: Sun Jan 22, 2006 5:46 am    Post subject: Multiple types of input messages - Problem persists Reply with quote

Acolyte

Joined: 01 Aug 2005
Posts: 59
Location: India

Hi all,
I am receiving messages in BLOB format from the 'MQInput' node. After that in a 'Compute' node I am extracting the first two characters and then comparing them against certain values. Based on the values I set the message properties, for further processing over a series of subsequent nodes. This is to make sure that I can send basically two types of messages (belonging to the same message set), and then identify which one was sent using the first two characters (they contain some code for identification).

However, I am not able to change the properties of message header in Compute Node. My ESQL statements in the node are as follows:

Code:

CREATE COMPUTE MODULE Check_Msg_Type_Compute
   CREATE FUNCTION Main() RETURNS BOOLEAN
   BEGIN
      -- set message headers
      CALL CopyMessageHeaders();
      
      -- copy message contents
      CALL CopyEntireMessage();
      
      -- set message type
      CALL CheckMsgType();
      RETURN TRUE;
   END;

   CREATE PROCEDURE CopyMessageHeaders() BEGIN
      -- copy basic headers from input message
      DECLARE I INTEGER 1;
      DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
      WHILE I < J DO
         SET OutputRoot.*[I] = InputRoot.*[I];
         SET I = I + 1;
      END WHILE;
      
      -- change message headers
      -- to indicate change in message structure
      
      -- set message set
      SET OutputRoot.Properties.MessageSet = 'OG8BJJO002001';

      -- set message format
      SET OutputRoot.Properties.MessageFormat = 'TDS1';
   END;

   CREATE PROCEDURE CopyEntireMessage() BEGIN
      -- copy entire message from input to output
      SET OutputRoot = InputRoot;
   END;
   
   CREATE PROCEDURE CheckMsgType() BEGIN
      -- message type extracted from the input message
      DECLARE MsgType CHARACTER '';
      
      -- extract first two bytes from the input message
      SET MsgType =
         CAST(
            SUBSTRING(
               InputRoot.BLOB.BLOB FROM 1 FOR 2
            )
            AS CHARACTER
            CCSID InputRoot.Properties.CodedCharSetId
            ENCODING InputRoot.Properties.Encoding
         );
         
      -- set message type
      SET OutputRoot.Properties.MessageType =
         CASE MsgType
         WHEN 'T1' THEN 'MSGTYPE-1'
         WHEN 'T2' THEN 'MSGTYPE-2'
         ELSE ''
         END;
      
      -- check message type set
      IF OutputRoot.Properties.MessageType = '' THEN
         -- throw user exception to indicate error
         THROW USER EXCEPTION
            SEVERITY 3
            CATALOG 'UE-001'
            MESSAGE 3001
            VALUES ('INVALID MESSAGE TYPE');
      END IF;
      
      -- indicate message type to subsequent nodes
      SET Environment.Variables.InputMsgType =
         OutputRoot.Properties.MessageType;
   END;
END MODULE;


CREATE FILTER MODULE Route_Msgs_Filter
   CREATE FUNCTION Main() RETURNS BOOLEAN
   BEGIN
      -- check message type from environment variables
      IF Environment.Variables.InputMsgType = 'MSGTYPE-1' THEN
         RETURN TRUE;
      ELSE
         RETURN FALSE;
      END IF;
   END;

END MODULE;


I would like to know how to resolve this!

The 'MessageType' value alone changes according to the extracted value from the input message; other values such as the 'MessageSet' and the 'MessageFormat' remains the same. Hence these two values are set the same for all messages.

After this there is a 'Filter' node that tries to identify the message type and then route it accordingly. Then I have a mapping node, in each of the filter node's branches (considering for the moment only 'True' and 'False' branches) that does the transformation of wire format (the mapping actually does nothing other than copy the input to output). But, now since the compute node is not changing the message set & format, the mapping node fails to process the message and I get errors.

Am I overlooking something here?
_________________
...: 5|71+ph1|23 :...
Back to top
View user's profile Send private message
mgk
PostPosted: Mon Jan 23, 2006 1:26 am    Post subject: Reply with quote

Padawan

Joined: 31 Jul 2003
Posts: 1642

You are calling BOTH CopyMessageHeaders and CopyEntireMessage. When you call the second of these it deletes eveything the first call just copied. You should only call ONE of these functions.


Regards.
_________________
MGK
The postings I make on this site are my own and don't necessarily represent IBM's positions, strategies or opinions.
Back to top
View user's profile Send private message
elvis_gn
PostPosted: Tue Jan 24, 2006 1:36 am    Post subject: Reply with quote

Padawan

Joined: 08 Oct 2004
Posts: 1905
Location: Dubai

Hi _z33,

Do not code anything more inside the CopyMessageHeaders and CopyEntireMessage....These are standard methods, suppose tomorrow u give ur code to some other person, simply by seeing the CALL he should understand what would be happening inside....

Regards.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Multiple types of input messages
Jump to:  



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
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.