Example code fragments
This topic contains two examples of components which obtain a message from the .NET Monitor and print it, one using transactional processing and the other non-transactional processing. A third example shows common utility routines, applicable to both the first two examples. All the examples are in C#.
Example 1: Transactional processing
/*********************************************************************/ /* Licensed materials, property of IBM */ /* 63H9336 */ /* (C) Copyright IBM Corp. 2005, 2020 */ /*********************************************************************/ using System; using System.EnterpriseServices; using IBM.WMQ; using IBM.WMQMonitor; [assembly: ApplicationName("dnmsamp")] // build: // // csc -target:library -reference:amqmdnet.dll;amqmdnm.dll TranAssembly.cs // // run (with dotnet monitor) // // runmqdnm -m QMNAME -q QNAME -a dnmsamp.dll -c Tran namespace dnmsamp { [TransactionAttribute(TransactionOption.Required)] public class Tran : ServicedComponent, IMQObjectTrigger { Util util = null; [AutoComplete(true)] public void Execute(MQQueueManager qmgr, MQQueue queue, MQMessage message, string param) { util = new Util("Tran"); if (param != null) util.Print("PARAM: '" +param.ToString() + "'"); util.PrintMessage(message); //System.Console.WriteLine("SETTING ABORT"); //ContextUtil.MyTransactionVote = TransactionVote.Abort; System.Console.WriteLine("SETTING COMMIT"); ContextUtil.SetComplete(); //ContextUtil.MyTransactionVote = TransactionVote.Commit; } } }
Example 2: Non-transactional processing
/*********************************************************************/ /* Licensed materials, property of IBM */ /* 63H9336 */ /* (C) Copyright IBM Corp. 2005, 2020 */ /*********************************************************************/ using System; using IBM.WMQ; using IBM.WMQMonitor; // build: // // csc -target:library -reference:amqmdnet.dll;amqmdnm.dll NonTranAssembly.cs // // run (with dotnet monitor) // // runmqdnm -m QMNAME -q QNAME -a dnmsamp.dll -c NonTran namespace dnmsamp { public class NonTran : IMQObjectTrigger { Util util = null; public void Execute(MQQueueManager qmgr, MQQueue queue, MQMessage message, string param) { util = new Util("NonTran"); try { util.PrintMessage(message); } catch (Exception ex) { System.Console.WriteLine(">>> NonTran\n{0}", ex.ToString()); } } } }
Example 3: Common routines
/*********************************************************************/ /* Licensed materials, property of IBM */ /* 63H9336 */ /* (C) Copyright IBM Corp. 2005, 2020 */ /*********************************************************************/ using System; using IBM.WMQ; namespace dnmsamp { /// <summary> /// Summary description for Util. /// </summary> public class Util { /* -------------------------------------------------------------------- */ /* Default prefix string of the namespace. */ /* -------------------------------------------------------------------- */ private string prefixText = "dnmsamp"; /* -------------------------------------------------------------------- */ /* Constructor that takes the replacement prefix string to use. */ /* -------------------------------------------------------------------- */ public Util(String text) { prefixText = text; } /* -------------------------------------------------------------------- */ /* Display an arbitrary string to the console. */ /* -------------------------------------------------------------------- */ public void Print(String text) { System.Console.WriteLine("{0} {1}\n", prefixText, text); } /* -------------------------------------------------------------------- */ /* Display the content of the message passed to the console. */ /* -------------------------------------------------------------------- */ public void PrintMessage(MQMessage message) { if (message.Format.CompareTo(MQC.MQFMT_STRING) == 0) { try { string messageText = message.ReadString(message.MessageLength); Print(messageText); } catch(Exception ex) { Print(ex.ToString()); } } else { Print("UNRECOGNISED FORMAT"); } } /* -------------------------------------------------------------------- */ /* Convert the byte array into a hex string. */ /* -------------------------------------------------------------------- */ static public string ToHexString(byte[] byteArray) { string hex = "0123456789ABCDEF"; string retString = ""; for(int i = 0; i < byteArray.Length; i++) { int h = (byteArray[i] & 0xF0)>>4; int l = (byteArray[i] & 0x0F); retString += hex.Substring(h,1) + hex.Substring(l,1); } return retString; } } }Parent topic: Use the .NET Monitor