private void RetryOnHCONNError(Action action)
        {
            int tries = MaxRetryOnHConnError;

            while (true)
            {
                try
                {
                    if (tries < MaxRetryOnHConnError)
                    {
                        IbmQueueManager.Connect();
                    }

                    action();
                    return;
                }
                catch (MQException ex)
                {
                    if (ex.ReasonCode == MQC.MQRC_HCONN_ERROR ||
                        ex.ReasonCode == MQC.MQRC_CONNECTION_BROKEN)
                    {
                        tries--;
                        if (tries == 0)
                        {
                            throw;
                        }
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
        internal MQQueue OpenQueueCore(string queueName, OpenQueueMode openMode)
        {
            Debug.Assert(!string.IsNullOrEmpty(queueName));

            var openFlags = MQC.MQOO_FAIL_IF_QUIESCING;

            switch (openMode)
            {
            case OpenQueueMode.ForBrowse:
                openFlags = openFlags | MQC.MQOO_BROWSE;
                break;

            case OpenQueueMode.ForBrowseCo:
                openFlags = openFlags | MQC.MQOO_CO_OP | MQC.MQOO_BROWSE;
                break;

            case OpenQueueMode.ForSet:
                openFlags = openFlags | MQC.MQOO_SET;
                break;

            case OpenQueueMode.ForRead:
                openFlags = openFlags | MQC.MQOO_INPUT_SHARED;
                break;

            case OpenQueueMode.ForWrite:
                openFlags = openFlags | MQC.MQOO_OUTPUT;
                break;

            case OpenQueueMode.ForWriteSetAllContext:
                openFlags = openFlags | MQC.MQOO_OUTPUT | MQC.MQOO_SET_ALL_CONTEXT;
                break;

            case OpenQueueMode.ForWriteSetIdentityContext:
                openFlags = openFlags | MQC.MQOO_OUTPUT | MQC.MQOO_SET_IDENTITY_CONTEXT;
                break;

            case OpenQueueMode.ForWritePassAllContext:
                openFlags = openFlags | MQC.MQOO_OUTPUT | MQC.MQOO_PASS_ALL_CONTEXT;
                break;

            case OpenQueueMode.ForWritePassIdentityContext:
                openFlags = openFlags | MQC.MQOO_OUTPUT | MQC.MQOO_PASS_IDENTITY_CONTEXT;
                break;

            case OpenQueueMode.ForQuery:
                openFlags = openFlags | MQC.MQOO_INQUIRE;
                break;

            case OpenQueueMode.ForBrowseAndRead:
                openFlags = openFlags | MQC.MQOO_BROWSE | MQC.MQOO_INPUT_SHARED;
                break;
            }

            return(RetryOnHCONNError(() =>
            {
                return IbmQueueManager.AccessQueue(queueName, openFlags);
            }));
        }
 public void Rollback()
 {
     try
     {
         IbmQueueManager.Backout();
     }
     catch (MQException ibmEx)
     {
         throw ibmEx.ToMqException(AddExtraInfoToError);
     }
 }
 public void Commit()
 {
     try
     {
         IbmQueueManager.Commit();
     }
     catch (MQException ibmEx)
     {
         throw ibmEx.ToMqException(AddExtraInfoToError);
     }
 }