IBM Hursley UK is Sending 6 Speakers to MQTC v2.0.1.8

The IBM MQ Labs in Hursley, UK will be sending the following 6 speakers to MQTC v2.0.1.8: David Ware, Mark Taylor, Rob Parker, Matthew Whitehead, Sam Goulden and Andrew Schofield. And IBM USA will be sending: Lyn Elkins, Mitch Johnson & Jonathan Levell.

    David Ware’s Sessions:

  • What’s New in IBM MQ?
  • Building a highly available and scalable solution with MQ clusters
  • MQ High Availability
    Mark Taylor’s Sessions:

  • Connecting MQ to the Rest of the World
  • Using Open Source solutions to monitor your queue managers
  • Helping MQ developers with new language bindings and developer outreach material
    Rob Parker’s Sessions:

  • Running MQ in the Cloud
  • Running MQ in Containers
  • Securing your MQ environment
    Matthew Whitehead’s Sessions:

  • Where’s my message?
  • An Introduction to MQ Publish/Subscribe
  • MQ in the Cloud – The New MQaaS offering
  • MQ Hybrid Cloud Architectures
    Sam Goulden’s Sessions:

  • Introduction to MQ
  • Benefiting from the IBM MQ Appliance
  • MQ Administration, the Web Console, & REST API
    Mark Taylor & Lyn Elkins’s Session:

  • Using and Analysing SMF data
    Lyn Elkins & Mitch Johnson’s Session:

  • MQ for z/OS – An introduction to object authorization on that ‘other’ queue manager
    Lyn Elkins’s Session:

  • MQ for z/OS – Shared queues and why is my workload not running where I think it should
    Andrew Schofield’s Session:

  • Event Streams using Apache Kafka and how it relates to MQ
    Jonathan Levell’s Technical Sessions:

  • Connecting IoT Devices and Mobile Applications to your Enterprise with IBM IoT MessageSight & IBM MQ
  • MQTT: The Protocol for the Internet of Things

For more information about MQTC, please go to:
http://www.mqtechconference.com

Regards,
Roger Lacroix
Capitalware Inc.

Education, IBM MQ, MQ Technical Conference Comments Off on IBM Hursley UK is Sending 6 Speakers to MQTC v2.0.1.8

SQLite v3.24.0 Released

D. Richard Hipp has just released SQLite v3.24.0.
http://www.sqlite.org/news.html

SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite is the most widely deployed SQL database engine in the world. The source code for SQLite is in the public domain.

Regards,
Roger Lacroix
Capitalware Inc.

C, Database, IBM i (OS/400), Linux, macOS (Mac OS X), Open Source, Programming, Unix, Windows, z/OS Comments Off on SQLite v3.24.0 Released

C# .NET Code to Get a Message from a Remote Queue Manager

In my previous posting here, I did a write up of putting a message to a queue in a remote queue manager using C# .NET. In this blog posting, I’ll show you how to get a message from a queue of a remote queue manager using C# .NET.

If you are familiar with IBM MQ Classes for Java then writing code with IBM MQ Classes for .NET will be very straightforward.

The only word of warning I have for C# developers is to make sure you do NOT use a .NET Framework higher than what IBM MQ supports. Otherwise, you may get weird errors.

Here is a fully functioning C# .NET MQ example that will connect to a remote queue manager and get a message from a queue using a managed .NET environment. You can download the source code from here.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using IBM.WMQ;

/// <summary> Program Name
/// MQTest02
///
/// Description
/// This C# class will connect to a remote queue manager
/// and get a message from a queue using a managed .NET environment.
///
/// Sample Command Line Parameters
/// -h 127.0.0.1 -p 1414 -c TEST.CHL -m MQA1 -q TEST.Q1 -u tester -x mypwd
/// </summary>
/// <author>  Roger Lacroix, Capitalware Inc.
/// </author>
namespace MQTest02
{
   class MQTest02
   {
      private Hashtable inParms = null;
      private Hashtable qMgrProp = null;
      private System.String qManager;
      private System.String outputQName;

      /*
      * The constructor
      */
      public MQTest02()
         : base()
      {
      }

      /// <summary> Make sure the required parameters are present.</summary>
      /// <returns> true/false
      /// </returns>
      private bool allParamsPresent()
      {
         bool b = inParms.ContainsKey("-h") && inParms.ContainsKey("-p") &&
                  inParms.ContainsKey("-c") && inParms.ContainsKey("-m") &&
                  inParms.ContainsKey("-q");
         if (b)
         {
            try
            {
               System.Int32.Parse((System.String)inParms["-p"]);
            }
            catch (System.FormatException e)
            {
               b = false;
            }
         }

         return b;
      }

      /// <summary> Extract the command-line parameters and initialize the MQ variables.</summary>
      /// <param name="args">
      /// </param>
      /// <throws>  IllegalArgumentException </throws>
      private void init(System.String[] args)
      {
         inParms = Hashtable.Synchronized(new Hashtable());
         if (args.Length > 0 && (args.Length % 2) == 0)
         {
            for (int i = 0; i < args.Length; i += 2)
            {
               inParms[args[i]] = args[i + 1];
            }
         }
         else
         {
            throw new System.ArgumentException();
         }

         if (allParamsPresent())
         {
            qManager = ((System.String)inParms["-m"]);
            outputQName = ((System.String)inParms["-q"]);

            qMgrProp = new Hashtable();
            qMgrProp.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);

            qMgrProp.Add(MQC.HOST_NAME_PROPERTY, ((System.String)inParms["-h"]));
            qMgrProp.Add(MQC.CHANNEL_PROPERTY, ((System.String)inParms["-c"]));

            try
            {
               qMgrProp.Add(MQC.PORT_PROPERTY, System.Int32.Parse((System.String)inParms["-p"]));
            }
            catch (System.FormatException e)
            {
               qMgrProp.Add(MQC.PORT_PROPERTY, 1414);
            }

            if (inParms.ContainsKey("-u"))
               qMgrProp.Add(MQC.USER_ID_PROPERTY, ((System.String)inParms["-u"]));

            if (inParms.ContainsKey("-x"))
               qMgrProp.Add(MQC.PASSWORD_PROPERTY, ((System.String)inParms["-x"]));

            System.Console.Out.WriteLine("MQTest02:");
            Console.WriteLine("  QMgrName ='{0}'", qManager);
            Console.WriteLine("  Output QName ='{0}'", outputQName);

            System.Console.Out.WriteLine("QMgr Property values:");
            foreach (DictionaryEntry de in qMgrProp)
            {
               Console.WriteLine("  {0} = '{1}'", de.Key, de.Value);
            }
         }
         else
         {
            throw new System.ArgumentException();
         }
      }

      /// <summary> Connect, open queue, read a message, close queue and disconnect.
      ///
      /// </summary>
      /// <throws>  MQException </throws>
      private void testReceive()
      {
         MQQueueManager qMgr = null;
         MQQueue inQ = null;
         int openOptions = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING;
         MQGetMessageOptions gmo = new MQGetMessageOptions();
         MQMessage receiveMsg = null;

         try
         {
            qMgr = new MQQueueManager(qManager, qMgrProp);
            System.Console.Out.WriteLine("MQTest02 successfully connected to " + qManager);

            inQ = qMgr.AccessQueue(outputQName, openOptions);
            System.Console.Out.WriteLine("MQTest02 successfully opened " + outputQName);

            receiveMsg = new MQMessage();

            inQ.Get(receiveMsg, gmo);
            System.Console.Out.WriteLine("Message Data>>>" + receiveMsg.ReadString(receiveMsg.MessageLength));
         }
         catch (MQException mqex)
         {
            System.Console.Out.WriteLine("MQTest02 cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
         }
         catch (System.IO.IOException ioex)
         {
            System.Console.Out.WriteLine("MQTest02 ioex=" + ioex);
         }
         finally
         {
            try
            {
                if (inQ != null)
                {
                    inQ.Close();
                    System.Console.Out.WriteLine("MQTest02 closed: " + outputQName);
                }
            }
            catch (MQException mqex)
            {
                System.Console.Out.WriteLine("MQTest02 CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
            }

            try
            {
                if (qMgr != null)
                {
                    qMgr.Disconnect();
                    System.Console.Out.WriteLine("MQTest02 disconnected from " + qManager);
                }
            }
            catch (MQException mqex)
            {
                System.Console.Out.WriteLine("MQTest02 CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
            }
         }
      }

      /// <summary> main line</summary>
      /// <param name="args">
      /// </param>
      //        [STAThread]
      public static void Main(System.String[] args)
      {
         MQTest02 mqt = new MQTest02();

         try
         {
            mqt.init(args);
            mqt.testReceive();
         }
         catch (System.ArgumentException e)
         {
            System.Console.Out.WriteLine("Usage: MQTest02 -h host -p port -c channel -m QueueManagerName -q QueueName [-u userID] [-x passwd]");
            System.Environment.Exit(1);
         }
         catch (MQException e)
         {
            System.Console.Out.WriteLine(e);
            System.Environment.Exit(1);
         }

         System.Environment.Exit(0);
      }
   }
}

Here is the batch file I used to compiled the code as a 32-bit executable:

@echo off
setlocal

if "%MQ_FILE_PATH%".=="". set MQ_FILE_PATH=C:\Program Files\IBM\WebSphere MQ

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /t:exe /r:System.dll /r:"%MQ_FILE_PATH%\Tools\lib\amqmdnet.dll" /out:bin\Release\MQTest02.exe MQTest02.cs

endlocal

And here is the batch file I used to compiled the code as a 64-bit executable:

@echo off
setlocal

if "%MQ_FILE_PATH%".=="". set MQ_FILE_PATH=C:\Program Files\IBM\WebSphere MQ

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\csc.exe /nologo /t:exe /platform:x64 /r:System.dll /r:"%MQ_FILE_PATH%\Tools\lib64\amqmdnet.dll" /out:bin\Release\MQTest02_64.exe MQTest02.cs

endlocal

As I mentioned in my other C# .NET posting, I’m using the .NET V2 Framework. It might be old but for basic C# code, it works perfectly.

Regards,
Roger Lacroix
Capitalware Inc.

.NET, C#, IBM MQ, IBM MQ Appliance, Open Source, Programming, Windows Comments Off on C# .NET Code to Get a Message from a Remote Queue Manager

C# .NET Code to Put a Message to a Remote Queue Manager

I write a lot of C & Java code and I like to publish working examples of C and Java using MQ. So, I thought I should throw a little love towards C# .NET. 🙂

If you are familiar with IBM MQ Classes for Java then writing code with IBM MQ Classes for .NET will be very straightforward.

The only word of warning I have for C# developers is to make sure you do NOT use a .NET Framework higher than what IBM MQ supports. Otherwise, you may get weird errors.

Here is a fully functioning C# .NET MQ example that will connect to a remote queue manager and put a message to a queue using a managed .NET environment. You can download the source code from here.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using IBM.WMQ;

/// <summary> Program Name
/// MQTest01
///
/// Description
/// This C# class will connect to a remote queue manager
/// and put a message to a queue using a managed .NET environment.
///
/// Sample Command Line Parameters
/// -h 127.0.0.1 -p 1414 -c TEST.CHL -m MQA1 -q TEST.Q1 -u tester -x mypwd
/// </summary>
/// <author>  Roger Lacroix, Capitalware Inc.
/// </author>
namespace MQTest01
{
   class MQTest01
   {
      private Hashtable inParms = null;
      private Hashtable qMgrProp = null;
      private System.String qManager;
      private System.String outputQName;

      /*
      * The constructor
      */
      public MQTest01()
         : base()
      {
      }

      /// <summary> Make sure the required parameters are present.</summary>
      /// <returns> true/false
      /// </returns>
      private bool allParamsPresent()
      {
         bool b = inParms.ContainsKey("-h") && inParms.ContainsKey("-p") &&
                  inParms.ContainsKey("-c") && inParms.ContainsKey("-m") &&
                  inParms.ContainsKey("-q");
         if (b)
         {
            try
            {
               System.Int32.Parse((System.String)inParms["-p"]);
            }
            catch (System.FormatException e)
            {
               b = false;
            }
         }

         return b;
      }

      /// <summary> Extract the command-line parameters and initialize the MQ variables.</summary>
      /// <param name="args">
      /// </param>
      /// <throws>  IllegalArgumentException </throws>
      private void init(System.String[] args)
      {
         inParms = Hashtable.Synchronized(new Hashtable());
         if (args.Length > 0 && (args.Length % 2) == 0)
         {
            for (int i = 0; i < args.Length; i += 2)
            {
               inParms[args[i]] = args[i + 1];
            }
         }
         else
         {
            throw new System.ArgumentException();
         }

         if (allParamsPresent())
         {
            qManager = ((System.String)inParms["-m"]);
            outputQName = ((System.String)inParms["-q"]);

            qMgrProp = new Hashtable();
            qMgrProp.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);

            qMgrProp.Add(MQC.HOST_NAME_PROPERTY, ((System.String)inParms["-h"]));
            qMgrProp.Add(MQC.CHANNEL_PROPERTY, ((System.String)inParms["-c"]));

            try
            {
               qMgrProp.Add(MQC.PORT_PROPERTY, System.Int32.Parse((System.String)inParms["-p"]));
            }
            catch (System.FormatException e)
            {
               qMgrProp.Add(MQC.PORT_PROPERTY, 1414);
            }

            if (inParms.ContainsKey("-u"))
               qMgrProp.Add(MQC.USER_ID_PROPERTY, ((System.String)inParms["-u"]));

            if (inParms.ContainsKey("-x"))
               qMgrProp.Add(MQC.PASSWORD_PROPERTY, ((System.String)inParms["-x"]));

            System.Console.Out.WriteLine("MQTest01:");
            Console.WriteLine("  QMgrName ='{0}'", qManager);
            Console.WriteLine("  Output QName ='{0}'", outputQName);

            System.Console.Out.WriteLine("QMgr Property values:");
            foreach (DictionaryEntry de in qMgrProp)
            {
               Console.WriteLine("  {0} = '{1}'", de.Key, de.Value);
            }
         }
         else
         {
            throw new System.ArgumentException();
         }
      }

      /// <summary> Connect, open queue, write a message, close queue and disconnect.
      ///
      /// </summary>
      /// <throws>  MQException </throws>
      private void testSend()
      {
         MQQueueManager qMgr = null;
         MQQueue outQ = null;
         System.String line = "This is a test message embedded in the MQTest01 program.";
         int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
         MQPutMessageOptions pmo = new MQPutMessageOptions();

         try
         {
            qMgr = new MQQueueManager(qManager, qMgrProp);
            System.Console.Out.WriteLine("MQTest01 successfully connected to " + qManager);

            outQ = qMgr.AccessQueue(outputQName, openOptions);
            System.Console.Out.WriteLine("MQTest01 successfully opened " + outputQName);

            // Define a simple MQ message, and write some text in UTF format..
            MQMessage sendmsg = new MQMessage();
            sendmsg.Format = MQC.MQFMT_STRING;
            sendmsg.MessageType = MQC.MQMT_DATAGRAM;
            sendmsg.MessageId = MQC.MQMI_NONE;
            sendmsg.CorrelationId = MQC.MQCI_NONE;
            sendmsg.WriteString(line);

            // put the message on the outQ
            outQ.Put(sendmsg, pmo);
            System.Console.Out.WriteLine("Message Data>>>" + line);
         }
         catch (MQException mqex)
         {
            System.Console.Out.WriteLine("MQTest01 CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
         }
         catch (System.IO.IOException ioex)
         {
            System.Console.Out.WriteLine("MQTest01 ioex=" + ioex);
         }
         finally
         {
            try
            {
                if (outQ != null)
                {
                    outQ.Close();
                    System.Console.Out.WriteLine("MQTest01 closed: " + outputQName);
                }
            }
            catch (MQException mqex)
            {
                System.Console.Out.WriteLine("MQTest01 CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
            }

            try
            {
                if (qMgr != null)
                {
                    qMgr.Disconnect();
                    System.Console.Out.WriteLine("MQTest01 disconnected from " + qManager);
                }
            }
            catch (MQException mqex)
            {
                System.Console.Out.WriteLine("MQTest01 CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
            }
         }
      }

      /// <summary> main line</summary>
      /// <param name="args">
      /// </param>
      //        [STAThread]
      public static void Main(System.String[] args)
      {
         MQTest01 mqt = new MQTest01();

         try
         {
            mqt.init(args);
            mqt.testSend();
         }
         catch (System.ArgumentException e)
         {
            System.Console.Out.WriteLine("Usage: MQTest01 -h host -p port -c channel -m QueueManagerName -q QueueName [-u userID] [-x passwd]");
            System.Environment.Exit(1);
         }
         catch (MQException e)
         {
            System.Console.Out.WriteLine(e);
            System.Environment.Exit(1);
         }

         System.Environment.Exit(0);
      }
   }
}

Here is the batch file I used to compiled the code as a 32-bit executable:

@echo off
setlocal

if "%MQ_FILE_PATH%".=="". set MQ_FILE_PATH=C:\Program Files\IBM\WebSphere MQ

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /t:exe /r:System.dll /r:"%MQ_FILE_PATH%\Tools\lib\amqmdnet.dll" /out:bin\Release\MQTest01.exe MQTest01.cs

endlocal

And here is the batch file I used to compiled the code as a 64-bit executable:

@echo off
setlocal

if "%MQ_FILE_PATH%".=="". set MQ_FILE_PATH=C:\Program Files\IBM\WebSphere MQ

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\csc.exe /nologo /t:exe /platform:x64 /r:System.dll /r:"%MQ_FILE_PATH%\Tools\lib64\amqmdnet.dll" /out:bin\Release\MQTest01_64.exe MQTest01.cs

endlocal

I used the .NET V2 Framework. It might be old but for basic C# code, it works perfectly. 🙂

Regards,
Roger Lacroix
Capitalware Inc.

.NET, C#, IBM MQ, IBM MQ Appliance, Programming, Windows Comments Off on C# .NET Code to Put a Message to a Remote Queue Manager

MQAUSX Explained or Better Explained

Every once in a while, I get requests to explain what/how MQ Authenticate User Security Exit (MQAUSX) and/or MQ Authenticate User Security Exit for z/OS (z/MQAUSX) work.

    Client-side perspective:

  • If the client application is configured with the MQAUSX client-side security exit then the user credentials are encrypted and sent to the remote queue manager. This is the best level of security.
  • If the client application is not configured with the client-side security exit and both the client-side AND server-side are at MQ V8 or higher then MQ V8 (or higher) will encrypt the user credentials as they flow from the client application to the queue manager. Note: There has been a lot of discussions about the effectiveness of MQ encrypting the user credentials. Even IBM’s position has changed and they do not recommend using MQ user credential encryption for production environments.
  • If the client application is not configured with the client-side security exit then the user credentials are sent in plain text to the remote queue manager. This feature is available for Java/JMS, Java and C# DotNet client applications. For native applications (i.e. C/C++), then the application must use and populate the MQCSP structure with the UserID and Password.
  • If the MQAdmin sets the MQAUSX IniFile parameter NoAuth to Y then it functions just like MQSSX. MQSSX does not authenticate. It filters the incoming connection based on UserID, IP address, hostname and/or SSL DN.
    MQAUSX server-side can authenticate user credentials against the following targets:

  • Server’s native OS system (Local OS)
  • Remote LDAP server
  • Microsoft’s Active Directory
  • Quest Authentication Services* (QAS) aka Vintela Authentication Services* (VAS)
  • Centrify’s DirectControl*
  • PAM* (Pluggable Authentication Module)
  • An encrypted MQAUSX FBA file (similar to /etc/passwd file).

*Linux and Unix only.

Capitalware recommends disabling both CONNAUTH and CHLAUTH and using the features of MQAUSX to perform filtering, authentication and setting of the connection’s UserId (which will be used by MQ’s OAM to perform authorization).

The MQAdmin can have some channels authenticate the user credentials against an LDAP server and other channels, of the same queue manager, authenticate against the Local OS, AND even other channels go against other target authentication mechanisms. With CONNAUTH, you can only configure 1 target per queue manager.

    The sequence of events that MQAUSX server-side component goes through for each connection request:

  • Perform Maximum Connections per Channel (MCC) check if enabled
  • Perform AllowHostname, AllowHostByName, AllowIP & AllowSSLDN checks (that are enabled)
  • Perform RejectHostname, RejectHostByName, RejectIP & RejectSSLDN checks (that are enabled)
  • Request information from MQAUSX client-side security exit when in use or if no client-side security exit then wait for MQ to invoke the exit with user credentials
  • Perform Queue Manager Password check if enabled
  • Perform Self-Signed Certificate check if enabled
  • Perform Allowmqm & AllowBlankUserID checks if enabled
  • Perform AllowUserID check if enabled
  • Perform RejectUserID check if enabled
  • Perform Group check if enabled
  • If Credential Cache is enabled then check cache otherwise perform authentication (if cache entry has expired then perform authentication)
    • Setting the UserId for connection:

    • Set it to the UserId used for authentication (default)
    • Set it to the value in the channel’s MCAUSER field (see UseMCAUser)
    • z/OS only – If UseSSLCertUserID is set then the value in the channel’s SSLCertUserid field will be used
    • Set it to the UserId from the SSL Certifcate (see UseSSLUserIDFromDN)
    • Set it to the UserId from the LDAP ANR (see ExtractUserIDFromANR)
    • Perform Proxy look up if enabled and set it to the Proxy UserId (see UseProxy)

  • If CheckFinalUserID is enabled, recheck the UserID against Allowmqm, AllowUserID & RejectUserID

If everything is correct then MQAUSX server-side component will set the connection’s UserId and a log entry will be written to the LogFile. Here is an example of a successful connection:

Connection accepted for MCA_UID='tester' UserID='tester' UserSpecifiedServer='' QMgr='MQWT1' ChlName='TEST.EXIT' ConName='10.10.10.10' Server='' RemoteUserID='roger'
    where:

  • MCA_UID is the UserId that is set by MQAUSX and will be used for the connection
  • UserID is the UserId that was authenticated
  • UserSpecifiedServer is the MS AD server name specified by the user, if allowed**
  • QMgr is the queue manager name
  • ChlName is the channel name for this connection
  • ConName is the client IP address
  • Server is the MS AD server used for authentication**
  • RemoteUserID is the UserId that the client application is actually running under

** Windows only.

If the incoming connection fails any filter, authentication or other feature then MQAUSX server-side component will immediately close the channel and write log entry to the LogFile. Here is an example of a failed connection attempt:

Connection failed for UserID='tester' UserSpecifiedServer='' QMgr='MQWT1' ChlName='TEST.EXIT' ConName='10.10.10.10' Server='' RemoteUserID='roger'

Finally, Capitalware offers free 60-day trials of both MQAUSX and z/MQAUSX which includes free support (no strings attacehd). If you interesting in trying it out, please send an email to support@capitalware.com to request a trial of MQAUSX or z/MQAUSX.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, IBM i (OS/400), IBM MQ, Linux, MQ Authenticate User Security Exit, Security, Unix, Windows, z/OS Comments Off on MQAUSX Explained or Better Explained

Jonathan Levell will be Speaking at MQTC v2.0.1.8

Jonathan Levell of IBM will be presenting the following sessions at MQ Technical Conference v2.0.1.8 (MQTC):

    Jonathan Levell’s Technical Sessions:

  • Connecting IoT Devices and Mobile Applications to your Enterprise with IBM IoT MessageSight & IBM MQ
  • MQTT: The Protocol for the Internet of Things

For more information about MQTC, please go to:
http://www.mqtechconference.com

Regards,
Roger Lacroix
Capitalware Inc.

Education, IBM MQ, MQ Technical Conference, MQTT Comments Off on Jonathan Levell will be Speaking at MQTC v2.0.1.8

Capitalware Products 2018 Release Train

Here is a summary of all the recent releases that Capitalware Inc. has published:

    Updated ‘License as Free’ products:

  • MQ Channel Auto Creation Manager v1.0.4
  • MQ Channel Auto Creation Manager for z/OS v1.0.4
  • MQ Set UserID v1.0.3
  • MQ Set UserID for z/OS v1.0.3
  • Client-side Security Exit for Depository Trust Clearing Corporation v1.0.3
  • Client-side Security Exit for Depository Trust Clearing Corporation for z/OS v1.0.3

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, IBM i (OS/400), IBM MQ, Licensed As Free, Linux, MQ Auditor, MQ Authenticate User Security Exit, MQ Channel Connection Inspector, MQ Channel Encryption, MQ Channel Throttler, MQ Enterprise Security Suite, MQ Message Encryption, MQ Message Replication, MQ Standard Security Exit, Security, Unix, Windows, z/OS Comments Off on Capitalware Products 2018 Release Train

New: MQ Message Replication v2.0.0

Capitalware Inc. would like to announce the official release of MQ Message Replication v2.0.0. This is a FREE upgrade for ALL licensed users of MQ Message Replication. MQ Message Replication (MQMR) will clone messages being written (via MQPUT or MQPUT1 API calls) to an application’s output queue and MQMR will write the exact same messages to ‘n’ target queues (‘n’ can be up to 100). When MQMR replicates a message both the message data and the message’s MQMD structure will be cloned.

For more information about MQMR, please go to:
https://www.capitalware.com/mqmr_overview.html

    Changes for MQ Message Replication v2.0.0:

  • Added UseSyncPoint keyword to enable synpoint for cloned messages.
  • Added the ability to clear the MQMD Report Options field – new keywords: ClearRO, ClearROCOA, ClearROCOD, ClearROPAN, ClearRONAN, ClearROException & ClearROExpiration
  • Added the ability to skip messages with the MQMD Feedback field set to particular values – new keywords: SkipCOA, SkipCOD, SkipPAN, SkipNAN & SkipExpiration
  • Fixed an issue with the handling of reloading the IniFile
  • Fixed an issue with determining the application name.
  • Fixed an issue in the logging framework where a constant was being modified.
    • Added 2 auxiliary programs: MQ2SDB & SDB2MQ

    • MQ Queue To SQLite DB (MQ2SDB) program will offload MQ messages to an SQLite database.
    • SQLite DB To MQ Queue (SDB2MQ) program will load SQLite database rows into messages in an MQ queue.

    Regards,
    Roger Lacroix
    Capitalware Inc.

Capitalware, IBM i (OS/400), IBM MQ, Linux, MQ Message Replication, Unix, Windows Comments Off on New: MQ Message Replication v2.0.0

New: MQ Message Encryption v4.0.0

Capitalware Inc. would like to announce the official release of MQ Message Encryption v4.0.0. This is a FREE upgrade for ALL licensed users of MQ Message Encryption. MQME provides encryption for MQ message data while it resides in a queue and in the MQ logs (i.e. all data at rest).

For more information about MQME, please go to:
https://www.capitalware.com/mqme_overview.html

    Changes for MQ Message Encryption v4.0.0:

  • Added Topic section so that MQME will protect topics.
  • Added UseExcludeTopics and ExcludeTopics keywords to explicitly exclude topics from being protected.
  • Added EncPassPhrase keyword to support the use of encrypted PassPhrase.
  • Added ‘enc_pp’ program that will create an encrypted PassPhrase.
  • Fixed an issue with determining the application name.
  • Removed MQAPILevel keyword as it is no longer needed.
  • Changed when the authorization is perform. Now it is done during the MQOPEN rather than MQGet and/or MQPUT/1.
  • Fixed an issue in the logging framework where a constant was being modified.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, IBM i (OS/400), IBM MQ, Linux, MQ Message Encryption, Security, Unix, Windows Comments Off on New: MQ Message Encryption v4.0.0

New: MQ Channel Encryption v3.2.0

Capitalware Inc. would like to announce the official release of MQ Channel Encryption (MQCE) v3.2.0. This is a FREE upgrade for ALL licensed users of MQCE. MQCE provides encryption for message data over IBM MQ channels.

MQCE operates with Sender, Receiver, Server, Requester, Cluster-Sender, Cluster-Receiver, Server Connection and Client Connection channels of the WMQ queue managers. MQCE uses Advanced Encryption Standard (AES) to encrypt the data and SHA-2 to create a digital signature.

For more information about MQCE go to:
https://www.capitalware.com/mqce_overview.html

    Changes for MQ Channel Encryption v3.2.0:

  • Added EncPassPhrase keyword to support the use of encrypted PassPhrase.
  • Added ‘enc_pp’ program that will create an encrypted PassPhrase.
  • Addition debug logging information added
  • Fixed an issue in the logging framework where a constant was being modified.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, IBM i (OS/400), IBM MQ, Linux, MQ Channel Encryption, Security, Unix, Windows Comments Off on New: MQ Channel Encryption v3.2.0