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